[cig-commits] r19131 - in short/3D/PyLith/branches/pylith-scecdynrup: . doc/developer doc/userguide/boundaryconditions doc/userguide/governingeqns doc/userguide/runpylith examples examples/3d/hex8/mesh examples/bar_shearwave/quad4 examples/bar_shearwave/tri3 libsrc/pylith libsrc/pylith/bc libsrc/pylith/faults libsrc/pylith/feassemble libsrc/pylith/friction libsrc/pylith/materials libsrc/pylith/meshio libsrc/pylith/problems libsrc/pylith/topology libsrc/pylith/utils modulesrc/bc modulesrc/faults modulesrc/feassemble modulesrc/friction modulesrc/include modulesrc/materials modulesrc/meshio modulesrc/mpi modulesrc/problems modulesrc/topology modulesrc/utils playpen playpen/faultpc playpen/postproc pylith pylith/apps pylith/bc pylith/faults pylith/feassemble pylith/friction pylith/materials pylith/meshio pylith/perf pylith/problems pylith/tests pylith/utils tests/2d/faultstrip tests/2d/frictionslide tests/2d/slipdir tests/3d tests/3d/slipdir tests/topology tests_auto/2d/quad4 unittests/libtests/bc unittests/libtests/bc/data unittests/libtests/faults unittests/libtests/faults/data unittests/libtests/feassemble unittests/libtests/feassemble/data unittests/libtests/friction unittests/libtests/friction/data unittests/libtests/materials unittests/libtests/materials/data unittests/libtests/meshio unittests/libtests/meshio/data unittests/libtests/topology unittests/libtests/topology/data unittests/pytests/bc unittests/pytests/faults unittests/pytests/feassemble unittests/pytests/meshio unittests/pytests/utils

brad at geodynamics.org brad at geodynamics.org
Mon Oct 31 08:27:33 PDT 2011


Author: brad
Date: 2011-10-31 08:27:29 -0700 (Mon, 31 Oct 2011)
New Revision: 19131

Added:
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/types.hh
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/scalartypemaps.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/pylith_general.i
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATQuadrature.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKPoints.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnPoints.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_axial.timedb
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_shear.timedb
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/cyclicfriction/
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestDataWriterHDF5Ext.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPylith.py
Removed:
   short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/tmp/
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/doublearray.i
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/friction/
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitCUDA.py
Modified:
   short/3D/PyLith/branches/pylith-scecdynrup/TODO
   short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
   short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
   short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou
   short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/BoundaryCondition.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/Fault.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/SlipTimeFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Constraint.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/CellFilterAvg.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOLagrit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnSubset.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileAscii.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileBinary.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/UCDFaultFile.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/VertexFilterVecNorm.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/meshiofwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Explicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Implicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Solver.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLumped.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Distributor.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.icc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldBase.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Jacobian.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshOrder.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineEdges2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineFace4Edges2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineVol8Face4Edges2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/SubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/topologyfwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.cc
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/array.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/arrayfwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/constdefs.h
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/petscfwd.h
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievefwd.hh
   short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievetypes.hh
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/AbsorbingDampers.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/BoundaryCondition.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBoundary.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Neumann.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/bc.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/BruneSlipFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/ConstRateSlipFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/EqKinSrc.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/LiuCosSlipFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/SlipTimeFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/StepSlipFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/TimeHistorySlipFn.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/faults.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/CellGeometry.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicit.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitLgDeform.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTet4.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicit.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitCUDA.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitLgDeform.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryHex3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine1D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine2D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint1D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint2D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad2D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTet3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri2D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticity.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticityLgDeform.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/QuadratureRefCell.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticMaterial.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellPlaneStrain.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellQpQsIsotropic3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/materials.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriter.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5Ext.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterVTK.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/OutputManager.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/meshio.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/problems.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Field.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/FieldsNew.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/topology.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/TestArray.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/petsc_general.i
   short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/utils.i
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/apps/PetscApplication.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/BoundaryCondition.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesive.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveDyn.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveKin.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATLagrange.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Quadrature.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/__init__.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/Material.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubSubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5Mesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubSubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTK.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubSubMesh.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnSubset.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/__init__.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/perf/Memory.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumped.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Solver.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/tests/Solution.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/VTKDataReader.py
   short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/testarray.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/dynamic_timeweakening.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/plot_friction.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_stable.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_weak.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/velocitysteps.timedb
   short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir/pylithapp.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests/topology/test_meshmem.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_compression.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_opening.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_sliding.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_stick.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformrigidbody.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/rigidbody_soln.py
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_compression.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_opening.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_stick.cfg
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestAbsorbingDampers.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCMulti.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBoundary.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestNeumann.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestTimeDependentPoints.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMulti.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesive.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/hex8_initialtract.spatialdb
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestCellGeometry.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicit.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegrator.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticity.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature0D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureEngine.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureRefCell.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/CellGeomData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitApp.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorApp.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureApp.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/FrictionModelData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticMaterial.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStress.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStrain1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStress1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellQpQsIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellIsotropic3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellPlaneStrain.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMetadata.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestPowerLaw3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialApp.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaterialData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestCellFilterAvg.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterBCMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterFaultMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5BCMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtBCMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtFaultMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtSubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5FaultMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5Mesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5SubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterSubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKFaultMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestHDF5.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIO.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputManager.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestVertexFilterVecNorm.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldSubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldsNewMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestRefineUniform.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestSubMesh.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesive.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.cc
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.hh
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestAbsorbingDampers.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestNeumann.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicit.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicit.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATLagrange.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATSimplex.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestMeshQuadrature.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestSubMeshQuadrature.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/testhdf5.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPetscManager.py
   short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/testutils.py
Log:
Merge from trunk.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/TODO	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/TODO	2011-10-31 15:27:29 UTC (rev 19131)
@@ -2,16 +2,40 @@
 CURRENT ISSUES/PRIORITIES (1.7.0)
 ======================================================================
 
+* configure
+  
+  + Check compatibility of PyLith options with PETSc
+    - HDF5
+    - CUDA
+
+* Module building
+
+  + We want the _wrap.cxx files to work independent of PETSC_ARCH
+    specific details. This was try until we included petscconf.h in
+    pylithtypes.i to resolve single/double precision issues.
+
+* GPU utilization
+
+  + Implicit elasticity finite-element integration
+  + Explicit elasticity finite-element integration
+
+* Green's functions
+
+* 2-D materials
+
+  + DruckerPragerPlaneStrain (Drucker-Prager plane strain ) [Charles]
+  + PowerLawPlaneStrain (power law plane strain ) [Charles]
+
+* Make nucleation for spontaneous rupture modular [BRAD]
+
+  spatial and temporal variation in shear/normal stress for nucleation
+
 * GenMaxwellQpQs [BRAD]
 
   2-D and 3-D versions
   Need to redo Maxwell time calculation. Use ratio.
   Create benchmark for test (compare against fk)
 
-* Make nucleation for spontaneous rupture modular [BRAD]
-
-  spatial and temporal variation in shear/normal stress for nucleation
-
 * Reimplement parameters to use PackedFields. [BRAD]
 
     Fields
@@ -20,24 +44,11 @@
       Use PackedFields for acc, vel, disp(t+dt), disp(t), etc?
       Use Field for dispIncr(t->t+dt), residual(t)
 
-* Field split.
-
-    Add flag to material [default is false] for creating null vector
-    When setting up solver, create null vector, and pass it to KSP
-
-  Need to check performance of custom fault preconditioner.
-
-
 * Cleanup
 
-    Add elasticPrestep() to Formulation
+    Add elasticPrestep() to Formulation (called from Problem)
     Remove solnIncr, keep setField()
 
-* 2-D materials
-
-  + DruckerPragerPlaneStrain (Drucker-Prager plane strain ) [Charles]
-  + PowerLawPlaneStrain (power law plane strain ) [Charles]
-
 * Scalable distribution [MATT]
 
   + It appears that topology adjustment is not currently limiting the runs
@@ -49,10 +60,31 @@
 
   + Need ribbon around fault in order to develop algorithm
 
+======================================================================
+CURRENT ISSUES/PRIORITIES (1.8.0)
+======================================================================
+
+* GPU finite-element integrations (possible promotion to 1.7)
+
+* Higher order
+
+* Coupling
+
+* Field split. DELAY??
+
+    Add flag to material [default is false] for creating null vector
+    When setting up solver, create null vector, and pass it to KSP
+
+  Need to check performance of custom fault preconditioner.
+
 * Line search [MATT]
 
   Line search should be improved to include the inequality constraints.
 
+
+
+
+
 ----------------------------------------
 MISCELLANEOUS
 ----------------------------------------
@@ -88,22 +120,21 @@
 
 * Paper
 
+  General paper - focus on fault implementation
+  - BSSA, GGG
   
   geometry processing (adjusting topology)
   discretization (cohesive cells)
   model (Lagrange multipliers)
     Slip functions
     Fault constitutive models
-  solver
+  solver (saddle point)
+    custom preconditioner
   benchmarks
     Savage and Prescott
     Dynamic
   real problem  
 
-  General paper - focus on fault implementation
-
-  Custom preconditioner
-
 * Fault preconditioner [BRAD]
 
   FaultCohesiveLagrange::calcPreconditioner() [need unit test]

Modified: short/3D/PyLith/branches/pylith-scecdynrup/configure.ac
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/configure.ac	2011-10-31 15:27:29 UTC (rev 19131)
@@ -151,7 +151,7 @@
 #CIT_CHECK_LIB_MPI
 
 # PETSC
-CIT_PATH_PETSC([3.1.0])
+CIT_PATH_PETSC([3.2.0])
 CIT_HEADER_PETSC
 CIT_CHECK_LIB_PETSC
 CIT_CHECK_LIB_PETSC_SIEVE
@@ -215,7 +215,6 @@
 
 # CUDA
 if test "$enable_cuda" = "yes" ; then
-  CIT_PYTHON_MODULE([pycuda])
   CIT_CUDA_INCDIR
   CIT_CUDA_LIB
   CIT_CUDA_COMPILER

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/developer/howto_mergefromstable.txt	2011-10-31 15:27:29 UTC (rev 19131)
@@ -7,7 +7,7 @@
 svn log | less
 
 # Merge from stable branch.
-svn merge -r REV_FROM_LAST_MERGE:HEAD svn+ssh://svn@geodynamics.org/cig/short/3D/PyLith/branches/v1.5-stable .
+svn merge -r REV_FROM_LAST_MERGE:HEAD svn+ssh://svn@geodynamics.org/cig/short/3D/PyLith/branches/v1.6-stable .
 
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx	2011-10-31 15:27:29 UTC (rev 19131)
@@ -4727,7 +4727,7 @@
 
 \end_inset
 
-where we have replace 
+where we have replaced 
 \begin_inset Formula $\underline{C}$
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx	2011-10-31 15:27:29 UTC (rev 19131)
@@ -1174,8 +1174,11 @@
 
 \end_inset
 
-Note that because the trial solution satisfies the Dirichlet boundary condition,
- the number of basis functions for 
+Note that because the weighting function is zero on 
+\begin_inset Formula $S_{u}$
+\end_inset
+
+, the number of basis functions for 
 \begin_inset Formula $\vec{u}$
 \end_inset
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx	2011-10-31 15:27:29 UTC (rev 19131)
@@ -2647,7 +2647,7 @@
 
 
 \begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="3">
+<lyxtabular version="3" rows="5" columns="3">
 <features tabularvalignment="middle">
 <column alignment="left" valignment="top" width="2in">
 <column alignment="center" valignment="middle" width="0.75in">
@@ -2819,40 +2819,6 @@
 \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
-fs_fieldsplit_X_ksp_type
-\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
-
-\shape italic
-jacobi
-\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
-Jacobi is sometimes the best option for fault preconditioning, however we
- often use ML, X=0,1,2,...,N+1
-\end_layout
-
-\end_inset
-</cell>
-</row>
 </lyxtabular>
 
 \end_inset

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou	2011-10-31 15:27:29 UTC (rev 19131)
@@ -1,12 +1,3 @@
-## /tools/common/cubit-10.2/bin/clarox
-## Cubit Version 10.2
-## Cubit Build 24
-## Revised 12/15/2006 16:09:40 MST
-## Running 06/18/2007 10:26:50 AM
-## Command Options:
-## -warning = On
-## -information = On
-
 # ----------------------------------------------------------------------
 # Generate geometry
 # ----------------------------------------------------------------------
@@ -102,3 +93,4 @@
 # Export exodus file
 # ----------------------------------------------------------------------
 export mesh "box_hex8_1000m.exo" dimension 3 overwrite
+

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 # output
 # ----------------------------------------------------------------------
 [pylithapp.timedependent.interfaces.fault.output]
-# Add slip rate to the default output fiels of slip and traction.
+vertex_info_fields=[initial_traction]
 vertex_data_fields=[slip,slip_rate,traction]
 skip = 1
 writer.time_format = %05.2f

Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/run_examples.sh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -7,12 +7,16 @@
 
 # Run specified list of examples (single .cfg file)
 run_examples() {
+  nprocs=1
+  if [ $# == 1 ]; then
+    nprocs=$1
+  fi
   cd ${examples_dir}/$dir
   rm *.vtk
   if [ -d output ]; then rm output/*.vtk; fi
   for example in $examples; do
     echo "RUNNING $dir/$example"
-    pylith $example
+    pylith --nodes=$nprocs $example
   done
 }
 
@@ -57,17 +61,27 @@
 dir="3d/tet4"
 examples="step01.cfg step02.cfg step03.cfg step04.cfg"
 run_examples
+run_examples 2
+run_examples 3
+run_examples 4
+run_examples 5
 
 # 3d/hex8
 dir="3d/hex8"
-examples="step01.cfg step02.cfg step03.cfg step04.cfg step05.cfg step06.cfg step07.cfg step08.cfg step09.cfg step10.cfg step11.cfg step12.cfg step13.cfg step14.cfg step15.cfg step16.cfg step17.cfg"
+examples="step01.cfg step02.cfg step03.cfg step04.cfg step05.cfg step06.cfg step07.cfg step08.cfg step09.cfg step10.cfg step11.cfg step12.cfg step13.cfg step14.cfg step15.cfg step16.cfg step17.cfg step18.cfg step19.cfg"
 run_examples
 
+examples="step01.cfg step03.cfg step06.cfg step15.cfg step19.cfg"
+run_examples 2
+
 # ----------------------------------------------------------------------
 # subduction
 dir="2d/subduction"
 examples="step01.cfg step02.cfg step03.cfg"
 run_examples
+run_examples 2
+run_examples 4
+run_examples 5
 
 # ----------------------------------------------------------------------
 # bar_shearwave/tri3
@@ -93,7 +107,7 @@
 run_examples
 
 
-
+# ----------------------------------------------------------------------
 # Return to examples dir
 cd ${examples_dir}
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,19 +27,18 @@
 	friction \
 	problems
 
+SUFFIXES=.cu
+
+LTCUDACOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile nvcc $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) -arch=sm_13 -m64 -prefer-non-pic --compiler-options="$(CXXFLAGS)" $(AM_CXXFLAGS) $(NVCC_FLAGS)
+
 .cu.lo:
-	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile nvcc --compile -prefer-non-pic -m64 $(NVCC_FLAGS) -o ${@F} $<
-	echo "# ${@F} - a libtool object file" > ${@}
-	echo "# Generated by ltmain.sh (GNU libtool) 2.2.4" >> ${@}
-	echo "#" >> ${@}
-	echo "# Please DO NOT delete this file!" >> ${@}
-	echo "# It is necessary for linking the library." >> ${@}
-	echo >> ${@}
-	echo "# Name of the PIC object." >> ${@}
-	echo "pic_object='../.libs/${*F}.o'" >> ${@}
-	echo  >> ${@}
-	echo "# Name of the non-PIC object" >> ${@}
-	echo "non_pic_object=none" >> ${@}
+ at am__fastdepCXX_FALSE@	$(LTCUDACOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_FALSE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_TRUE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_TRUE@	DEPDIR=$(DEPDIR) depmode=none $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_TRUE@	$(LTCUDACOMPILE) -c -o $@ $<
 
 lib_LTLIBRARIES = libpylith.la
 
@@ -134,6 +133,7 @@
 	meshio/PsetFileAscii.cc \
 	meshio/PsetFileBinary.cc \
 	meshio/OutputSolnSubset.cc \
+	meshio/OutputSolnPoints.cc \
 	meshio/UCDFaultFile.cc \
 	problems/Formulation.cc \
 	problems/Explicit.cc \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
 typedef pylith::topology::Mesh::RealSection RealSection;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
 // Default constructor.
@@ -75,7 +75,7 @@
 // vector at integration points.
 void
 pylith::bc::AbsorbingDampers::initialize(const topology::Mesh& mesh,
-					 const double upDir[3])
+					 const PylithScalar upDir[3])
 { // initialize
   assert(0 != _boundaryMesh);
   assert(0 != _quadrature);
@@ -83,7 +83,10 @@
 
   _initializeLogger();
 
-  double_array up(upDir, 3);
+  scalar_array up(3);
+  for (int i=0; i < 3; ++i)
+    up[i] = upDir[i];
+
   const int numCorners = _quadrature->numBasis();
 
   // Get 'surface' cells (1 dimension lower than top-level cells)
@@ -118,9 +121,9 @@
   // Containers for orientation information
   const int orientationSize = spaceDim * spaceDim;
   const int jacobianSize = spaceDim * cellDim;
-  double_array jacobian(jacobianSize);
-  double jacobianDet = 0;
-  double_array orientation(orientationSize);
+  scalar_array jacobian(jacobianSize);
+  PylithScalar jacobianDet = 0;
+  scalar_array orientation(orientationSize);
 
   // open database with material property information
   _db->open();
@@ -136,15 +139,15 @@
   } // else
 
   // Container for data returned in query of database
-  double_array queryData(numValues);
-  double_array quadPtRef(cellDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array queryData(numValues);
+  scalar_array quadPtRef(cellDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Container for damping constants for current cell
-  double_array dampingConstsLocal(fiberDim);
-  double_array dampingConstsGlobal(fiberDim);
+  scalar_array dampingConstsLocal(fiberDim);
+  scalar_array dampingConstsGlobal(fiberDim);
 
-  double_array coordinatesCell(numCorners*spaceDim);
+  scalar_array coordinatesCell(numCorners*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveSubMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -152,10 +155,10 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double densityScale = _normalizer->densityScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
   assert(_normalizer->timeScale() > 0);
-  const double velocityScale = 
+  const PylithScalar velocityScale = 
     _normalizer->lengthScale() / _normalizer->timeScale();
 
   const ALE::Obj<SubRealUniformSection>& parametersSection = 
@@ -182,8 +185,8 @@
     _quadrature->computeGeometry(coordinatesCell, *c_iter);
 #endif
 
-    const double_array& quadPtsNondim = _quadrature->quadPts();
-    const double_array& quadPtsRef = _quadrature->quadPtsRef();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& quadPtsRef = _quadrature->quadPtsRef();
     quadPtsGlobal = quadPtsNondim;
     _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(), 
 				lengthScale);
@@ -204,16 +207,16 @@
 	throw std::runtime_error(msg.str());
       } // if
       // Nondimensionalize damping constants
-      const double densityN = 
+      const PylithScalar densityN = 
 	_normalizer->nondimensionalize(queryData[0], densityScale);
-      const double vpN = 
+      const PylithScalar vpN = 
 	_normalizer->nondimensionalize(queryData[1], velocityScale);
-      const double vsN = (3 == numValues) ?
+      const PylithScalar vsN = (3 == numValues) ?
 	_normalizer->nondimensionalize(queryData[2], velocityScale) :
 	0.0;
       
-      const double constTangential = densityN * vsN;
-      const double constNormal = densityN * vpN;
+      const PylithScalar constTangential = densityN * vsN;
+      const PylithScalar constNormal = densityN * vpN;
       const int numTangential = spaceDim-1;
       for (int iDim=0; iDim < numTangential; ++iDim)
 	dampingConstsLocal[iDim] = constTangential;
@@ -221,7 +224,7 @@
 
       // Compute normal/tangential orientation
       memcpy(&quadPtRef[0], &quadPtsRef[iQuad*cellDim], 
-	     cellDim*sizeof(double));
+	     cellDim*sizeof(PylithScalar));
 #if defined(PRECOMPUTE_GEOMETRY)
       coordsVisitor.clear();
       sieveSubMesh->restrictClosure(*c_iter, coordsVisitor);
@@ -251,7 +254,7 @@
 void
 pylith::bc::AbsorbingDampers::integrateResidual(
 			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != _quadrature);
@@ -270,7 +273,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -297,14 +300,14 @@
   assert(!residualSection.isNull());
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
   
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
   
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveSubMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -344,7 +347,7 @@
     sieveSubMesh->restrictClosure(*c_iter, velVisitor);
     assert(numQuadPts*spaceDim == 
 	   parametersSection->getFiberDimension(*c_iter));
-    const double* dampersCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* dampersCell = parametersSection->restrictPoint(*c_iter);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
@@ -352,17 +355,17 @@
 #endif
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute action for absorbing bc terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
 
       for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQuad*numBasis+iBasis];
+        const PylithScalar valI = wt*basis[iQuad*numBasis+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          const PylithScalar valIJ = valI * basis[iQuad*numBasis+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis*spaceDim+iDim] -= 
 	      dampersCell[iQuad*spaceDim+iDim] *
@@ -397,7 +400,7 @@
 void
 pylith::bc::AbsorbingDampers::integrateResidualLumped(
            const topology::Field<topology::Mesh>& residual,
-           const double t,
+           const PylithScalar t,
            topology::SolutionFields* const fields)
 { // integrateResidualLumped
   assert(0 != _quadrature);
@@ -416,7 +419,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -443,14 +446,14 @@
   assert(!residualSection.isNull());
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     sieveSubMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -490,7 +493,7 @@
     sieveSubMesh->restrictClosure(*c_iter, velVisitor);
     assert(numQuadPts*spaceDim == 
 	   parametersSection->getFiberDimension(*c_iter));
-    const double* dampersCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* dampersCell = parametersSection->restrictPoint(*c_iter);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
@@ -498,19 +501,19 @@
 #endif
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute action for absorbing bc terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
       const int iQ = iQuad * numBasis;
-      double valJ = 0.0;
+      PylithScalar valJ = 0.0;
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
         valJ += basis[iQ + jBasis];
       valJ *= wt;
       for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
-        const double valIJ = basis[iQ + iBasis] * valJ;
+        const PylithScalar valIJ = basis[iQ + iBasis] * valJ;
         for (int iDim = 0; iDim < spaceDim; ++iDim)
           _cellVector[iBasis*spaceDim+iDim] -= valIJ * 
 	    dampersCell[iQuad*spaceDim+iDim] * velCell[iBasis*spaceDim+iDim];
@@ -541,7 +544,7 @@
 void
 pylith::bc::AbsorbingDampers::integrateJacobian(
 				      topology::Jacobian* jacobian,
-				      const double t,
+				      const PylithScalar t,
 				      topology::SolutionFields* const fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -560,7 +563,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -587,23 +590,27 @@
     sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
 					    solutionSection);
   assert(!globalOrder.isNull());
+
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+  assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
   IndicesVisitor jacobianVisitor(*solutionSection, *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
+				 closureSize*spaceDim);
 
   // Get sparse matrix
   const PetscMat jacobianMat = jacobian->matrix();
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(dt > 0);
 
   // Allocate matrix for cell values.
   _initCellMatrix();
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     sieveSubMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -636,7 +643,7 @@
 
     // Get damping constants
     assert(numQuadPts*spaceDim == parametersSection->getFiberDimension(*c_iter));
-    const double* dampingConstsCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* dampingConstsCell = parametersSection->restrictPoint(*c_iter);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
@@ -647,17 +654,17 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute Jacobian for absorbing bc terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = 
+      const PylithScalar wt = 
 	quadWts[iQuad] * jacobianDet[iQuad] / (2.0 * dt);
       for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQ+iBasis];
+        const PylithScalar valI = wt*basis[iQ+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQ+jBasis];
+          const PylithScalar valIJ = valI * basis[iQ+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim) {
             const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
             const int jBlock = (jBasis*spaceDim + iDim);
@@ -698,7 +705,7 @@
 void
 pylith::bc::AbsorbingDampers::integrateJacobian(
 			      topology::Field<topology::Mesh>* jacobian,
-			      const double t,
+			      const PylithScalar t,
 			      topology::SolutionFields* const fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -717,7 +724,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -732,7 +739,7 @@
   const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get parameters used in integration.
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(dt > 0);
 
   // Allocate matrix for cell values.
@@ -755,7 +762,7 @@
   UpdateAddVisitor jacobianVisitor(*jacobianSection, &_cellVector[0]);
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveSubMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -788,7 +795,7 @@
 
     // Get damping constants
     assert(numQuadPts*spaceDim == parametersSection->getFiberDimension(*c_iter));
-    const double* dampingConstsCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* dampingConstsCell = parametersSection->restrictPoint(*c_iter);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
@@ -799,19 +806,19 @@
     _resetCellVector();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute Jacobian for absorbing bc terms
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad] / (2.0 * dt);
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] / (2.0 * dt);
       const int iQ = iQuad * numBasis;
-      double valJ = 0.0;
+      PylithScalar valJ = 0.0;
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
         valJ += basis[iQ + jBasis];
       valJ *= wt;
       for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
-        const double valIJ = basis[iQ + iBasis] * valJ;
+        const PylithScalar valIJ = basis[iQ + iBasis] * valJ;
         for (int iDim = 0; iDim < spaceDim; ++iDim)
           _cellVector[iBasis * spaceDim + iDim] += valIJ
               * dampingConstsCell[iQuad * spaceDim + iDim];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/AbsorbingDampers.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -90,7 +90,7 @@
    *   direction that is not collinear with surface normal.
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator.
    *
@@ -99,7 +99,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -109,7 +109,7 @@
    * @param fields Solution fields
    */
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -120,7 +120,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -131,7 +131,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/BoundaryCondition.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/BoundaryCondition.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/BoundaryCondition.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -30,7 +30,7 @@
 #include "bcfwd.hh" // forward declarations
 
 #include "pylith/topology/topologyfwd.hh" // USES Mesh
-#include "pylith/utils/arrayfwd.hh" // USES double_array
+#include "pylith/utils/arrayfwd.hh" // USES scalar_array
 
 #include "spatialdata/geocoords/geocoordsfwd.hh" // USES CoordSys
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES SpatialDB
@@ -83,7 +83,7 @@
    */
   virtual
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]) = 0;
+		  const PylithScalar upDir[3]) = 0;
 
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
 // Initialize boundary condition.
 void
 pylith::bc::DirichletBC::initialize(const topology::Mesh& mesh,
-				    const double upDir[3])
+				    const PylithScalar upDir[3])
 { // initialize
   if (0 == _bcDOF.size())
     return;
@@ -69,7 +69,7 @@
   _getPoints(mesh);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
   _queryDatabases(mesh, lengthScale, "displacement");
 } // initialize
 
@@ -193,7 +193,7 @@
 // ----------------------------------------------------------------------
 // Set values in field.
 void
-pylith::bc::DirichletBC::setField(const double t,
+pylith::bc::DirichletBC::setField(const PylithScalar t,
 				  const topology::Field<topology::Mesh>& field)
 { // setField
   const int numFixedDOF = _bcDOF.size();
@@ -219,7 +219,7 @@
   assert(!fieldSection.isNull());
   const int fiberDimension = 
     (numPoints > 0) ? fieldSection->getFiberDimension(_points[0]) : 0;
-  double_array fieldVertex(fiberDimension);
+  scalar_array fieldVertex(fiberDimension);
   
   for (int iPoint=0; iPoint < numPoints; ++iPoint) {
     const SieveMesh::point_type p_bc = _points[iPoint];
@@ -227,7 +227,7 @@
     fieldSection->restrictPoint(p_bc, &fieldVertex[0], fieldVertex.size());
 
     assert(parametersFiberDim == parametersSection->getFiberDimension(p_bc));
-    const double* parametersVertex = parametersSection->restrictPoint(p_bc);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(p_bc);
 
     for (int iDOF=0; iDOF < numFixedDOF; ++iDOF)
       fieldVertex[_bcDOF[iDOF]] = parametersVertex[valueIndex+iDOF];
@@ -239,8 +239,8 @@
 // ----------------------------------------------------------------------
 // Set increment in values from t0 to t1 in field.
 void
-pylith::bc::DirichletBC::setFieldIncr(const double t0,
-				      const double t1,
+pylith::bc::DirichletBC::setFieldIncr(const PylithScalar t0,
+				      const PylithScalar t1,
 				      const topology::Field<topology::Mesh>& field)
 { // setFieldIncr
   assert(_useSolnIncr);
@@ -268,7 +268,7 @@
   assert(!fieldSection.isNull());
   const int fiberDimension = 
     (numPoints > 0) ? fieldSection->getFiberDimension(_points[0]) : 0;
-  double_array fieldVertex(fiberDimension);
+  scalar_array fieldVertex(fiberDimension);
   
   for (int iPoint=0; iPoint < numPoints; ++iPoint) {
     const SieveMesh::point_type p_bc = _points[iPoint];
@@ -276,7 +276,7 @@
     fieldSection->restrictPoint(p_bc, &fieldVertex[0], fieldVertex.size());
 
     assert(parametersFiberDim == parametersSection->getFiberDimension(p_bc));
-    const double* parametersVertex = parametersSection->restrictPoint(p_bc);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(p_bc);
 
     for (int iDOF=0; iDOF < numFixedDOF; ++iDOF)
       fieldVertex[_bcDOF[iDOF]] = parametersVertex[valueIndex+iDOF];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBC.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -65,7 +65,7 @@
    * @param upDir Vertical direction (somtimes used in 3-D problems).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Set number of degrees of freedom that are constrained at points in field.
    *
@@ -84,7 +84,7 @@
    * @param t Current time
    * @param field Solution field
    */
-  void setField(const double t,
+  void setField(const PylithScalar t,
 		const topology::Field<topology::Mesh>& field);
 
   /** Set increment in values from t0 to t1 in field.
@@ -93,8 +93,8 @@
    * @param t1 Time t+dt.
    * @param field Solution field
    */
-  void setFieldIncr(const double t0,
-		    const double t1,
+  void setFieldIncr(const PylithScalar t0,
+		    const PylithScalar t1,
 		    const topology::Field<topology::Mesh>& field);
 
   /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -62,7 +62,7 @@
 // Initialize boundary condition.
 void
 pylith::bc::DirichletBoundary::initialize(const topology::Mesh& mesh,
-					  const double upDir[3])
+					  const PylithScalar upDir[3])
 { // initialize
   DirichletBC::initialize(mesh, upDir);
 
@@ -77,9 +77,9 @@
 					   const topology::SolutionFields& fields)
 { // getVertexField
   assert(_normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double timeScale = _normalizer->timeScale();
-  const double rateScale = lengthScale / timeScale;
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar rateScale = lengthScale / timeScale;
 
   assert(_boundaryMesh);
   const spatialdata::geocoords::CoordSys* cs = _boundaryMesh->coordsys();
@@ -131,7 +131,7 @@
 const pylith::topology::Field<pylith::topology::SubMesh>&
 pylith::bc::DirichletBoundary::_bufferVector(const char* name,
 					     const char* label,
-					     const double scale)
+					     const PylithScalar scale)
 { // _bufferVector
   typedef topology::SubMesh::SieveMesh SieveMesh;
   typedef topology::Mesh::RealUniformSection RealUniformSection;
@@ -164,7 +164,7 @@
     _outputFields->section();
   assert(!outputSection.isNull());
   const int outputFiberDim = _outputFields->fiberDim();  
-  double_array outputVertex(outputFiberDim);
+  scalar_array outputVertex(outputFiberDim);
   const int bufferIndex = _outputFields->sectionIndex("buffer (vector)");
   const int bufferFiberDim = _outputFields->sectionFiberDim("buffer (vector)");
   assert(bufferIndex + bufferFiberDim <= outputFiberDim);
@@ -184,7 +184,7 @@
     outputVertex = 0.0;
 
     assert(parametersFiberDim == parametersSection->getFiberDimension(point));
-    const double* parametersVertex = parametersSection->restrictPoint(point);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(point);
     assert(parametersVertex);
     
     for (int iDOF=0; iDOF < numFixedDOF; ++iDOF)
@@ -207,7 +207,7 @@
 const pylith::topology::Field<pylith::topology::SubMesh>&
 pylith::bc::DirichletBoundary::_bufferScalar(const char* name,
 					     const char* label,
-					     const double scale)
+					     const PylithScalar scale)
 { // _bufferScalar
   typedef topology::SubMesh::SieveMesh SieveMesh;
   typedef topology::Mesh::RealUniformSection RealUniformSection;
@@ -235,7 +235,7 @@
     _outputFields->section();
   assert(!outputSection.isNull());
   const int outputFiberDim = _outputFields->fiberDim();  
-  double_array outputVertex(outputFiberDim);
+  scalar_array outputVertex(outputFiberDim);
   const int bufferIndex = _outputFields->sectionIndex("buffer (vector)");
   const int bufferFiberDim = _outputFields->sectionFiberDim("buffer (vector)");
   assert(bufferIndex + bufferFiberDim <= outputFiberDim);
@@ -255,7 +255,7 @@
     outputVertex = 0.0;
 
     assert(parametersFiberDim == parametersSection->getFiberDimension(point));
-    const double* parametersVertex = parametersSection->restrictPoint(point);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(point);
     assert(parametersVertex);
     
     outputVertex[bufferIndex] = parametersVertex[fieldIndex];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/DirichletBoundary.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,7 +53,7 @@
    * @param upDir Vertical direction (somtimes used in 3-D problems).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Get boundary mesh.
    *
@@ -86,7 +86,7 @@
   const topology::Field<topology::SubMesh>&
   _bufferVector(const char* name,
 		const char* label,
-		const double scale);
+		const PylithScalar scale);
 
   /** Get vertex scalar field with BC information.
    *
@@ -99,7 +99,7 @@
   const topology::Field<topology::SubMesh>&
   _bufferScalar(const char* name,
 		const char* label,
-		const double scale);
+		const PylithScalar scale);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -70,7 +70,7 @@
 // vector at integration points.
 void
 pylith::bc::Neumann::initialize(const topology::Mesh& mesh,
-				const double upDir[3])
+				const PylithScalar upDir[3])
 { // initialize
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("BoundaryConditions");
@@ -86,7 +86,7 @@
 void
 pylith::bc::Neumann::integrateResidual(
 			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     topology::SolutionFields* const fields)
 { // integrateResidual
   assert(_quadrature);
@@ -95,14 +95,14 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
 
   // Allocate vectors for cell values.
   _initCellVector();
-  double_array tractionsCell(numQuadPts*spaceDim);
+  scalar_array tractionsCell(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveSubMesh>& subSieveMesh = _boundaryMesh->sieveMesh();
@@ -127,7 +127,7 @@
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     subSieveMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -152,22 +152,22 @@
     // Restrict tractions to cell
     assert(parametersFiberDim == 
 	   parametersSection->getFiberDimension(*c_iter));
-    const double* parametersCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* parametersCell = parametersSection->restrictPoint(*c_iter);
     assert(parametersCell);
-    const double* tractionsCell = &parametersCell[valueIndex];
+    const PylithScalar* tractionsCell = &parametersCell[valueIndex];
     assert(tractionsCell);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute action for traction bc terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
       for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQuad*numBasis+iBasis];
+        const PylithScalar valI = wt*basis[iQuad*numBasis+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          const PylithScalar valIJ = valI * basis[iQuad*numBasis+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis*spaceDim+iDim] += 
 	      tractionsCell[iQuad*spaceDim+iDim] * valIJ;
@@ -236,9 +236,9 @@
   assert(_quadrature);
   assert(_boundaryMesh);
   
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
-  const double rateScale = pressureScale / timeScale;
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar rateScale = pressureScale / timeScale;
 
   const int spaceDim = _quadrature->spaceDim();
   const int numQuadPts = _quadrature->numQuadPts();
@@ -386,7 +386,7 @@
 pylith::bc::Neumann::_queryDB(const char* name,
 			      spatialdata::spatialdb::SpatialDB* const db,
 			      const int querySize,
-			      const double scale)
+			      const PylithScalar scale)
 { // _queryDB
   assert(name);
   assert(db);
@@ -410,11 +410,11 @@
   
   // Containers for database query results and quadrature coordinates in
   // reference geometry.
-  double_array valuesCell(numQuadPts*querySize);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array valuesCell(numQuadPts*querySize);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get sections.
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     subSieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -428,13 +428,13 @@
   const int valueIndex = _parameters->sectionIndex(name);
   const int valueFiberDim = _parameters->sectionFiberDim(name);
   assert(valueIndex+valueFiberDim <= parametersFiberDim);
-  double_array parametersCell(parametersFiberDim);
+  scalar_array parametersCell(parametersFiberDim);
 
   const spatialdata::geocoords::CoordSys* cs = _boundaryMesh->coordsys();
   assert(cs);
 
   assert(_normalizer);
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
   // Compute quadrature information
   _quadrature->initializeGeometry();
@@ -454,7 +454,7 @@
     subSieveMesh->restrictClosure(*c_iter, coordsVisitor);
     _quadrature->computeGeometry(coordinatesCell, *c_iter);
 #endif
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
     quadPtsGlobal = quadPtsNondim;
     _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				lengthScale);
@@ -495,13 +495,15 @@
 // Initialize boundary condition. Determine orienation and compute traction
 // vector at integration points.
 void
-  pylith::bc::Neumann::_paramsLocalToGlobal(const double upDir[3])
+  pylith::bc::Neumann::_paramsLocalToGlobal(const PylithScalar upDir[3])
 { // _paramsLocalToGlobal
   assert(_boundaryMesh);
   assert(_parameters);
   assert(_quadrature);
 
-  double_array up(upDir, 3);
+  scalar_array up(3);
+  for (int i=0; i < 3; ++i)
+    up[i] = upDir[i];
 
   // Get 'surface' cells (1 dimension lower than top-level cells)
   const ALE::Obj<SieveSubMesh>& subSieveMesh = _boundaryMesh->sieveMesh();
@@ -518,18 +520,18 @@
   const int numBasis = _quadrature->numBasis();
   const int numQuadPts = _quadrature->numQuadPts();
   const int spaceDim = cellGeometry.spaceDim();
-  double_array quadPtRef(cellDim);
-  const double_array& quadPtsRef = _quadrature->quadPtsRef();
+  scalar_array quadPtRef(cellDim);
+  const scalar_array& quadPtsRef = _quadrature->quadPtsRef();
   
   // Containers for orientation information
   const int orientationSize = spaceDim * spaceDim;
   const int jacobianSize = spaceDim * cellDim;
-  double_array jacobian(jacobianSize);
-  double jacobianDet = 0;
-  double_array orientation(orientationSize);
+  scalar_array jacobian(jacobianSize);
+  PylithScalar jacobianDet = 0;
+  scalar_array orientation(orientationSize);
 
   // Get sections.
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     subSieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -540,8 +542,8 @@
     _parameters->section();
   assert(!parametersSection.isNull());
   const int parametersFiberDim = _parameters->fiberDim();
-  double_array parametersCellLocal(parametersFiberDim);
-  double_array parametersCellGlobal(parametersFiberDim);
+  scalar_array parametersCellLocal(parametersFiberDim);
+  scalar_array parametersCellGlobal(parametersFiberDim);
 
   const int initialIndex = 
     (_dbInitial) ? _parameters->sectionIndex("initial") : -1;
@@ -580,7 +582,7 @@
 	++iQuad, iRef+=cellDim, iSpace+=spaceDim) {
       // Compute Jacobian and determinant at quadrature point, then get
       // orientation.
-      memcpy(&quadPtRef[0], &quadPtsRef[iRef], cellDim*sizeof(double));
+      memcpy(&quadPtRef[0], &quadPtsRef[iRef], cellDim*sizeof(PylithScalar));
 #if defined(PRECOMPUTE_GEOMETRY)
       coordsVisitor.clear();
       subSieveMesh->restrictClosure(*c_iter, coordsVisitor);
@@ -596,8 +598,8 @@
 	// coordinate system
 	assert(initialIndex >= 0);
 	assert(initialFiberDim == numQuadPts*spaceDim);
-	double* initialGlobal = &parametersCellGlobal[initialIndex+iSpace];
-	double* initialLocal = &parametersCellLocal[initialIndex+iSpace];
+	PylithScalar* initialGlobal = &parametersCellGlobal[initialIndex+iSpace];
+	PylithScalar* initialLocal = &parametersCellLocal[initialIndex+iSpace];
 	for(int iDim = 0; iDim < spaceDim; ++iDim) {
 	  initialGlobal[iDim] = 0.0;
 	  for(int jDim = 0; jDim < spaceDim; ++jDim)
@@ -611,8 +613,8 @@
 	// coordinate system
 	assert(rateIndex >= 0);
 	assert(rateFiberDim == numQuadPts*spaceDim);
-	double* rateGlobal = &parametersCellGlobal[rateIndex+iSpace];
-	double* rateLocal = &parametersCellLocal[rateIndex+iSpace];
+	PylithScalar* rateGlobal = &parametersCellGlobal[rateIndex+iSpace];
+	PylithScalar* rateLocal = &parametersCellLocal[rateIndex+iSpace];
 	for(int iDim = 0; iDim < spaceDim; ++iDim) {
 	  rateGlobal[iDim] = 0.0;
 	  for(int jDim = 0; jDim < spaceDim; ++jDim)
@@ -626,8 +628,8 @@
 	// coordinate system
 	assert(changeIndex >= 0);
 	assert(changeFiberDim == numQuadPts*spaceDim);
-	double* changeGlobal = &parametersCellGlobal[changeIndex+iSpace];
-	double* changeLocal = &parametersCellLocal[changeIndex+iSpace];
+	PylithScalar* changeGlobal = &parametersCellGlobal[changeIndex+iSpace];
+	PylithScalar* changeLocal = &parametersCellLocal[changeIndex+iSpace];
 	for(int iDim = 0; iDim < spaceDim; ++iDim) {
 	  changeGlobal[iDim] = 0.0;
 	  for(int jDim = 0; jDim < spaceDim; ++jDim)
@@ -647,13 +649,13 @@
 // ----------------------------------------------------------------------
 // Calculate temporal and spatial variation of value over the list of Submesh.
 void
-pylith::bc::Neumann::_calculateValue(const double t)
+pylith::bc::Neumann::_calculateValue(const PylithScalar t)
 { // _calculateValue
   assert(_parameters);
   assert(_boundaryMesh);
   assert(_quadrature);
 
-  const double timeScale = _getNormalizer().timeScale();
+  const PylithScalar timeScale = _getNormalizer().timeScale();
 
   // Get 'surface' cells (1 dimension lower than top-level cells)
   const ALE::Obj<SieveSubMesh>& subSieveMesh = _boundaryMesh->sieveMesh();
@@ -671,7 +673,7 @@
     _parameters->section();
   assert(!parametersSection.isNull());
   const int parametersFiberDim = _parameters->fiberDim();
-  double_array parametersCell(parametersFiberDim);
+  scalar_array parametersCell(parametersFiberDim);
   
   const int valueIndex = _parameters->sectionIndex("value");
   const int valueFiberDim = _parameters->sectionFiberDim("value");
@@ -726,7 +728,7 @@
       assert(rateTimeFiberDim == numQuadPts);
       
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const double tRel = t - parametersCell[rateTimeIndex+iQuad];
+	const PylithScalar tRel = t - parametersCell[rateTimeIndex+iQuad];
 	if (tRel > 0.0)  // rate of change integrated over time
 	  for (int iDim=0; iDim < spaceDim; ++iDim)
 	    parametersCell[valueIndex+iQuad*spaceDim+iDim] += 
@@ -742,11 +744,11 @@
       assert(changeTimeFiberDim == numQuadPts);
 
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const double tRel = t - parametersCell[changeTimeIndex+iQuad];
+	const PylithScalar tRel = t - parametersCell[changeTimeIndex+iQuad];
 	if (tRel >= 0) { // change in value over time
-	  double scale = 1.0;
+	  PylithScalar scale = 1.0;
 	  if (0 != _dbTimeHistory) {
-	    double tDim = tRel;
+	    PylithScalar tDim = tRel;
 	    _getNormalizer().dimensionalize(&tDim, 1, timeScale);
 	    const int err = _dbTimeHistory->query(&scale, tDim);
 	    if (0 != err) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/Neumann.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
    *   direction that is not collinear with surface normal.
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator.
    *
@@ -65,7 +65,7 @@
    * @param fields Solution fields.
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Verify configuration is acceptable.
@@ -115,21 +115,21 @@
   void _queryDB(const char* name,
 		spatialdata::spatialdb::SpatialDB* const db,
 		const int querySize,
-		const double scale);
+		const PylithScalar scale);
 
   /** Convert parameters in local coordinates to global coordinates.
    *
    * @param upDir Direction perpendicular to horizontal surface tangent 
    *   direction that is not collinear with surface normal.
    */
-  void _paramsLocalToGlobal(const double upDir[3]);
+  void _paramsLocalToGlobal(const PylithScalar upDir[3]);
 
   /** Calculate spatial and temporal variation of value over the list
    *  of submesh.
    *
    * @param t Current time.
    */
-  void _calculateValue(const double t);
+  void _calculateValue(const PylithScalar t);
 
   // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -62,7 +62,7 @@
 // Initialize boundary condition.
 void
 pylith::bc::PointForce::initialize(const topology::Mesh& mesh,
-				    const double upDir[3])
+				    const PylithScalar upDir[3])
 { // initialize
   if (0 == _bcDOF.size())
     return;
@@ -70,9 +70,9 @@
   _getPoints(mesh);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
 
   _queryDatabases(mesh, forceScale, "force");
 } // initialize
@@ -82,7 +82,7 @@
 void
 pylith::bc::PointForce::integrateResidual(
 			   const topology::Field<topology::Mesh>& residual,
-			   const double t,
+			   const PylithScalar t,
 			   topology::SolutionFields* const fields)
 { // integrateResidualAssembled
   assert(_parameters);
@@ -99,7 +99,7 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  double_array residualVertex(spaceDim);
+  scalar_array residualVertex(spaceDim);
   const ALE::Obj<RealSection>& residualSection = residual.section();
   assert(!residualSection.isNull());
 
@@ -130,7 +130,7 @@
     residualVertex *= 0.0; // Reset residual contribution to zero.
     
     assert(parametersFiberDim == parametersSection->getFiberDimension(p_bc));
-    const double* parametersVertex = parametersSection->restrictPoint(p_bc);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(p_bc);
     assert(parametersVertex);
 
     for (int iDOF=0; iDOF < numBCDOF; ++iDOF)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/PointForce.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
    * @param upDir Vertical direction (somtimes used in 3-D problems).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator.
    *
@@ -64,7 +64,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -78,11 +78,11 @@
 // Query databases for parameters.
 void
 pylith::bc::TimeDependentPoints::_queryDatabases(const topology::Mesh& mesh,
-						 const double valueScale,
+						 const PylithScalar valueScale,
 						 const char* fieldName)
 { // _queryDatabases
-  const double timeScale = _getNormalizer().timeScale();
-  const double rateScale = valueScale / timeScale;
+  const PylithScalar timeScale = _getNormalizer().timeScale();
+  const PylithScalar rateScale = valueScale / timeScale;
 
   const int numPoints = _points.size();
   const int numBCDOF = _bcDOF.size();
@@ -209,7 +209,7 @@
 pylith::bc::TimeDependentPoints::_queryDB(const char* name,
 				 spatialdata::spatialdb::SpatialDB* const db,
 				 const int querySize,
-				 const double scale)
+				 const PylithScalar scale)
 { // _queryDB
   assert(name);
   assert(db);
@@ -220,9 +220,9 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = _getNormalizer().lengthScale();
+  const PylithScalar lengthScale = _getNormalizer().lengthScale();
 
-  double_array coordsVertex(spaceDim);
+  scalar_array coordsVertex(spaceDim);
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<RealSection>& coordinates = 
@@ -236,9 +236,9 @@
   const int valueIndex = _parameters->sectionIndex(name);
   const int valueFiberDim = _parameters->sectionFiberDim(name);
   assert(valueIndex+valueFiberDim <= parametersFiberDim);
-  double_array parametersVertex(parametersFiberDim);
+  scalar_array parametersVertex(parametersFiberDim);
 
-  double_array valueVertex(querySize);
+  scalar_array valueVertex(querySize);
 
   const int numPoints = _points.size();
   for (int iPoint=0; iPoint < numPoints; ++iPoint) {
@@ -275,19 +275,19 @@
 // ----------------------------------------------------------------------
 // Calculate temporal and spatial variation of value over the list of points.
 void
-pylith::bc::TimeDependentPoints::_calculateValue(const double t)
+pylith::bc::TimeDependentPoints::_calculateValue(const PylithScalar t)
 { // _calculateValue
   assert(_parameters);
 
   const int numPoints = _points.size();
   const int numBCDOF = _bcDOF.size();
-  const double timeScale = _getNormalizer().timeScale();
+  const PylithScalar timeScale = _getNormalizer().timeScale();
 
   const ALE::Obj<RealUniformSection>& parametersSection = 
     _parameters->section();
   assert(!parametersSection.isNull());
   const int parametersFiberDim = _parameters->fiberDim();
-  double_array parametersVertex(parametersFiberDim);
+  scalar_array parametersVertex(parametersFiberDim);
   
   const int valueIndex = _parameters->sectionIndex("value");
   const int valueFiberDim = _parameters->sectionFiberDim("value");
@@ -340,7 +340,7 @@
       assert(rateTimeIndex >= 0);
       assert(rateTimeFiberDim == 1);
       
-      const double tRel = t - parametersVertex[rateTimeIndex];
+      const PylithScalar tRel = t - parametersVertex[rateTimeIndex];
       if (tRel > 0.0)  // rate of change integrated over time
 	for (int iDim=0; iDim < numBCDOF; ++iDim)
 	  parametersVertex[valueIndex+iDim] += 
@@ -354,11 +354,11 @@
       assert(changeTimeIndex >= 0);
       assert(changeTimeFiberDim == 1);
 
-      const double tRel = t - parametersVertex[changeTimeIndex];
+      const PylithScalar tRel = t - parametersVertex[changeTimeIndex];
       if (tRel >= 0) { // change in value over time
-	double scale = 1.0;
+	PylithScalar scale = 1.0;
 	if (0 != _dbTimeHistory) {
-	  double tDim = tRel;
+	  PylithScalar tDim = tRel;
 	  _getNormalizer().dimensionalize(&tDim, 1, timeScale);
 	  const int err = _dbTimeHistory->query(&scale, tDim);
 	  if (0 != err) {
@@ -383,20 +383,20 @@
 // Calculate increment in temporal and spatial variation of value over
 // the list of points.
 void
-pylith::bc::TimeDependentPoints::_calculateValueIncr(const double t0,
-						     const double t1)
+pylith::bc::TimeDependentPoints::_calculateValueIncr(const PylithScalar t0,
+						     const PylithScalar t1)
 { // _calculateValueIncr
   assert(_parameters);
 
   const int numPoints = _points.size();
   const int numBCDOF = _bcDOF.size();
-  const double timeScale = _getNormalizer().timeScale();
+  const PylithScalar timeScale = _getNormalizer().timeScale();
 
   const ALE::Obj<RealUniformSection>& parametersSection = 
     _parameters->section();
   assert(!parametersSection.isNull());
   const int parametersFiberDim = _parameters->fiberDim();
-  double_array parametersVertex(parametersFiberDim);
+  scalar_array parametersVertex(parametersFiberDim);
   
   const int valueIndex = _parameters->sectionIndex("value");
   const int valueFiberDim = _parameters->sectionFiberDim("value");
@@ -439,8 +439,8 @@
       assert(rateTimeFiberDim == 1);
       
       // Account for when rate dependence begins.
-      const double tRate = parametersVertex[rateTimeIndex];
-      double tIncr = 0.0;
+      const PylithScalar tRate = parametersVertex[rateTimeIndex];
+      PylithScalar tIncr = 0.0;
       if (t0 > tRate) // rate dependence for t0 to t1
 	tIncr = t1 - t0;
       else if (t1 > tRate) // rate dependence for tRef to t1
@@ -461,12 +461,12 @@
       assert(changeTimeIndex >= 0);
       assert(changeTimeFiberDim == 1);
 
-      const double tChange = parametersVertex[changeTimeIndex];
+      const PylithScalar tChange = parametersVertex[changeTimeIndex];
       if (t0 >= tChange) { // increment is after change starts
-	double scale0 = 1.0;
-	double scale1 = 1.0;
+	PylithScalar scale0 = 1.0;
+	PylithScalar scale1 = 1.0;
 	if (0 != _dbTimeHistory) {
-	  double tDim = t0 - tChange;
+	  PylithScalar tDim = t0 - tChange;
 	  _getNormalizer().dimensionalize(&tDim, 1, timeScale);
 	  int err = _dbTimeHistory->query(&scale0, tDim);
 	  if (0 != err) {
@@ -491,9 +491,9 @@
 	  parametersVertex[valueIndex+iDim] += 
 	    parametersVertex[changeIndex+iDim] * (scale1 - scale0);
       } else if (t1 >= tChange) { // increment spans when change starts
-	double scale1 = 1.0;
+	PylithScalar scale1 = 1.0;
 	if (0 != _dbTimeHistory) {
-	  double tDim = t1 - tChange;
+	  PylithScalar tDim = t1 - tChange;
 	  _getNormalizer().dimensionalize(&tDim, 1, timeScale);
 	  int err = _dbTimeHistory->query(&scale1, tDim);
 	  if (0 != err) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/bc/TimeDependentPoints.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,7 +80,7 @@
    * @param fieldName Name of field associated with value.
    */
   void _queryDatabases(const topology::Mesh& mesh,
-		       const double valueScale,
+		       const PylithScalar valueScale,
 		       const char* fieldName);
 
   /** Query database for values.
@@ -93,14 +93,14 @@
   void _queryDB(const char* name,
 		spatialdata::spatialdb::SpatialDB* const db,
 		const int querySize,
-		const double scale);
+		const PylithScalar scale);
 
   /** Calculate spatial and temporal variation of value over the list
    *  of points.
    *
    * @param t Current time.
    */
-  void _calculateValue(const double t);
+  void _calculateValue(const PylithScalar t);
 
   /** Calculate increment in spatial and temporal variation of value
    *  over the list of points.
@@ -108,8 +108,8 @@
    * @param t0 Time when increment begins.
    * @param t1 Time when increment ends.
    */
-  void _calculateValueIncr(const double t0,
-			   const double t1);
+  void _calculateValueIncr(const PylithScalar t0,
+			   const PylithScalar t1);
 
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
 pylith::faults::BruneSlipFn::initialize(
 			    const topology::SubMesh& faultMesh,
 			    const spatialdata::units::Nondimensional& normalizer,
-			    const double originTime)
+			    const PylithScalar originTime)
 { // initialize
   assert(0 != _dbFinalSlip);
   assert(0 != _dbSlipTime);
@@ -83,8 +83,8 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = normalizer.lengthScale();
-  const double timeScale = normalizer.timeScale();
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
 
   // Get vertices in fault mesh
   const ALE::Obj<SieveMesh>& sieveMesh = faultMesh.sieveMesh();
@@ -168,7 +168,7 @@
   assert(!coordinates.isNull());
 
   _slipVertex.resize(spaceDim);
-  double_array vCoordsGlobal(spaceDim);
+  scalar_array vCoordsGlobal(spaceDim);
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -231,7 +231,7 @@
 // Get slip on fault surface at time t.
 void
 pylith::faults::BruneSlipFn::slip(topology::Field<topology::SubMesh>* slip,
-				  const double t)
+				  const PylithScalar t)
 { // slip
   assert(0 != slip);
   assert(0 != _parameters);
@@ -269,14 +269,14 @@
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
     riseTimeSection->restrictPoint(*v_iter, &_riseTimeVertex, 1);
 
-    double finalSlipMag = 0.0;
+    PylithScalar finalSlipMag = 0.0;
     for (int i=0; i < spaceDim; ++i)
       finalSlipMag += _slipVertex[i]*_slipVertex[i];
     finalSlipMag = sqrt(finalSlipMag);
 
-    const double slip = _slipFn(t-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip = _slipFn(t-_slipTimeVertex, finalSlipMag,
 				_riseTimeVertex);
-    const double scale = finalSlipMag > 0.0 ? slip / finalSlipMag : 0.0;
+    const PylithScalar scale = finalSlipMag > 0.0 ? slip / finalSlipMag : 0.0;
     _slipVertex *= scale;
     
     // Update field
@@ -291,8 +291,8 @@
 void
 pylith::faults::BruneSlipFn::slipIncr(
 				      topology::Field<topology::SubMesh>* slip,
-				      const double t0,
-				      const double t1)
+				      const PylithScalar t0,
+				      const PylithScalar t1)
 { // slipIncr
   assert(0 != slip);
   assert(0 != _parameters);
@@ -330,16 +330,16 @@
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
     riseTimeSection->restrictPoint(*v_iter, &_riseTimeVertex, 1);
 
-    double finalSlipMag = 0.0;
+    PylithScalar finalSlipMag = 0.0;
     for (int i=0; i < spaceDim; ++i)
       finalSlipMag += _slipVertex[i]*_slipVertex[i];
     finalSlipMag = sqrt(finalSlipMag);
 
-    const double slip0 = _slipFn(t0-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip0 = _slipFn(t0-_slipTimeVertex, finalSlipMag,
 				 _riseTimeVertex);
-    const double slip1 = _slipFn(t1-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip1 = _slipFn(t1-_slipTimeVertex, finalSlipMag,
 				 _riseTimeVertex);
-    const double scale = finalSlipMag > 0.0 ? 
+    const PylithScalar scale = finalSlipMag > 0.0 ? 
       (slip1 - slip0) / finalSlipMag : 0.0;
     _slipVertex *= scale;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,8 @@
 
 #include "pylith/topology/topologyfwd.hh" // USES Fields<Field<SubMesh> >
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/types.hh" // HASA PylithScalar
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // BruneSlipFn ----------------------------------------------------------
 /** @brief Brune slip-time function.
@@ -84,7 +85,7 @@
    */
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0);
+		  const PylithScalar originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *
@@ -94,7 +95,7 @@
    * @returns Slip vector as left-lateral/reverse/normal.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -105,8 +106,8 @@
    * @returns Increment in slip vector as left-lateral/reverse/normal.
    */
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -138,16 +139,16 @@
    * @returns Slip at point at time t
    */
   static
-  double _slipFn(const double t,
-		 const double finalSlip,
-		 const double riseTime);
+  PylithScalar _slipFn(const PylithScalar t,
+		 const PylithScalar finalSlip,
+		 const PylithScalar riseTime);
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _slipTimeVertex; ///< Slip time at a vertex.
-  double _riseTimeVertex; ///< Rise time at a vertex.
-  double_array _slipVertex; ///< Slip at a vertex.
+  PylithScalar _slipTimeVertex; ///< Slip time at a vertex.
+  PylithScalar _riseTimeVertex; ///< Rise time at a vertex.
+  scalar_array _slipVertex; ///< Slip at a vertex.
 
   /// Spatial database for final slip.
   spatialdata::spatialdb::SpatialDB* _dbFinalSlip;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/BruneSlipFn.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,14 +46,14 @@
 
 // Compute slip using slip time function.
 inline
-double
-pylith::faults::BruneSlipFn::_slipFn(const double t,
-				     const double finalSlip,
-				     const double riseTime) {
-  double slip = 0.0;
+PylithScalar
+pylith::faults::BruneSlipFn::_slipFn(const PylithScalar t,
+				     const PylithScalar finalSlip,
+				     const PylithScalar riseTime) {
+  PylithScalar slip = 0.0;
   if (t > 0.0) {
     assert(riseTime > 0.0);
-    const double tau = 0.21081916*riseTime;
+    const PylithScalar tau = 0.21081916*riseTime;
     slip = finalSlip * (1.0 - exp(-t/tau) * (1.0 + t/tau));
   } // if
   return slip;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/CohesiveTopology.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -499,11 +499,11 @@
   for (TopologyOps::PointSet::const_iterator c_iter = noReplaceCells.begin();
       c_iter != noRCellsEnd;
       ++c_iter) {
-    const double minusOne = -1.0;
+    const PylithScalar minusOne = -1.0;
     if (replacedCells->restrictPoint(*c_iter)[0] == 0.0) {
       replacedCells->updatePoint(*c_iter, &minusOne);
     } else {
-      const double minusTwo = -2.0;
+      const PylithScalar minusTwo = -2.0;
       replacedCells->updatePoint(*c_iter, &minusTwo);
     } // if/else
   } // for
@@ -513,20 +513,20 @@
       c_iter != rCellsEnd;
       ++c_iter) {
     if (replaceCellsBase.find(*c_iter) != replaceCellsBase.end()) {
-      const double one = 1.0;
+      const PylithScalar one = 1.0;
       if (replacedCells->restrictPoint(*c_iter)[0] == 0.0) {
         replacedCells->updatePoint(*c_iter, &one);
       } else {
-        const double two = 2.0;
+        const PylithScalar two = 2.0;
         replacedCells->updatePoint(*c_iter, &two);
       } // if/else
       continue;
     } // if
-    const double ten = 10.0;
+    const PylithScalar ten = 10.0;
     if (replacedCells->restrictPoint(*c_iter)[0] == 0.0) {
       replacedCells->updatePoint(*c_iter, &ten);
     } else {
-      const double twenty = 20.0;
+      const PylithScalar twenty = 20.0;
       replacedCells->updatePoint(*c_iter, &twenty);
     } // if/else
     // There should be a way to check for boundary elements

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -70,7 +70,7 @@
 pylith::faults::ConstRateSlipFn::initialize(
 			    const topology::SubMesh& faultMesh,
 			    const spatialdata::units::Nondimensional& normalizer,
-			    const double originTime)
+			    const PylithScalar originTime)
 { // initialize
   assert(0 != _dbSlipRate);
   assert(0 != _dbSlipTime);
@@ -79,9 +79,9 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = normalizer.lengthScale();
-  const double timeScale = normalizer.timeScale();
-  const double velocityScale =
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
+  const PylithScalar velocityScale =
     normalizer.lengthScale() / normalizer.timeScale();
 
   // Get vertices in fault mesh
@@ -153,7 +153,7 @@
   assert(!coordinates.isNull());
 
   _slipRateVertex.resize(spaceDim);
-  double_array vCoordsGlobal(spaceDim);
+  scalar_array vCoordsGlobal(spaceDim);
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -202,7 +202,7 @@
 // Get slip on fault surface at time t.
 void
 pylith::faults::ConstRateSlipFn::slip(topology::Field<topology::SubMesh>* slip,
-				      const double t)
+				      const PylithScalar t)
 { // slip
   assert(0 != slip);
   assert(0 != _parameters);
@@ -234,8 +234,8 @@
 				   _slipRateVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    const double relTime = t - _slipTimeVertex;
-    const double elapsedTime = (relTime > 0) ? relTime : 0.0;
+    const PylithScalar relTime = t - _slipTimeVertex;
+    const PylithScalar elapsedTime = (relTime > 0) ? relTime : 0.0;
     _slipRateVertex *= elapsedTime; // Convert slip rate to slip
     
     // Update field
@@ -250,8 +250,8 @@
 void
 pylith::faults::ConstRateSlipFn::slipIncr(
 				      topology::Field<topology::SubMesh>* slip,
-				      const double t0,
-				      const double t1)
+				      const PylithScalar t0,
+				      const PylithScalar t1)
 { // slipIncr
   assert(0 != slip);
   assert(0 != _parameters);
@@ -283,9 +283,9 @@
 				   _slipRateVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    const double relTime0 = t0 - _slipTimeVertex;
-    const double relTime1 = t1 - _slipTimeVertex;
-    double elapsedTime = 0.0;
+    const PylithScalar relTime0 = t0 - _slipTimeVertex;
+    const PylithScalar relTime1 = t1 - _slipTimeVertex;
+    PylithScalar elapsedTime = 0.0;
     if (relTime0 > 0)
       elapsedTime = t1 - t0;
     else if (relTime1 > 0)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/ConstRateSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 
 #include "pylith/topology/topologyfwd.hh" // USES Fields<Field<SubMesh> >
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // ConstRateTimeFn ------------------------------------------------------
 /** @brief Constant slip rate slip-time function.
@@ -76,7 +76,7 @@
    */
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0);
+		  const PylithScalar originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *
@@ -86,7 +86,7 @@
    * @returns Slip vector as left-lateral/reverse/normal.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -97,8 +97,8 @@
    * @returns Increment in slip vector as left-lateral/reverse/normal.
    */
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -121,8 +121,8 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _slipTimeVertex; ///< Slip time at a vertex.
-  double_array _slipRateVertex; ///< Slip rate at a vertex.
+  PylithScalar _slipTimeVertex; ///< Slip time at a vertex.
+  scalar_array _slipRateVertex; ///< Slip rate at a vertex.
 
   /// Spatial database for slip rate.
   spatialdata::spatialdb::SpatialDB* _dbSlipRate;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,14 +52,14 @@
 // ----------------------------------------------------------------------
 // Set origin time for earthquake source.
 void
-pylith::faults::EqKinSrc::originTime(const double value)
+pylith::faults::EqKinSrc::originTime(const PylithScalar value)
 { // originTime
   _originTime = value;
 } // originTime
 
 // ----------------------------------------------------------------------
 // Get origin time for earthquake source.
-double
+PylithScalar
 pylith::faults::EqKinSrc::originTime(void) const
 { // originTime
   return _originTime;
@@ -91,7 +91,7 @@
 void
 pylith::faults::EqKinSrc::slip(
 			   topology::Field<topology::SubMesh>* const slipField,
-			   const double t)
+			   const PylithScalar t)
 { // slip
   assert(0 != _slipfn);
   _slipfn->slip(slipField, t);
@@ -102,8 +102,8 @@
 void
 pylith::faults::EqKinSrc::slipIncr(
 			   topology::Field<topology::SubMesh>* const slipField,
-			   const double t0,
-			   const double t1)
+			   const PylithScalar t0,
+			   const PylithScalar t1)
 { // slip
   assert(0 != _slipfn);
   _slipfn->slipIncr(slipField, t0, t1);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/EqKinSrc.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,13 +59,13 @@
    *
    * @param value Origin time for earthquake source.
    */
-  void originTime(const double value);
+  void originTime(const PylithScalar value);
 
   /** Get origin time for earthquake source.
    *
    * @returns Origin time for earthquake source.
    */
-  double originTime(void) const;
+  PylithScalar originTime(void) const;
 
   /** Set slip time function.
    *
@@ -87,7 +87,7 @@
    * @param t Time t.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
 
   /** Get increment of slip on fault surface between time t0 and t1.
    *
@@ -96,8 +96,8 @@
    * @param t1 Time for end of slip increment.
    */
   void slipIncr(topology::Field<topology::SubMesh>* const slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -120,7 +120,7 @@
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
-  double _originTime; ///< Origin time for earthquake source
+  PylithScalar _originTime; ///< Origin time for earthquake source
   SlipTimeFn* _slipfn; ///< Slip time function
 
 }; // class EqKinSrc

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/Fault.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/Fault.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/Fault.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 #include "faultsfwd.hh" // forward declarations
 
 #include "pylith/topology/topologyfwd.hh" // USES Field<SubMesh>, SubMesh
-#include "pylith/utils/arrayfwd.hh" // USES double_array
+#include "pylith/utils/arrayfwd.hh" // USES scalar_array
 
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES SpatialDB
 
@@ -115,7 +115,7 @@
    */
   virtual
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]) = 0;
+		  const PylithScalar upDir[3]) = 0;
 
   /** Get mesh associated with fault fields.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,14 +57,12 @@
 
 typedef pylith::topology::Field<pylith::topology::SubMesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
-const double pylith::faults::FaultCohesiveDyn::_slipRateTolerance = 1.0e-12;
-
-// ----------------------------------------------------------------------
 // Default constructor.
 pylith::faults::FaultCohesiveDyn::FaultCohesiveDyn(void) :
+  _zeroTolerance(1.0e-10),
   _dbInitialTract(0),
   _friction(0),
   _jacobian(0),
@@ -112,10 +110,25 @@
 } // frictionModel
 
 // ----------------------------------------------------------------------
+// Nondimensional tolerance for detecting near zero values.
+void
+pylith::faults::FaultCohesiveDyn::zeroTolerance(const PylithScalar value)
+{ // zeroTolerance
+  if (value < 0.0) {
+    std::ostringstream msg;
+    msg << "Tolerance (" << value << ") for detecting values near zero for "
+      "fault " << label() << " must be nonnegative.";
+    throw std::runtime_error(msg.str());
+  } // if
+  
+  _zeroTolerance = value;
+} // zeroTolerance
+
+// ----------------------------------------------------------------------
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveDyn::initialize(const topology::Mesh& mesh,
-					      const double upDir[3])
+					     const PylithScalar upDir[3])
 { // initialize
   assert(0 != upDir);
   assert(0 != _quadrature);
@@ -131,19 +144,20 @@
   assert(0 != _faultMesh);
   assert(0 != _fields);
   _friction->normalizer(*_normalizer);
-  _friction->initialize(*_faultMesh, _quadrature, _fields->get("area"));
+  _friction->initialize(*_faultMesh, _quadrature);
 
   const spatialdata::geocoords::CoordSys* cs = mesh.coordsys();
   assert(0 != cs);
 
+  // Create field for relative velocity associated with Lagrange vertex k
+  _fields->add("relative velocity", "relative_velocity");
+  topology::Field<topology::SubMesh>& velRel = 
+    _fields->get("relative velocity");
+  topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+  velRel.cloneSection(dispRel);
+  velRel.vectorFieldType(topology::FieldBase::VECTOR);
+  velRel.scale(_normalizer->lengthScale() / _normalizer->timeScale());
 
-  // Create field for slip rate associated with Lagrange vertex k
-  _fields->add("slip rate", "slip_rate");
-  topology::Field<topology::SubMesh>& slipRate = _fields->get("slip rate");
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  slipRate.cloneSection(slip);
-  slipRate.vectorFieldType(topology::FieldBase::VECTOR);
-
   //logger.stagePop();
 } // initialize
 
@@ -152,11 +166,12 @@
 void
 pylith::faults::FaultCohesiveDyn::integrateResidual(
 			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != fields);
   assert(0 != _fields);
+  assert(0 != _logger);
 
   // Initial fault tractions have been assembled, so they do not need
   // assembling across processors.
@@ -167,32 +182,56 @@
   if (0 == _dbInitialTract)
     return;
 
+  const int setupEvent = _logger->eventId("FaIR setup");
+  const int geometryEvent = _logger->eventId("FaIR geometry");
+  const int computeEvent = _logger->eventId("FaIR compute");
+  const int restrictEvent = _logger->eventId("FaIR restrict");
+  const int updateEvent = _logger->eventId("FaIR update");
+
+  _logger->eventBegin(setupEvent);
+
+  // Get cell geometry information that doesn't depend on cell
   const int spaceDim = _quadrature->spaceDim();
 
-  // Get sections
-  double_array forcesInitialVertex(spaceDim);
-  const ALE::Obj<RealSection>& forcesInitialSection = 
-    _fields->get("initial forces").section();
-  assert(!forcesInitialSection.isNull());
-
-  double_array residualVertex(spaceDim);
+  // Get sections associated with cohesive cells
+  scalar_array residualVertexN(spaceDim);
+  scalar_array residualVertexP(spaceDim);
   const ALE::Obj<RealSection>& residualSection = residual.section();
   assert(!residualSection.isNull());
 
-  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
-  assert(!slipSection.isNull());
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
 
+  const ALE::Obj<RealSection>& initialTractionsSection = 
+    _fields->get("initial traction").section();
+  assert(!initialTractionsSection.isNull());
+
+  const ALE::Obj<RealSection>& dispRelSection = 
+    _fields->get("relative disp").section();
+  assert(!dispRelSection.isNull());
+
+  const ALE::Obj<RealSection>& orientationSection = 
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  // Get fault information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
-    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
-					    residualSection);
+      sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+					      residualSection);
   assert(!globalOrder.isNull());
 
+  _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+  _logger->eventBegin(computeEvent);
+#endif
+
+  // Loop over fault vertices
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
     const int v_fault = _cohesiveVertices[iVertex].fault;
-    const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
@@ -200,76 +239,123 @@
     if (!globalOrder->isLocal(v_lagrange))
       continue;
 
-    // Get initial forces at fault vertex. Forces are in the global
-    // coordinate system so no rotation is necessary.
-    forcesInitialSection->restrictPoint(v_fault, 
-					&forcesInitialVertex[0],
-					forcesInitialVertex.size());
+#if defined(DETAILED_EVENT_LOGGING)
+    _logger->eventBegin(restrictEvent);
+#endif
 
-    assert(spaceDim == slipSection->getFiberDimension(v_fault));
-    const double* slipVertex = slipSection->restrictPoint(v_fault);
-    assert(0 != slipVertex);
-    
-    // only apply initial tractions if there is no opening
-    if (0.0 == slipVertex[spaceDim-1]) {
-      residualVertex = forcesInitialVertex;
+    // Get initial tractions at fault vertex.
+    assert(spaceDim == initialTractionsSection->getFiberDimension(v_fault));
+    const PylithScalar* initialTractionsVertex = 
+      initialTractionsSection->restrictPoint(v_fault);
+    assert(initialTractionsVertex);
 
-      assert(residualVertex.size() == 
-	     residualSection->getFiberDimension(v_positive));
-      residualSection->updateAddPoint(v_positive, &residualVertex[0]);
-      
-      residualVertex *= -1.0;
-      assert(residualVertex.size() == 
-	     residualSection->getFiberDimension(v_negative));
-      residualSection->updateAddPoint(v_negative, &residualVertex[0]);
+    // Get relative dislplacement at fault vertex.
+    assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+    const PylithScalar* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+    assert(dispRelVertex);
+
+    // Get area associated with fault vertex.
+    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
+
+    // Get orientation associated with fault vertex.
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
+
+#if defined(DETAILED_EVENT_LOGGING)
+    _logger->eventEnd(restrictEvent);
+    _logger->eventBegin(computeEvent);
+#endif
+
+    // Initial (external) tractions oppose (internal) tractions
+    // associated with Lagrange multiplier, so these terms have the
+    // opposite sign as the integration of the Lagrange multipliers in
+    // FaultCohesiveLagrange.
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      residualVertexP[iDim] = areaVertex * initialTractionsVertex[iDim];
+    } // for
+    residualVertexN = -residualVertexP;
+
+    // Only apply initial tractions if there is no opening.
+    // If there is opening, zero out initial tractions
+    PylithScalar slipNormal = 0.0;
+    const int indexN = spaceDim - 1;
+    for (int jDim=0; jDim < spaceDim; ++jDim) {
+      slipNormal += orientationVertex[indexN*spaceDim+jDim]*dispRelVertex[jDim];
+    } // for
+
+    if (slipNormal > 0.0) {
+      residualVertexN = 0.0;
+      residualVertexP = 0.0;
     } // if
+
+#if defined(DETAILED_EVENT_LOGGING)
+    _logger->eventEnd(computeEvent);
+    _logger->eventBegin(updateEvent);
+#endif
+
+    // Assemble contributions into field
+    assert(residualVertexN.size() == 
+	   residualSection->getFiberDimension(v_negative));
+    residualSection->updateAddPoint(v_negative, &residualVertexN[0]);
+
+    assert(residualVertexP.size() == 
+	   residualSection->getFiberDimension(v_positive));
+    residualSection->updateAddPoint(v_positive, &residualVertexP[0]);
+
+#if defined(DETAILED_EVENT_LOGGING)
+    _logger->eventEnd(updateEvent);
+#endif
   } // for
+  PetscLogFlops(numVertices*spaceDim*(2+spaceDim*2));
 
-  PetscLogFlops(numVertices*spaceDim);
+#if !defined(DETAILED_EVENT_LOGGING)
+  _logger->eventEnd(computeEvent);
+#endif
 } // integrateResidual
 
 // ----------------------------------------------------------------------
 // Update state variables as needed.
 void
 pylith::faults::FaultCohesiveDyn::updateStateVars(
-				      const double t,
+				      const PylithScalar t,
 				      topology::SolutionFields* const fields)
 { // updateStateVars
   assert(0 != fields);
   assert(0 != _fields);
 
-  _updateSlipRate(*fields);
+  _updateVelRel(*fields);
 
   const int spaceDim = _quadrature->spaceDim();
 
   // Allocate arrays for vertex values
-  double_array tractionTVertex(spaceDim);
-  double_array tractionTpdtVertex(spaceDim);
-  double_array slipTpdtVertex(spaceDim);
-  double_array lagrangeTpdtVertex(spaceDim);
+  scalar_array tractionTpdtVertex(spaceDim); // Fault coordinate system
 
   // Get sections
-  double_array slipVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
-  assert(!slipSection.isNull());
+  scalar_array slipVertex(spaceDim);
+  const ALE::Obj<RealSection>& dispRelSection = 
+    _fields->get("relative disp").section();
+  assert(!dispRelSection.isNull());
 
-  double_array slipRateVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipRateSection =
-      _fields->get("slip rate").section();
-  assert(!slipRateSection.isNull());
+  scalar_array slipRateVertex(spaceDim);
+  const ALE::Obj<RealSection>& velRelSection =
+      _fields->get("relative velocity").section();
+  assert(!velRelSection.isNull());
 
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
-
-  double_array lagrangeTVertex(spaceDim);
   const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
 
-  double_array lagrangeTIncrVertex(spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection =
       fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
 
+  const ALE::Obj<RealSection>& orientationSection =
+      _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -277,34 +363,44 @@
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
-    // Get slip
-    slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+    // Get relative displacement
+    assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+    const PylithScalar* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+    assert(dispRelVertex);
 
-    // Get slip rate
-    slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
-      slipRateVertex.size());
+    // Get relative velocity
+    assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+    const PylithScalar* velRelVertex = velRelSection->restrictPoint(v_fault);
+    assert(velRelVertex);
 
-    // Get total fault area asssociated with vertex (assembled over all cells)
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
-    assert(1 == areaSection->getFiberDimension(v_fault));
+    // Get orientation
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
 
     // Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
-    dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
-      lagrangeTVertex.size());
-    dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
-      lagrangeTIncrVertex.size());
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTIncrVertex = 
+      dispTIncrSection->restrictPoint(v_lagrange);
 
-    // Compute Lagrange multiplier at time t+dt
-    lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
+    // Compute slip, slip rate, and fault traction (Lagrange
+    // multiplier) at time t+dt in fault coordinate system.
+    slipVertex = 0.0;
+    slipRateVertex = 0.0;
+    tractionTpdtVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  dispRelVertex[jDim];
+	slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  velRelVertex[jDim];
+	tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  (lagrangeTVertex[jDim]+lagrangeTIncrVertex[jDim]);
+      } // for
+    } // for
 
-    // :KLUDGE: Solution at Lagrange constraint vertices is the
-    // Lagrange multiplier value, which is currently the force.
-    // Compute traction by dividing force by area
-    assert(*areaVertex > 0);
-    tractionTVertex = lagrangeTVertex / (*areaVertex);
-    tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
-
     // Get friction properties and state variables.
     _friction->retrievePropsStateVars(v_fault);
 
@@ -312,26 +408,26 @@
     // friction.
     switch (spaceDim) { // switch
     case 1: { // case 1
-      const double slipMag = 0.0;
-      const double slipRateMag = 0.0;
-      const double tractionNormal = tractionTpdtVertex[0];
+      const PylithScalar slipMag = 0.0;
+      const PylithScalar slipRateMag = 0.0;
+      const PylithScalar tractionNormal = tractionTpdtVertex[0];
       _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
       break;
     } // case 1
     case 2: { // case 2
-      const double slipMag = fabs(slipVertex[0]);
-      const double slipRateMag = fabs(slipRateVertex[0]);
-      const double tractionNormal = tractionTpdtVertex[1];
+      const PylithScalar slipMag = fabs(slipVertex[0]);
+      const PylithScalar slipRateMag = fabs(slipRateVertex[0]);
+      const PylithScalar tractionNormal = tractionTpdtVertex[1];
       _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
       break;
     } // case 2
     case 3: { // case 3
-      const double slipMag = 
+      const PylithScalar slipMag = 
 	sqrt(slipVertex[0]*slipVertex[0] + slipVertex[1]*slipVertex[1]);
-      const double slipRateMag = 
+      const PylithScalar slipRateMag = 
 	sqrt(slipRateVertex[0]*slipRateVertex[0] + 
 	     slipRateVertex[1]*slipRateVertex[1]);
-      const double tractionNormal = tractionTpdtVertex[2];
+      const PylithScalar tractionNormal = tractionTpdtVertex[2];
       _friction->updateStateVars(slipMag, slipRateMag, tractionNormal, v_fault);
       break;
     } // case 3
@@ -348,23 +444,22 @@
 void
 pylith::faults::FaultCohesiveDyn::constrainSolnSpace(
 				    topology::SolutionFields* const fields,
-				    const double t,
+				    const PylithScalar t,
 				    const topology::Jacobian& jacobian)
 { // constrainSolnSpace
   /// Member prototype for _constrainSolnSpaceXD()
   typedef void (pylith::faults::FaultCohesiveDyn::*constrainSolnSpace_fn_type)
-    (double_array*,
-     const double_array&,
-     const double_array&,
-     const double_array&,
-     const double);
+    (scalar_array*,
+     const scalar_array&,
+     const scalar_array&,
+     const scalar_array&);
 
   assert(0 != fields);
   assert(0 != _quadrature);
   assert(0 != _fields);
   assert(0 != _friction);
 
-  _updateSlipRate(*fields);
+  _updateVelRel(*fields);
   _sensitivitySetup(jacobian);
 
   // Update time step in friction (can vary).
@@ -373,44 +468,34 @@
   const int spaceDim = _quadrature->spaceDim();
 
   // Allocate arrays for vertex values
-  double_array tractionTVertex(spaceDim);
-  double_array tractionTpdtVertex(spaceDim);
-  double_array slipTpdtVertex(spaceDim);
-  double_array lagrangeTpdtVertex(spaceDim);
+  scalar_array tractionTpdtVertex(spaceDim);
 
   // Get sections
-  double_array slipVertex(spaceDim);
-  double_array dSlipVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
-  assert(!slipSection.isNull());
+  scalar_array slipVertex(spaceDim);
+  const ALE::Obj<RealSection>& dispRelSection = 
+    _fields->get("relative disp").section();
+  assert(!dispRelSection.isNull());
 
-  double_array slipRateVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipRateSection =
-      _fields->get("slip rate").section();
-  assert(!slipRateSection.isNull());
+  scalar_array slipRateVertex(spaceDim);
+  const ALE::Obj<RealSection>& velRelSection =
+      _fields->get("relative velocity").section();
+  assert(!velRelSection.isNull());
 
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
-
-  double_array orientationVertex(spaceDim * spaceDim);
   const ALE::Obj<RealSection>& orientationSection =
       _fields->get("orientation").section();
   assert(!orientationSection.isNull());
 
-  double_array lagrangeTVertex(spaceDim);
-  double_array dispTVertexN(spaceDim);
-  double_array dispTVertexP(spaceDim);
   const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
 
-  double_array lagrangeTIncrVertex(spaceDim);
-  double_array dispTIncrVertexN(spaceDim);
-  double_array dispTIncrVertexP(spaceDim);
+  scalar_array dDispTIncrVertexN(spaceDim);
+  scalar_array dDispTIncrVertexP(spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection =
       fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
 
-  double_array dLagrangeTpdtVertex(spaceDim);
+  scalar_array dLagrangeTpdtVertex(spaceDim);
+  scalar_array dLagrangeTpdtVertexGlobal(spaceDim);
   const ALE::Obj<RealSection>& dLagrangeTpdtSection =
       _fields->get("sensitivity dLagrange").section();
   assert(!dLagrangeTpdtSection.isNull());
@@ -437,11 +522,8 @@
 
 
 #if 0 // DEBUGGING
-  slipSection->view("SLIP");
-  slipRateSection->view("SLIP RATE");
-  areaSection->view("AREA");
-  dispTSection->view("DISP (t)");
-  dispTIncrSection->view("DISP INCR (t->t+dt)");
+  dispRelSection->view("BEFORE RELATIVE DISPLACEMENT");
+  dispTIncrSection->view("BEFORE DISP INCR (t->t+dt)");
 #endif
 
   const int numVertices = _cohesiveVertices.size();
@@ -449,48 +531,95 @@
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
     const int v_fault = _cohesiveVertices[iVertex].fault;
 
-    // Get slip
-    slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+    // Get relative displacement
+    assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+    const PylithScalar* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+    assert(dispRelVertex);
 
-    // Get slip rate
-    slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
-      slipRateVertex.size());
+    // Get relative velocity
+    assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+    const PylithScalar* velRelVertex = velRelSection->restrictPoint(v_fault);
+    assert(velRelVertex);
 
-    // Get total fault area asssociated with vertex (assembled over all cells)
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
-    assert(1 == areaSection->getFiberDimension(v_fault));
+    // Get orientation
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
 
     // Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
-    dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
-      lagrangeTVertex.size());
-    dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
-      lagrangeTIncrVertex.size());
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+    assert(lagrangeTVertex);
 
-    // Compute Lagrange multiplier at time t+dt
-    lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
-    dLagrangeTpdtVertex = 0.0;
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTIncrVertex = 
+      dispTIncrSection->restrictPoint(v_lagrange);
+    assert(lagrangeTIncrVertex);
 
-    // :KLUDGE: Solution at Lagrange constraint vertices is the
-    // Lagrange multiplier value, which is currently the force.
-    // Compute traction by dividing force by area
-    assert(*areaVertex > 0);
-    tractionTVertex = lagrangeTVertex / (*areaVertex);
-    tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
+    // Compute slip, slip rate, and Lagrange multiplier at time t+dt
+    // in fault coordinate system.
+    slipVertex = 0.0;
+    slipRateVertex = 0.0;
+    tractionTpdtVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  dispRelVertex[jDim];
+	slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  velRelVertex[jDim];
+	tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  (lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim]);
+      } // for
+    } // for
 
     // Get friction properties and state variables.
     _friction->retrievePropsStateVars(v_fault);
 
     // Use fault constitutive model to compute traction associated with
     // friction.
+    dLagrangeTpdtVertex = 0.0;
     CALL_MEMBER_FN(*this,
 		   constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
 					 slipVertex, slipRateVertex,
-					 tractionTpdtVertex, *areaVertex);
+					 tractionTpdtVertex);
 
-    assert(dLagrangeTpdtVertex.size() ==
+    // Rotate traction back to global coordinate system.
+    dLagrangeTpdtVertexGlobal = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	dLagrangeTpdtVertexGlobal[iDim] += 
+	  orientationVertex[jDim*spaceDim+iDim] * dLagrangeTpdtVertex[jDim];
+      } // for
+    } // for
+
+#if 0 // debugging
+    std::cout << "slipVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipVertex[iDim];
+    std::cout << ",  slipRateVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipRateVertex[iDim];
+    std::cout << ",  tractionVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << tractionTpdtVertex[iDim];
+    std::cout << ",  lagrangeTVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << lagrangeTVertex[iDim];
+    std::cout << ",  lagrangeTIncrVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << lagrangeTIncrVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertexGlobal: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertexGlobal[iDim];
+    std::cout << std::endl;
+#endif
+     
+    assert(dLagrangeTpdtVertexGlobal.size() ==
         dLagrangeTpdtSection->getFiberDimension(v_fault));
-    dLagrangeTpdtSection->updatePoint(v_fault, &dLagrangeTpdtVertex[0]);
+    dLagrangeTpdtSection->updatePoint(v_fault, &dLagrangeTpdtVertexGlobal[0]);
   } // for
 
   // Solve sensitivity problem for negative side of the fault.
@@ -507,96 +636,172 @@
   _sensitivitySolve();
   _sensitivityUpdateSoln(negativeSide);
 
+
+  scalar_array dSlipVertex(spaceDim);
+  scalar_array dDispRelVertex(spaceDim);
+  scalar_array dispRelVertex(spaceDim);
+
   // Update slip field based on solution of sensitivity problem and
   // increment in Lagrange multipliers.
-  const ALE::Obj<RealSection>& dispRelSection =
-    _fields->get("sensitivity dispRel").section();
+  const ALE::Obj<RealSection>& sensDispRelSection =
+    _fields->get("sensitivity relative disp").section();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_fault = _cohesiveVertices[iVertex].fault;
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
-    // Get fault orientation
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0],
-    orientationVertex.size());
+    // Get change in relative displacement from sensitivity solve.
+    assert(spaceDim == sensDispRelSection->getFiberDimension(v_fault));
+    const PylithScalar* sensDispRelVertex = 
+      sensDispRelSection->restrictPoint(v_fault);
+    assert(sensDispRelVertex);
 
-    // Get change in relative displacement.
-    const double* dispRelVertex = dispRelSection->restrictPoint(v_fault);
-    assert(0 != dispRelVertex);
-    assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+    // Get current relative displacement for updating.
+    dispRelSection->restrictPoint(v_fault, &dispRelVertex[0],
+				  dispRelVertex.size());
 
+    // Get orientation.
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
+
+    // Get displacements from disp(t) and dispIncr(t).
+    assert(spaceDim == dispTSection->getFiberDimension(v_negative));
+    const PylithScalar* dispTVertexN = dispTSection->restrictPoint(v_negative);
+    assert(dispTVertexN);
+
+    assert(spaceDim == dispTSection->getFiberDimension(v_positive));
+    const PylithScalar* dispTVertexP = dispTSection->restrictPoint(v_positive);
+    assert(dispTVertexP);
+
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+    const PylithScalar* dispTIncrVertexN = 
+      dispTIncrSection->restrictPoint(v_negative);
+    assert(dispTIncrVertexN);
+
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+    const PylithScalar* dispTIncrVertexP = 
+      dispTIncrSection->restrictPoint(v_positive);
+    assert(dispTIncrVertexP);
+
     // Get Lagrange multiplier at time t
-    dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
-				lagrangeTVertex.size());
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+    assert(lagrangeTVertex);
 
     // Get Lagrange multiplier increment at time t
-    dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
-				    lagrangeTIncrVertex.size());
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTIncrVertex = 
+      dispTIncrSection->restrictPoint(v_lagrange);
+    assert(lagrangeTIncrVertex);
 
     // Get change in Lagrange multiplier.
     dLagrangeTpdtSection->restrictPoint(v_fault, &dLagrangeTpdtVertex[0],
 					dLagrangeTpdtVertex.size());
 
-    // Only update slip if Lagrange multiplier is changing
-    double dLagrangeMag = 0.0;
+    // Only update slip, disp, etc if Lagrange multiplier is
+    // changing. If Lagrange multiplier is the same, there is no slip
+    // so disp, etc should be unchanged.
+    PylithScalar dLagrangeMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       dLagrangeMag += dLagrangeTpdtVertex[iDim]*dLagrangeTpdtVertex[iDim];
-    if (0.0 == dLagrangeMag)
+    if (0.0 == dLagrangeMag) {
       continue; // No change, so continue
+    } // if
 
-    // Compute change in slip.
+    // Compute slip and change in slip in fault coordinates.
     dSlipVertex = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        dSlipVertex[iDim] += 
-	  orientationVertex[iDim*spaceDim+kDim] * dispRelVertex[kDim];
+    slipVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	dSlipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] * 
+	  sensDispRelVertex[jDim];
+	slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] * 
+	  (dispTVertexP[jDim] - dispTVertexN[jDim] +
+	   dispTIncrVertexP[jDim] - dispTIncrVertexN[jDim]);
+      } // for
+    } // for
 
+    // Compute normal traction in fault coordinates.
+    PylithScalar tractionNormal = 0.0;
+    const int indexN = spaceDim - 1;
+    for (int jDim=0; jDim < spaceDim; ++jDim) {
+      tractionNormal += orientationVertex[indexN*spaceDim+jDim] *
+	(lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim] + 
+	 dLagrangeTpdtVertex[jDim]);
+    } // for
+
     // Do not allow fault interpenetration and set fault opening to
     // zero if fault is under compression.
-    const int indexN = spaceDim - 1;
-    if (dSlipVertex[indexN] < 0.0)
-      dSlipVertex[indexN] = 0.0;
-    const double lagrangeTpdtNormal = lagrangeTVertex[indexN] + 
-      lagrangeTIncrVertex[indexN] + dLagrangeTpdtVertex[indexN];
-    if (lagrangeTpdtNormal < 0.0)
-      dSlipVertex[indexN] = 0.0;
+    if (tractionNormal < -_zeroTolerance || 
+	slipVertex[indexN] + dSlipVertex[indexN] < 0.0) {
+      dSlipVertex[indexN] = -slipVertex[indexN];
+    } // if
 
-    // Set change in slip.
-    assert(dSlipVertex.size() ==
-        slipSection->getFiberDimension(v_fault));
-    slipSection->updateAddPoint(v_fault, &dSlipVertex[0]);
+    // Compute current estimate of slip.
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      slipVertex[iDim] = slipVertex[iDim] + dSlipVertex[iDim];
+    } // for
+
+    // Update relative displacement from slip.
+    dispRelVertex = 0.0;
+    dDispRelVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	dispRelVertex[iDim] += orientationVertex[jDim*spaceDim+iDim] *
+	  slipVertex[jDim];
+	dDispRelVertex[iDim] += orientationVertex[jDim*spaceDim+iDim] *
+	  dSlipVertex[jDim];
+      } // for
+
+      dDispTIncrVertexN[iDim] = -0.5*dDispRelVertex[iDim];
+      dDispTIncrVertexP[iDim] = +0.5*dDispRelVertex[iDim];
+
+    } // for
+
+#if 0 // debugging
+    std::cout << "dLagrangeTpdtVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertex[iDim];
+    std::cout << ", slipVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipVertex[iDim];
+    std::cout << ",  dispRelVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dispRelVertex[iDim];
+    std::cout << ",  dDispRelVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dDispRelVertex[iDim];
+    std::cout << std::endl;
+#endif
+
+    // Set change in relative displacement.
+    assert(dispRelVertex.size() ==
+        dispRelSection->getFiberDimension(v_fault));
+    dispRelSection->updatePoint(v_fault, &dispRelVertex[0]);
     
     // Update Lagrange multiplier increment.
     assert(dLagrangeTpdtVertex.size() ==
 	   dispTIncrSection->getFiberDimension(v_lagrange));
     dispTIncrSection->updateAddPoint(v_lagrange, &dLagrangeTpdtVertex[0]);
 
-    // Compute change in displacement field.
-    dispTIncrVertexN = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        dispTIncrVertexN[iDim] += 
-	  orientationVertex[kDim*spaceDim+iDim] * dSlipVertex[kDim];
-    
     // Update displacement field
-    dispTIncrVertexN *= -0.5;
-    assert(dispTIncrVertexN.size() ==
+    assert(dDispTIncrVertexN.size() ==
 	   dispTIncrSection->getFiberDimension(v_negative));
-    dispTIncrSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+    dispTIncrSection->updateAddPoint(v_negative, &dDispTIncrVertexN[0]);
     
-    dispTIncrVertexP = -dispTIncrVertexN;
-    assert(dispTIncrVertexP.size() ==
+    assert(dDispTIncrVertexP.size() ==
 	   dispTIncrSection->getFiberDimension(v_positive));
-    dispTIncrSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+    dispTIncrSection->updateAddPoint(v_positive, &dDispTIncrVertexP[0]);
     
   } // for
 
 #if 0 // DEBUGGING
-  dLagrangeTpdtSection->view("AFTER dLagrange");
+  //dLagrangeTpdtSection->view("AFTER dLagrange");
+  dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
   dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
-  slipSection->view("AFTER SLIP");
-  slipRateSection->view("AFTER SLIP RATE");
 #endif
 } // constrainSolnSpace
 
@@ -610,28 +815,11 @@
 { // adjustSolnLumped
   /// Member prototype for _constrainSolnSpaceXD()
   typedef void (pylith::faults::FaultCohesiveDyn::*constrainSolnSpace_fn_type)
-    (double_array*,
-     const double_array&,
-     const double_array&,
-     const double_array&,
-     const double);
+    (scalar_array*,
+     const scalar_array&,
+     const scalar_array&,
+     const scalar_array&);
 
-  /// Member prototype for _sensitivitySolveLumpedXD()
-  typedef void (pylith::faults::FaultCohesiveDyn::*sensitivitySolveLumped_fn_type)
-    (double_array*,
-     const double_array&,
-     const double_array&,
-     const double_array&);
-
-  /// Member prototype for _adjustSolnLumpedXD()
-  typedef void (pylith::faults::FaultCohesiveDyn::*adjustSolnLumped_fn_type)
-    (double_array*, double_array*, double_array*,
-     const double_array&, const double_array&,
-     const double_array&, const double_array&,
-     const double_array&, const double_array&,
-     const double_array&, const double_array&);
-
-
   assert(0 != fields);
   assert(0 != _quadrature);
 
@@ -659,45 +847,41 @@
 
   // Get cell information and setup storage for cell data
   const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim * spaceDim;
 
   // Allocate arrays for vertex values
-  double_array tractionTVertex(spaceDim);
-  double_array tractionTpdtVertex(spaceDim);
-  double_array slipTpdtVertex(spaceDim);
-  double_array lagrangeTpdtVertex(spaceDim);
-  double_array dLagrangeTpdtVertex(spaceDim);
+  scalar_array tractionTpdtVertex(spaceDim);
+  scalar_array lagrangeTpdtVertex(spaceDim);
+  scalar_array dLagrangeTpdtVertex(spaceDim);
+  scalar_array dLagrangeTpdtVertexGlobal(spaceDim);
 
   // Update time step in friction (can vary).
   _friction->timeStep(_dt);
 
   // Get section information
-  double_array slipVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
-  assert(!slipSection.isNull());
+  scalar_array dispRelVertex(spaceDim);
+  scalar_array slipVertex(spaceDim);
+  const ALE::Obj<RealSection>& dispRelSection = 
+    _fields->get("relative disp").section();
+  assert(!dispRelSection.isNull());
 
-  double_array slipRateVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipRateSection =
-      _fields->get("slip rate").section();
-  assert(!slipRateSection.isNull());
+  scalar_array slipRateVertex(spaceDim);
+  const ALE::Obj<RealSection>& velRelSection =
+      _fields->get("relative velocity").section();
+  assert(!velRelSection.isNull());
 
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
-
-  double_array orientationVertex(orientationSize);
   const ALE::Obj<RealSection>& orientationSection =
       _fields->get("orientation").section();
   assert(!orientationSection.isNull());
 
-  double_array dispTVertexN(spaceDim);
-  double_array dispTVertexP(spaceDim);
-  double_array lagrangeTVertex(spaceDim);
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
+
   const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
 
-  double_array dispTIncrVertexN(spaceDim);
-  double_array dispTIncrVertexP(spaceDim);
-  double_array lagrangeTIncrVertex(spaceDim);
+  scalar_array dispTIncrVertexN(spaceDim);
+  scalar_array dispTIncrVertexP(spaceDim);
+  scalar_array lagrangeTIncrVertex(spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection =
       fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -706,13 +890,9 @@
     "dispIncr adjust").section();
   assert(!dispTIncrAdjSection.isNull());
 
-  double_array jacobianVertexN(spaceDim);
-  double_array jacobianVertexP(spaceDim);
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   assert(!jacobianSection.isNull());
 
-  double_array residualVertexN(spaceDim);
-  double_array residualVertexP(spaceDim);
   const ALE::Obj<RealSection>& residualSection =
       fields->get("residual").section();
 
@@ -723,33 +903,19 @@
 					    jacobianSection);
   assert(!globalOrder.isNull());
 
-  adjustSolnLumped_fn_type adjustSolnLumpedFn;
   constrainSolnSpace_fn_type constrainSolnSpaceFn;
-  sensitivitySolveLumped_fn_type sensitivitySolveLumpedFn;
   switch (spaceDim) { // switch
   case 1:
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped1D;
     constrainSolnSpaceFn = 
       &pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D;
-    sensitivitySolveLumpedFn =
-      &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped1D;
     break;
   case 2: 
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped2D;
     constrainSolnSpaceFn = 
       &pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D;
-    sensitivitySolveLumpedFn =
-      &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped2D;
     break;
   case 3:
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveDyn::_adjustSolnLumped3D;
     constrainSolnSpaceFn = 
       &pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D;
-    sensitivitySolveLumpedFn =
-      &pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped3D;
     break;
   default :
     assert(0);
@@ -774,189 +940,170 @@
     _logger->eventBegin(restrictEvent);
 #endif
 
-    // Get slip
-    slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+    // Get residual at cohesive cell's vertices.
+    assert(spaceDim == residualSection->getFiberDimension(v_lagrange));
+    const PylithScalar* residualVertexL = residualSection->restrictPoint(v_lagrange);
+    assert(residualVertexL);
 
-    // Get slip rate
-    slipRateSection->restrictPoint(v_fault, &slipRateVertex[0],
-				   slipRateVertex.size());
-    
-    // Get total fault area asssociated with vertex (assembled over all cells)
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
+    // Get jacobian at cohesive cell's vertices.
+    assert(spaceDim == jacobianSection->getFiberDimension(v_negative));
+    const PylithScalar* jacobianVertexN = jacobianSection->restrictPoint(v_negative);
+    assert(jacobianVertexN);
+
+    assert(spaceDim == jacobianSection->getFiberDimension(v_positive));
+    const PylithScalar* jacobianVertexP = jacobianSection->restrictPoint(v_positive);
+    assert(jacobianVertexP);
+
+    // Get area at fault vertex.
     assert(1 == areaSection->getFiberDimension(v_fault));
-    
-    // Get fault orientation
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0],
-				      orientationVertex.size());
-    
-    // Get Jacobian at vertices on positive and negative sides of the fault.
-    jacobianSection->restrictPoint(v_negative, &jacobianVertexN[0],
-				   jacobianVertexN.size());
-    jacobianSection->restrictPoint(v_positive, &jacobianVertexP[0],
-				   jacobianVertexP.size());
-    
-    // Get residual at cohesive cell's vertices.
-    residualSection->restrictPoint(v_negative, &residualVertexN[0], 
-				   residualVertexN.size());
-    residualSection->restrictPoint(v_positive, &residualVertexP[0], 
-				   residualVertexP.size());
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
+    assert(areaVertex > 0.0);
 
-    // Get disp(t) at cohesive cell's vertices.
-    dispTSection->restrictPoint(v_negative, &dispTVertexN[0], 
-				dispTVertexN.size());
-    dispTSection->restrictPoint(v_positive, &dispTVertexP[0], 
-				dispTVertexP.size());
-    
-    // Get Lagrange multiplier values from disp(t), and dispIncr(t->t+dt)
-    dispTSection->restrictPoint(v_lagrange, &lagrangeTVertex[0],
-				lagrangeTVertex.size());
+    // Get disp(t) at Lagrange vertex.
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* lagrangeTVertex = dispTSection->restrictPoint(v_lagrange);
+    assert(lagrangeTVertex);
+
+    // Get dispIncr(t) at cohesive cell's vertices.
+    dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
+				    dispTIncrVertexN.size());
+    dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
+				    dispTIncrVertexP.size());
     dispTIncrSection->restrictPoint(v_lagrange, &lagrangeTIncrVertex[0],
 				    lagrangeTIncrVertex.size());
+
+    // Get relative displacement at fault vertex.
+    dispRelSection->restrictPoint(v_fault, &dispRelVertex[0], 
+				  dispRelVertex.size());
+
+    // Get relative velocity at fault vertex.
+    assert(spaceDim == velRelSection->getFiberDimension(v_fault));
+    const PylithScalar* velRelVertex = velRelSection->restrictPoint(v_fault);
+    assert(velRelVertex);
     
+    // Get fault orientation at fault vertex.
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
+    
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
     _logger->eventBegin(computeEvent);
 #endif
 
-    CALL_MEMBER_FN(*this,
-		   adjustSolnLumpedFn)(&lagrangeTIncrVertex,
-				       &dispTIncrVertexN,
-				       &dispTIncrVertexP,
-				       slipVertex,
-				       orientationVertex,
-				       dispTVertexN,
-				       dispTVertexP,
-				       residualVertexN,
-				       residualVertexP,
-				       jacobianVertexN,
-				       jacobianVertexP);
+    // Adjust solution as in prescribed rupture, updating the Lagrange
+    // multipliers and the corresponding displacment increments.
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      assert(jacobianVertexP[iDim] > 0.0);
+      assert(jacobianVertexN[iDim] > 0.0);
+      const PylithScalar S = (1.0/jacobianVertexP[iDim] + 1.0/jacobianVertexN[iDim]) *
+	areaVertex * areaVertex;
+      assert(S > 0.0);
+      lagrangeTIncrVertex[iDim] = 1.0/S * 
+	(-residualVertexL[iDim] +
+	 areaVertex * (dispTIncrVertexP[iDim] - dispTIncrVertexN[iDim]));
 
+      assert(jacobianVertexN[iDim] > 0.0);
+      dispTIncrVertexN[iDim] = 
+	+areaVertex / jacobianVertexN[iDim]*lagrangeTIncrVertex[iDim];
+
+      assert(jacobianVertexP[iDim] > 0.0);
+      dispTIncrVertexP[iDim] = 
+	-areaVertex / jacobianVertexP[iDim]*lagrangeTIncrVertex[iDim];
+
+    } // for
+
+    // Compute slip, slip rate, and Lagrange multiplier at time t+dt
+    // in fault coordinate system.
+    slipVertex = 0.0;
+    slipRateVertex = 0.0;
+    tractionTpdtVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	slipVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  dispRelVertex[jDim];
+	slipRateVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  velRelVertex[jDim];
+	tractionTpdtVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  (lagrangeTVertex[jDim] + lagrangeTIncrVertex[jDim]);
+      } // for
+    } // for
     
-    // Compute Lagrange multiplier at time t+dt
-    lagrangeTpdtVertex = lagrangeTVertex + lagrangeTIncrVertex;
-    dLagrangeTpdtVertex = 0.0;
-    
-    // :KLUDGE: Solution at Lagrange constraint vertices is the
-    // Lagrange multiplier value, which is currently the force.
-    // Compute traction by dividing force by area
-    assert(*areaVertex > 0);
-    tractionTVertex = lagrangeTVertex / (*areaVertex);
-    tractionTpdtVertex = lagrangeTpdtVertex / (*areaVertex);
-    
     // Get friction properties and state variables.
     _friction->retrievePropsStateVars(v_fault);
 
+    // Use fault constitutive model to compute traction associated with
+    // friction.
+    dLagrangeTpdtVertex = 0.0;
     CALL_MEMBER_FN(*this,
 		   constrainSolnSpaceFn)(&dLagrangeTpdtVertex,
 					 slipVertex, slipRateVertex,
-					 tractionTpdtVertex, *areaVertex);
-    CALL_MEMBER_FN(*this,
-       sensitivitySolveLumpedFn)(&slipVertex,
-           dLagrangeTpdtVertex, jacobianVertexN, jacobianVertexP);
+					 tractionTpdtVertex);
 
-    lagrangeTIncrVertex += dLagrangeTpdtVertex;
+    // Rotate traction back to global coordinate system.
+    dLagrangeTpdtVertexGlobal = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	dLagrangeTpdtVertexGlobal[iDim] += 
+	  orientationVertex[jDim*spaceDim+iDim] * dLagrangeTpdtVertex[jDim];
+      } // for
+    } // for
 
-    // :TODO: Refactor this into sensitivitySolveLumpedXD().
-    switch (spaceDim) { // switch
-    case 1: {
-      assert(jacobianVertexN[0] > 0.0);
-      assert(jacobianVertexP[0] > 0.0);
+#if 0 // debugging
+    std::cout << "dispTIncrP: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dispTIncrVertexP[iDim];
+    std::cout << ", dispTIncrN: "; 
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dispTIncrVertexN[iDim];
+    std::cout << ", slipVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipVertex[iDim];
+    std::cout << ",  slipRateVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << slipRateVertex[iDim];
+    std::cout << ", orientationVertex: ";
+    for (int iDim=0; iDim < spaceDim*spaceDim; ++iDim)
+      std::cout << "  " << orientationVertex[iDim];
+    std::cout << ",  tractionVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << tractionTpdtVertex[iDim];
+    std::cout << ",  lagrangeTVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << lagrangeTVertex[iDim];
+    std::cout << ",  lagrangeTIncrVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << lagrangeTIncrVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertex: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertex[iDim];
+    std::cout << ",  dLagrangeTpdtVertexGlobal: ";
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      std::cout << "  " << dLagrangeTpdtVertexGlobal[iDim];
+    std::cout << std::endl;
+#endif
 
-      const double dlp = lagrangeTIncrVertex[0];
+    // Compute change in displacement.
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      assert(jacobianVertexP[iDim] > 0.0);
+      assert(jacobianVertexN[iDim] > 0.0);
 
-      // Update displacements at negative vertex
-      dispTIncrVertexN[0] = +1.0 / jacobianVertexN[0] * dlp;
-  
-      // Update displacements at positive vertex
-      dispTIncrVertexP[0] = -1.0 / jacobianVertexP[0] * dlp;
-  
-      break;
-    } // case 1
-    case 2: {
-      assert(jacobianVertexN[0] > 0.0);
-      assert(jacobianVertexN[1] > 0.0);
-      assert(jacobianVertexP[0] > 0.0);
-      assert(jacobianVertexP[1] > 0.0);
+      dispTIncrVertexN[iDim] += 
+	areaVertex * dLagrangeTpdtVertexGlobal[iDim] / jacobianVertexN[iDim];
+      dispTIncrVertexP[iDim] -= 
+	areaVertex * dLagrangeTpdtVertexGlobal[iDim] / jacobianVertexP[iDim];
 
-      // Check to make sure Jacobian is same at all DOF for
-      // vertices i and j (means S is diagonal with equal enties).
-      assert(jacobianVertexN[0] == jacobianVertexN[1]);
-      assert(jacobianVertexP[0] == jacobianVertexP[1]);
+      // Set increment in relative displacement.
+      dispRelVertex[iDim] = -areaVertex * 2.0*dLagrangeTpdtVertexGlobal[iDim] / 
+	(jacobianVertexN[iDim] + jacobianVertexP[iDim]);
 
-      const double Cpx = orientationVertex[0];
-      const double Cpy = orientationVertex[1];
-      const double Cqx = orientationVertex[2];
-      const double Cqy = orientationVertex[3];
+      // Update increment in Lagrange multiplier.
+      lagrangeTIncrVertex[iDim] += dLagrangeTpdtVertexGlobal[iDim];
+    } // for
 
-      const double dlp = lagrangeTIncrVertex[0];
-      const double dlq = lagrangeTIncrVertex[1];
-
-      const double dlx = Cpx * dlp + Cqx * dlq;
-      const double dly = Cpy * dlp + Cqy * dlq;
-  
-      // Update displacements at negative vertex.
-      dispTIncrVertexN[0] = dlx / jacobianVertexN[0];
-      dispTIncrVertexN[1] = dly / jacobianVertexN[0];
-  
-      // Update displacements at positive vertex.
-      dispTIncrVertexP[0] = -dlx / jacobianVertexP[0];
-      dispTIncrVertexP[1] = -dly / jacobianVertexP[0];
-
-      break;
-    } // case 2
-    case 3: {
-      assert(jacobianVertexN[0] > 0.0);
-      assert(jacobianVertexN[1] > 0.0);
-      assert(jacobianVertexN[2] > 0.0);
-      assert(jacobianVertexP[0] > 0.0);
-      assert(jacobianVertexP[1] > 0.0);
-      assert(jacobianVertexP[2] > 0.0);
-
-      // Check to make sure Jacobian is same at all DOF for
-      // vertices i and j (means S is diagonal with equal enties).
-      assert(jacobianVertexN[0] == jacobianVertexN[1] && 
-	     jacobianVertexN[0] == jacobianVertexN[2]);
-      assert(jacobianVertexP[0] == jacobianVertexP[1] && 
-	     jacobianVertexP[0] == jacobianVertexP[2]);
-
-      const double Cpx = orientationVertex[0];
-      const double Cpy = orientationVertex[1];
-      const double Cpz = orientationVertex[2];
-      const double Cqx = orientationVertex[3];
-      const double Cqy = orientationVertex[4];
-      const double Cqz = orientationVertex[5];
-      const double Crx = orientationVertex[6];
-      const double Cry = orientationVertex[7];
-      const double Crz = orientationVertex[8];
-
-      const double dlp = lagrangeTIncrVertex[0];
-      const double dlq = lagrangeTIncrVertex[1];
-      const double dlr = lagrangeTIncrVertex[2];
-
-      const double dlx = Cpx * dlp + Cqx * dlq + Crx * dlr;
-      const double dly = Cpy * dlp + Cqy * dlq + Cry * dlr;
-      const double dlz = Cpz * dlp + Cqz * dlq + Crz * dlr;
-
-      // Update displacements at negative vertex.
-      dispTIncrVertexN[0] = dlx / jacobianVertexN[0];
-      dispTIncrVertexN[1] = dly / jacobianVertexN[1];
-      dispTIncrVertexN[2] = dlz / jacobianVertexN[2];
-
-      // Update displacements at positive vertex.
-      dispTIncrVertexP[0] = -dlx / jacobianVertexP[0];
-      dispTIncrVertexP[1] = -dly / jacobianVertexP[1];
-      dispTIncrVertexP[2] = -dlz / jacobianVertexP[2];
-
-      break;
-    } // case 3
-    default:
-      assert(0);
-      throw std::logic_error("Unknown spatial dimension in "
-			     "FaultCohesiveDyn::adjustSolnLumped().");
-    } // switch
-
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
     _logger->eventBegin(updateEvent);
@@ -966,7 +1113,7 @@
     // constraint is local (the adjustment is assembled across processors).
     if (globalOrder->isLocal(v_lagrange)) {
       // Adjust displacements to account for Lagrange multiplier values
-      // (assumed to be zero in perliminary solve).
+      // (assumed to be zero in preliminary solve).
       assert(dispTIncrVertexN.size() == 
 	     dispTIncrAdjSection->getFiberDimension(v_negative));
       dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
@@ -976,27 +1123,40 @@
       dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
     } // if
 
-    // The Lagrange multiplier and slip are NOT assembled across processors.
+    // The Lagrange multiplier and relative displacement are NOT
+    // assembled across processors.
 
     // Set Lagrange multiplier value. Value from preliminary solve is
-    // bogus due to artificial diagonal entry of 1.0.
+    // bogus due to artificial diagonal entry in Jacobian of 1.0.
     assert(lagrangeTIncrVertex.size() == 
 	   dispTIncrSection->getFiberDimension(v_lagrange));
     dispTIncrSection->updatePoint(v_lagrange, &lagrangeTIncrVertex[0]);
 
-    // Update the slip estimate based on adjustment to the Lagrange
-    // multiplier values.
-    assert(slipVertex.size() ==
-        slipSection->getFiberDimension(v_fault));
-    slipSection->updatePoint(v_fault, &slipVertex[0]);
+    // Update the relative displacement estimate based on adjustment
+    // to the Lagrange multiplier values.
+    assert(dispRelVertex.size() ==
+	   dispRelSection->getFiberDimension(v_fault));
+    dispRelSection->updateAddPoint(v_fault, &dispRelVertex[0]);
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(updateEvent);
 #endif
-  } // for
+    } // for
+  PetscLogFlops(numVertices*spaceDim*(17 + // adjust solve
+				      9 + // updates
+				      spaceDim*9));
 
+
 #if !defined(DETAILED_EVENT_LOGGING)
   _logger->eventEnd(computeEvent);
 #endif
+
+#if 0 // DEBUGGING
+  //dLagrangeTpdtSection->view("AFTER dLagrange");
+  //dispTIncrSection->view("AFTER DISP INCR (t->t+dt)");
+  dispRelSection->view("AFTER RELATIVE DISPLACEMENT");
+  //velRelSection->view("AFTER RELATIVE VELOCITY");
+#endif
 } // adjustSolnLumped
 
 // ----------------------------------------------------------------------
@@ -1014,16 +1174,29 @@
   const int cohesiveDim = _faultMesh->dimension();
   const int spaceDim = _quadrature->spaceDim();
 
-  double scale = 0.0;
+  PylithScalar scale = 0.0;
   int fiberDim = 0;
   if (0 == strcasecmp("slip", name)) {
-    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-    return slip;
+    const topology::Field<topology::SubMesh>& dispRel = 
+      _fields->get("relative disp");
+    _allocateBufferVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+        _fields->get("buffer (vector)");
+    buffer.copy(dispRel);
+    buffer.label("slip");
+    _globalToFault(&buffer);
+    return buffer;
 
   } else if (0 == strcasecmp("slip_rate", name)) {
-    const topology::Field<topology::SubMesh>& slipRate =
-      _fields->get("slip rate");
-    return slipRate;
+    const topology::Field<topology::SubMesh>& velRel = 
+      _fields->get("relative velocity");
+    _allocateBufferVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+        _fields->get("buffer (vector)");
+    buffer.copy(velRel);
+    buffer.label("slip_rate");
+    _globalToFault(&buffer);
+    return buffer;
 
   } else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
     const ALE::Obj<RealSection>& orientationSection = _fields->get(
@@ -1035,9 +1208,9 @@
     _allocateBufferVectorField();
     topology::Field<topology::SubMesh>& buffer =
         _fields->get("buffer (vector)");
-    buffer.copy(dirSection);
     buffer.label("strike_dir");
     buffer.scale(1.0);
+    buffer.copy(dirSection);
     return buffer;
 
   } else if (2 == cohesiveDim && 0 == strcasecmp("dip_dir", name)) {
@@ -1049,9 +1222,9 @@
     _allocateBufferVectorField();
     topology::Field<topology::SubMesh>& buffer =
         _fields->get("buffer (vector)");
-    buffer.copy(dirSection);
     buffer.label("dip_dir");
     buffer.scale(1.0);
+    buffer.copy(dirSection);
     return buffer;
 
   } else if (0 == strcasecmp("normal_dir", name)) {
@@ -1065,9 +1238,9 @@
     _allocateBufferVectorField();
     topology::Field<topology::SubMesh>& buffer =
         _fields->get("buffer (vector)");
-    buffer.copy(dirSection);
     buffer.label("normal_dir");
     buffer.scale(1.0);
+    buffer.copy(dirSection);
     return buffer;
 
   } else if (0 == strcasecmp("initial_traction", name)) {
@@ -1075,7 +1248,10 @@
     _allocateBufferVectorField();
     topology::Field<topology::SubMesh>& buffer =
         _fields->get("buffer (vector)");
-    _getInitialTractions(&buffer);
+    topology::Field<topology::SubMesh>& tractions =
+        _fields->get("initial traction");
+    buffer.copy(tractions);
+    _globalToFault(&buffer);
     return buffer;
 
   } else if (0 == strcasecmp("traction", name)) {
@@ -1097,11 +1273,14 @@
     throw std::runtime_error(msg.str());
   } // else
 
+  // Should never get here.
+  throw std::logic_error("Unknown field in FaultCohesiveDyn::vertexField().");
 
   // Satisfy return values
   assert(0 != _fields);
   const topology::Field<topology::SubMesh>& buffer = _fields->get(
     "buffer (vector)");
+
   return buffer;
 } // vertexField
 
@@ -1110,39 +1289,47 @@
 pylith::faults::FaultCohesiveDyn::_setupInitialTractions(void)
 { // _setupInitialTractions
   assert(0 != _normalizer);
-  assert(0 != _quadrature);
 
   // If no initial tractions specified, leave method
   if (0 == _dbInitialTract)
     return;
 
   assert(0 != _normalizer);
-  const double pressureScale = _normalizer->pressureScale();
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
-  // Get quadrature information
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  assert(quadWts.size() == numQuadPts);
 
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
-
   // Create section to hold initial tractions.
-  _fields->add("initial forces", "initial_forces");
-  topology::Field<topology::SubMesh>& forcesInitial = 
-    _fields->get("initial forces");
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  forcesInitial.cloneSection(slip);
-  forcesInitial.scale(pressureScale);
-  const ALE::Obj<RealSection>& forcesInitialSection = forcesInitial.section();
-  assert(!forcesInitialSection.isNull());
-  double_array forcesInitialCell(numBasis*spaceDim);
-  double_array tractionQuadPt(spaceDim);
-  UpdateAddVisitor forcesInitialVisitor(*forcesInitialSection,
-					&forcesInitialCell[0]);
+  _fields->add("initial traction", "initial_traction");
+  topology::Field<topology::SubMesh>& initialTractions = 
+    _fields->get("initial traction");
+  topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+  initialTractions.cloneSection(dispRel);
+  initialTractions.scale(pressureScale);
 
+  scalar_array initialTractionsVertex(spaceDim);
+  scalar_array initialTractionsVertexGlobal(spaceDim);
+  const ALE::Obj<RealSection>& initialTractionsSection = 
+    initialTractions.section();
+  assert(!initialTractionsSection.isNull());
+
+  const ALE::Obj<RealSection>& orientationSection =
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
+  assert(0 != cs);
+
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+
+  scalar_array coordsVertex(spaceDim);
+  const ALE::Obj<RealSection>& coordsSection =
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordsSection.isNull());
+
+
   assert(0 != _dbInitialTract);
   _dbInitialTract->open();
   switch (spaceDim) { // switch
@@ -1167,124 +1354,59 @@
     assert(0);
     throw std::logic_error("Bad spatial dimension in Neumann.");
   } // switch
-  
-  // Get cells associated with fault
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
-  assert(!faultSieveMesh.isNull());
-  const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
-    faultSieveMesh->heightStratum(0);
-  assert(!cells.isNull());
-  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
-  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
 
-  const spatialdata::geocoords::CoordSys* cs = _faultMesh->coordsys();
-  assert(0 != cs);
+  const int numVertices = _cohesiveVertices.size();
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    const int v_fault = _cohesiveVertices[iVertex].fault;
 
-#if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
-  const ALE::Obj<RealSection>& coordinates =
-    faultSieveMesh->getRealSection("coordinates");
-  RestrictVisitor coordsVisitor(*coordinates,
-        coordinatesCell.size(), &coordinatesCell[0]);
-#endif
+    coordsSection->restrictPoint(v_fault, &coordsVertex[0], coordsVertex.size());
 
-  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
-       c_iter != cellsEnd;
-       ++c_iter) {
-    // Compute geometry information for current cell
-#if defined(PRECOMPUTE_GEOMETRY)
-    _quadrature->retrieveGeometry(*c_iter);
-#else
-    coordsVisitor.clear();
-    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    _quadrature->computeGeometry(coordinatesCell, *c_iter);
-#endif
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
 
-    const double_array& quadPtsNonDim = _quadrature->quadPts();
-    quadPtsGlobal = quadPtsNonDim;
-    _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
-        lengthScale);
-    forcesInitialCell = 0.0;
+    _normalizer->dimensionalize(&coordsVertex[0], coordsVertex.size(),
+				lengthScale);
 
-    // Loop over quadrature points in cell and query database
-    for (int iQuadPt=0, index=0;
-        iQuadPt < numQuadPts;
-        ++iQuadPt, index+=spaceDim) {
+    initialTractionsVertex = 0.0;
+    int err = _dbInitialTract->query(&initialTractionsVertex[0], 
+				     initialTractionsVertex.size(),
+				     &coordsVertex[0], coordsVertex.size(), cs);
+    if (err) {
+      std::ostringstream msg;
+      msg << "Could not find parameters for physical properties at \n" << "(";
+      for (int i = 0; i < spaceDim; ++i)
+	msg << "  " << coordsVertex[i];
+      msg << ") in friction model " << label() << "\n"
+	  << "using spatial database '" << _dbInitialTract->label() << "'.";
+      throw std::runtime_error(msg.str());
+    } // if
+    _normalizer->nondimensionalize(&initialTractionsVertex[0],
+				   initialTractionsVertex.size(), 
+				   pressureScale);
 
-      tractionQuadPt = 0.0;
-      int err = _dbInitialTract->query(&tractionQuadPt[0], spaceDim,
-          &quadPtsGlobal[index], spaceDim, cs);
-      if (err) {
-        std::ostringstream msg;
-        msg << "Could not find parameters for physical properties at \n" << "(";
-        for (int i = 0; i < spaceDim; ++i)
-          msg << "  " << quadPtsGlobal[index + i];
-        msg << ") in friction model " << label() << "\n"
-            << "using spatial database '" << _dbInitialTract->label() << "'.";
-        throw std::runtime_error(msg.str());
-      } // if
-      tractionQuadPt /= pressureScale;
-
-      // Get cell geometry information that depends on cell
-      const double_array& basis = _quadrature->basis();
-      const double_array& jacobianDet = _quadrature->jacobianDet();
-
-      // Integrate tractions over cell.
-      const double wt = quadWts[iQuadPt] * jacobianDet[iQuadPt];
-      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-	const double valI = wt*basis[iQuadPt*numBasis+iBasis];
-	for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	  const double valIJ = valI * basis[iQuadPt*numBasis+jBasis];
-	  for (int iDim=0; iDim < spaceDim; ++iDim)
-	    forcesInitialCell[iBasis*spaceDim+iDim] += 
-	      tractionQuadPt[iDim] * valIJ;
-	} // for
+    // Rotate tractions from fault coordinate system to global
+    // coordinate system
+    initialTractionsVertexGlobal = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	initialTractionsVertexGlobal[iDim] += 
+	  orientationVertex[jDim*spaceDim+iDim] *
+	  initialTractionsVertex[jDim];
       } // for
     } // for
-    // Assemble cell contribution into field
-    forcesInitialVisitor.clear();
-    faultSieveMesh->updateClosure(*c_iter, forcesInitialVisitor);
+
+    assert(initialTractionsVertexGlobal.size() ==
+	   initialTractionsSection->getFiberDimension(v_fault));
+    initialTractionsSection->updatePoint(v_fault, 
+					 &initialTractionsVertexGlobal[0]);
   } // for
+
   // Close properties database
   _dbInitialTract->close();
 
-  forcesInitial.complete(); // Assemble contributions
-
-  // Rotate forces from fault coordinate system to global coordinate system
-  const int orientationSize = spaceDim * spaceDim;
-  const ALE::Obj<RealSection>& orientationSection =
-    _fields->get("orientation").section();
-
-  double_array forcesInitialVertexFault(spaceDim);
-  double_array forcesInitialVertexGlobal(spaceDim);
-
-  const int numVertices = _cohesiveVertices.size();
-  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
-    const int v_fault = _cohesiveVertices[iVertex].fault;
-
-    assert(orientationSize == orientationSection->getFiberDimension(v_fault));
-    assert(spaceDim == forcesInitialSection->getFiberDimension(v_fault));
-
-    const double* orientationVertex = 
-      orientationSection->restrictPoint(v_fault);
-
-    forcesInitialSection->restrictPoint(v_fault, 
-					&forcesInitialVertexFault[0], 
-					forcesInitialVertexFault.size());
-
-    forcesInitialVertexGlobal = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        forcesInitialVertexGlobal[iDim] +=
-          forcesInitialVertexFault[kDim] * 
-	  orientationVertex[kDim*spaceDim+iDim];
-
-    assert(forcesInitialVertexGlobal.size() == 
-	   forcesInitialSection->getFiberDimension(v_fault));
-    forcesInitialSection->updatePoint(v_fault, &forcesInitialVertexGlobal[0]);
-  } // for
-
-  //forcesInitial.view("INITIAL FORCES"); // DEBUGGING
+  //initialTractions.view("INITIAL TRACTIONS"); // DEBUGGING
 } // _setupInitialTractions
 
 // ----------------------------------------------------------------------
@@ -1300,27 +1422,30 @@
   assert(0 != _normalizer);
 
   // Fiber dimension of tractions matches spatial dimension.
-  const int fiberDim = _quadrature->spaceDim();
-  double_array tractionsVertex(fiberDim);
+  const int spaceDim = _quadrature->spaceDim();
+  scalar_array tractionsVertex(spaceDim);
 
   // Get sections.
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
   const ALE::Obj<RealSection>& dispTSection = dispT.section();
   assert(!dispTSection.isNull());
 
+  const ALE::Obj<RealSection>& orientationSection = 
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
   // Allocate buffer for tractions field (if necessary).
   const ALE::Obj<RealSection>& tractionsSection = tractions->section();
   if (tractionsSection.isNull()) {
     ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
     //logger.stagePush("Fault");
 
-    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-    tractions->cloneSection(slip);
+    const topology::Field<topology::SubMesh>& dispRel = 
+      _fields->get("relative disp");
+    tractions->cloneSection(dispRel);
 
     //logger.stagePop();
   } // if
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   tractions->label("traction");
   tractions->scale(pressureScale);
   tractions->zero();
@@ -1330,24 +1455,31 @@
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
     const int v_fault = _cohesiveVertices[iVertex].fault;
 
-    assert(fiberDim == dispTSection->getFiberDimension(v_lagrange));
-    assert(fiberDim == tractionsSection->getFiberDimension(v_fault));
-    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* dispTVertex = dispTSection->restrictPoint(v_lagrange);
+    assert(dispTVertex);
 
-    const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
-    assert(0 != dispTVertex);
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
+    assert(spaceDim*spaceDim == 
+	   orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
 
-    for (int i=0; i < fiberDim; ++i)
-      tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
+    // Rotate tractions to fault coordinate system.
+    tractionsVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	tractionsVertex[iDim] += orientationVertex[iDim*spaceDim+jDim] *
+	  dispTVertex[jDim];
+      } // for
+    } // for
 
     assert(tractionsVertex.size() == 
 	   tractionsSection->getFiberDimension(v_fault));
     tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
   } // for
 
-  PetscLogFlops(numVertices * (1 + fiberDim) );
+  PetscLogFlops(numVertices * (1 + spaceDim) );
 
 #if 0 // DEBUGGING
   tractions->view("TRACTIONS");
@@ -1356,113 +1488,24 @@
 } // _calcTractions
 
 // ----------------------------------------------------------------------
-// Compute initial tractions on fault surface.
-void
-pylith::faults::FaultCohesiveDyn::_getInitialTractions(
-    topology::Field<topology::SubMesh>* tractions)
-{ // _getInitialTractions
-  assert(0 != tractions);
-  assert(0 != _faultMesh);
-  assert(0 != _fields);
-  assert(0 != _normalizer);
-
-  // Fiber dimension of tractions matches spatial dimension.
-  const int spaceDim = _quadrature->spaceDim();
-  double_array tractionsVertexGlobal(spaceDim);
-  double_array tractionsVertexFault(spaceDim);
-
-  // Get sections.
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
-  const ALE::Obj<RealSection>& orientationSection = 
-    _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
-  const ALE::Obj<RealSection>& forcesInitialSection = 
-    _fields->get("initial forces").section();
-  assert(!forcesInitialSection.isNull());
-
-  // Allocate buffer for tractions field (if necessary).
-  const ALE::Obj<RealSection>& tractionsSection = tractions->section();
-  if (tractionsSection.isNull()) {
-    ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
-    //logger.stagePush("Fault");
-
-    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-    tractions->cloneSection(slip);
-
-    //logger.stagePop();
-  } // if
-  const double pressureScale = _normalizer->pressureScale();
-  tractions->label("initial_traction");
-  tractions->scale(pressureScale);
-  tractions->zero();
-
-  const int numVertices = _cohesiveVertices.size();
-  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
-    const int v_fault = _cohesiveVertices[iVertex].fault;
-
-    assert(spaceDim == forcesInitialSection->getFiberDimension(v_fault));
-    assert(spaceDim == tractionsSection->getFiberDimension(v_fault));
-    assert(1 == areaSection->getFiberDimension(v_fault));
-
-    const double* forcesInitialVertex = 
-      forcesInitialSection->restrictPoint(v_fault);
-    assert(0 != forcesInitialVertex);
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
-    const double* orientationVertex = 
-      orientationSection->restrictPoint(v_fault);
-    assert(0 != orientationVertex);
-
-    for (int i = 0; i < spaceDim; ++i)
-      tractionsVertexGlobal[i] = forcesInitialVertex[i] / areaVertex[0];
-
-    // Rotate from global coordinate system to local coordinate system
-    tractionsVertexFault = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        tractionsVertexFault[iDim] +=
-          tractionsVertexGlobal[kDim] * orientationVertex[iDim*spaceDim+kDim];
-    
-    assert(tractionsVertexFault.size() == 
-	   tractionsSection->getFiberDimension(v_fault));
-    tractionsSection->updatePoint(v_fault, &tractionsVertexFault[0]);
-  } // for
-
-  PetscLogFlops(numVertices * (1 + spaceDim) );
-
-#if 0 // DEBUGGING
-  tractions->view("INITIAL TRACTIONS");
-#endif
-
-} // _getInitialTractions
-
-// ----------------------------------------------------------------------
 // Update slip rate associated with Lagrange vertex k corresponding
 // to diffential velocity between conventional vertices i and j.
 void
-pylith::faults::FaultCohesiveDyn::_updateSlipRate(const topology::SolutionFields& fields)
-{ // _updateSlipRate
+pylith::faults::FaultCohesiveDyn::_updateVelRel(const topology::SolutionFields& fields)
+{ // _updateVelRel
   assert(0 != _fields);
 
   const int spaceDim = _quadrature->spaceDim();
 
   // Get section information
-  double_array velocityVertexN(spaceDim);
-  double_array velocityVertexP(spaceDim);
   const ALE::Obj<RealSection>& velocitySection =
       fields.get("velocity(t)").section();
   assert(!velocitySection.isNull());
 
-  double_array slipRateVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipRateSection =
-      _fields->get("slip rate").section();
+  scalar_array velRelVertex(spaceDim);
+  const ALE::Obj<RealSection>& velRelSection =
+      _fields->get("relative velocity").section();
 
-  double_array orientationVertex(spaceDim*spaceDim);
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
-
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -1471,44 +1514,28 @@
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
     // Get values
-    const double* velocityVertexN = velocitySection->restrictPoint(v_negative);
+    const PylithScalar* velocityVertexN = velocitySection->restrictPoint(v_negative);
     assert(0 != velocityVertexN);
     assert(spaceDim == velocitySection->getFiberDimension(v_negative));
 
-    const double* velocityVertexP = velocitySection->restrictPoint(v_positive);
+    const PylithScalar* velocityVertexP = velocitySection->restrictPoint(v_positive);
     assert(0 != velocityVertexP);
     assert(spaceDim == velocitySection->getFiberDimension(v_positive));
 
-    const double* orientationVertex = orientationSection->restrictPoint(v_fault);
-    assert(0 != orientationVertex);
-    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    // Compute relative velocity
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const PylithScalar value = velocityVertexP[iDim] - velocityVertexN[iDim];
+      velRelVertex[iDim] = fabs(value) > _zeroTolerance ? value : 0.0;
+    } // for
 
-    slipRateVertex = 0.0;
-    // Velocity for negative vertex.
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        slipRateVertex[iDim] +=
-          velocityVertexN[kDim] * -orientationVertex[iDim*spaceDim+kDim];
-
-    // Velocity for positive vertex.
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        slipRateVertex[iDim] +=
-          velocityVertexP[kDim] * +orientationVertex[iDim*spaceDim+kDim];
-
-    // Limit velocity to resolvable range
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      if (fabs(slipRateVertex[iDim]) < _slipRateTolerance)
-	slipRateVertex[iDim] = 0.0;
-
     // Update slip rate field.
-    assert(slipRateVertex.size() == 
-	   slipRateSection->getFiberDimension(v_fault));
-    slipRateSection->updatePoint(v_fault, &slipRateVertex[0]);
+    assert(velRelVertex.size() == 
+	   velRelSection->getFiberDimension(v_fault));
+    velRelSection->updatePoint(v_fault, &velRelVertex[0]);
   } // for
 
   PetscLogFlops(numVertices*spaceDim*spaceDim*4);
-} // _updateSlipRate
+} // _updateVelRel
 
 // ----------------------------------------------------------------------
 // Setup sensitivity problem to compute change in slip given change in Lagrange multipliers.
@@ -1525,10 +1552,10 @@
     _fields->add("sensitivity solution", "sensitivity_soln");
     topology::Field<topology::SubMesh>& solution =
         _fields->get("sensitivity solution");
-    const topology::Field<topology::SubMesh>& slip =
-        _fields->get("slip");
-    solution.cloneSection(slip);
-    solution.createScatter();
+    const topology::Field<topology::SubMesh>& dispRel =
+        _fields->get("relative disp");
+    solution.cloneSection(dispRel);
+    solution.createScatter(solution.mesh());
   } // if
   const topology::Field<topology::SubMesh>& solution =
       _fields->get("sensitivity solution");
@@ -1538,17 +1565,17 @@
     topology::Field<topology::SubMesh>& residual =
         _fields->get("sensitivity residual");
     residual.cloneSection(solution);
-    residual.createScatter();
+    residual.createScatter(solution.mesh());
   } // if
 
-  if (!_fields->hasField("sensitivity dispRel")) {
-    _fields->add("sensitivity dispRel", "sensitivity_disprel");
+  if (!_fields->hasField("sensitivity relative disp")) {
+    _fields->add("sensitivity relative disp", "sensitivity_relative_disp");
     topology::Field<topology::SubMesh>& dispRel =
-        _fields->get("sensitivity dispRel");
+        _fields->get("sensitivity relative disp");
     dispRel.cloneSection(solution);
   } // if
   topology::Field<topology::SubMesh>& dispRel =
-    _fields->get("sensitivity dispRel");
+    _fields->get("sensitivity relative disp");
   dispRel.zero();
 
   if (!_fields->hasField("sensitivity dLagrange")) {
@@ -1572,14 +1599,14 @@
     PetscErrorCode err = 0;
     err = KSPCreate(_faultMesh->comm(), &_ksp); CHECK_PETSC_ERROR(err);
     err = KSPSetInitialGuessNonzero(_ksp, PETSC_FALSE); CHECK_PETSC_ERROR(err);
-    double rtol = 0.0;
-    double atol = 0.0;
-    double dtol = 0.0;
+    PylithScalar rtol = 0.0;
+    PylithScalar atol = 0.0;
+    PylithScalar dtol = 0.0;
     int maxIters = 0;
     err = KSPGetTolerances(_ksp, &rtol, &atol, &dtol, &maxIters); 
     CHECK_PETSC_ERROR(err);
-    rtol = 1.0e-15;
-    atol = 1.0e-25;
+    rtol = 1.0e-2*_zeroTolerance;
+    atol = 1.0e-5*_zeroTolerance;
     err = KSPSetTolerances(_ksp, rtol, atol, dtol, maxIters);
     CHECK_PETSC_ERROR(err);
 
@@ -1625,6 +1652,7 @@
     cellsCohesive->end();
 
   // Visitor for Jacobian matrix associated with domain.
+  scalar_array jacobianSubCell(submatrixSize);
   const PetscMat jacobianDomainMatrix = jacobian.matrix();
   assert(0 != jacobianDomainMatrix);
   const ALE::Obj<SieveMesh::order_type>& globalOrderDomain =
@@ -1632,8 +1660,11 @@
   assert(!globalOrderDomain.isNull());
   const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
   assert(!sieve.isNull());
-  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve,
-      (size_t) pow(sieve->getMaxConeSize(), std::max(0, sieveMesh->depth())));
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+  assert(closureSize >= 0);
+  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> 
+    ncV(*sieve, closureSize);
   int_array indicesGlobal(subnrows);
 
   // Get fault Sieve mesh
@@ -1646,7 +1677,6 @@
   assert(!solutionFaultSection.isNull());
 
   // Visitor for Jacobian matrix associated with fault.
-  double_array jacobianSubCell(submatrixSize);
   assert(0 != _jacobian);
   const PetscMat jacobianFaultMatrix = _jacobian->matrix();
   assert(0 != jacobianFaultMatrix);
@@ -1655,9 +1685,7 @@
   assert(!globalOrderFault.isNull());
   // We would need to request unique points here if we had an interpolated mesh
   IndicesVisitor jacobianFaultVisitor(*solutionFaultSection,
-				      *globalOrderFault,
-				      (int) pow(faultSieveMesh->getSieve()->getMaxConeSize(),
-						faultSieveMesh->depth())*spaceDim);
+				      *globalOrderFault, closureSize*spaceDim);
 
   const int iCone = (negativeSide) ? 0 : 1;
   for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
@@ -1687,7 +1715,9 @@
 	else
 	  indicesGlobal[iB+iDim] = -1;
 
-	// Set matrix diagonal entries to 1.0 (used when vertex is not local).
+	// Set matrix diagonal entries to 1.0 (used when vertex is not
+	// local).  This happens if a vertex is not on the same
+	// processor as the cohesive cell.
 	jacobianSubCell[(iB+iDim)*numBasis*spaceDim+iB+iDim] = 1.0;
       } // for
     } // for
@@ -1716,50 +1746,106 @@
 void
 pylith::faults::FaultCohesiveDyn::_sensitivityReformResidual(const bool negativeSide)
 { // _sensitivityReformResidual
-  assert(0 != _fields);
-  assert(0 != _quadrature);
+  /** Compute residual -L^T dLagrange
+   *
+   * Note: We need all entries for L, even those on other processors,
+   * so we compute L rather than extract entries from the Jacoiab.
+   */
 
+  const PylithScalar signFault = (negativeSide) ?  1.0 : -1.0;
+
+  // Get cell information
+  const int numQuadPts = _quadrature->numQuadPts();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
   const int spaceDim = _quadrature->spaceDim();
+  const int numBasis = _quadrature->numBasis();
 
-  // Compute residual -C^T dLagrange
-  double_array residualVertex(spaceDim);
+
+  scalar_array basisProducts(numBasis*numBasis);
+
+  // Get fault cell information
+  const ALE::Obj<SieveMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& cells =
+    faultSieveMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
+  const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+  const int numCells = cells->size();
+
+  // Get sections
+  scalar_array coordinatesCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& coordinates = 
+    faultSieveMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+  RestrictVisitor coordsVisitor(*coordinates, 
+				coordinatesCell.size(), &coordinatesCell[0]);
+
+  scalar_array dLagrangeCell(numBasis*spaceDim);
+  const ALE::Obj<RealSection>& dLagrangeSection = 
+    _fields->get("sensitivity dLagrange").section();
+  assert(!dLagrangeSection.isNull());
+  RestrictVisitor dLagrangeVisitor(*dLagrangeSection, 
+				   dLagrangeCell.size(), &dLagrangeCell[0]);
+
+  scalar_array residualCell(numBasis*spaceDim);
   topology::Field<topology::SubMesh>& residual =
       _fields->get("sensitivity residual");
   const ALE::Obj<RealSection>& residualSection = residual.section();
+  UpdateAddVisitor residualVisitor(*residualSection, &residualCell[0]);
+
   residual.zero();
 
-  const ALE::Obj<RealSection>& dLagrangeSection =
-      _fields->get("sensitivity dLagrange").section();
+  // Loop over cells
+  for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+       c_iter != cellsEnd;
+       ++c_iter) {
+    // Compute geometry
+    coordsVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+    _quadrature->computeGeometry(coordinatesCell, *c_iter);
 
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
+    // Restrict input fields to cell
+    dLagrangeVisitor.clear();
+    faultSieveMesh->restrictClosure(*c_iter, dLagrangeVisitor);
 
-  const double sign = (negativeSide) ? -1.0 : 1.0;
+    // Get cell geometry information that depends on cell
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
-  const int numVertices = _cohesiveVertices.size();
-  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
-    const int v_fault = _cohesiveVertices[iVertex].fault;
+    // Compute product of basis functions.
+    // Want values summed over quadrature points
+    basisProducts = 0.0;
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
 
-    const double* dLagrangeVertex = dLagrangeSection->restrictPoint(v_fault);
-    assert(0 != dLagrangeVertex);
-    assert(spaceDim == dLagrangeSection->getFiberDimension(v_fault));
+      for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+        const PylithScalar valI = wt*basis[iQ+iBasis];
+	
+        for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+	  
+	  basisProducts[iBasis*numBasis+jBasis] += valI*basis[iQ+jBasis];
+	} // for
+      } // for
+    } // for
 
-    const double* orientationVertex = orientationSection->restrictPoint(v_fault);
-    assert(0 != orientationVertex);
-    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    residualCell = 0.0;
+    
+    for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
+	const PylithScalar l = signFault * basisProducts[iBasis*numBasis+jBasis];
+	for (int iDim=0; iDim < spaceDim; ++iDim) {
+	  residualCell[iBasis*spaceDim+iDim] += 
+	    l * dLagrangeCell[jBasis*spaceDim+iDim];
+	} // for
+      } // for
+    } // for
 
-    residualVertex = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        residualVertex[iDim] +=
-          sign * dLagrangeVertex[kDim] * -orientationVertex[kDim*spaceDim+iDim];
-
-    assert(residualVertex.size() == residualSection->getFiberDimension(v_fault));
-    residualSection->updatePoint(v_fault, &residualVertex[0]);
+    // Assemble cell contribution into field
+    residualVisitor.clear();
+    faultSieveMesh->updateClosure(*c_iter, residualVisitor);    
   } // for
-
-  PetscLogFlops(numVertices*spaceDim*spaceDim*4);
 } // _sensitivityReformResidual
 
 // ----------------------------------------------------------------------
@@ -1791,7 +1877,10 @@
   // Update section view of field.
   solution.scatterVectorToSection();
 
-  //solution.view("SENSITIVITY SOLUTION"); // DEBUGGING
+#if 0 // DEBUGGING
+  residual.view("SENSITIVITY RESIDUAL");
+  solution.view("SENSITIVITY SOLUTION");
+#endif
 } // _sensitivitySolve
 
 // ----------------------------------------------------------------------
@@ -1805,13 +1894,13 @@
 
   const int spaceDim = _quadrature->spaceDim();
 
-  double_array dispVertex(spaceDim);
+  scalar_array dispVertex(spaceDim);
   const ALE::Obj<RealSection>& solutionSection =
       _fields->get("sensitivity solution").section();
   const ALE::Obj<RealSection>& dispRelSection =
-    _fields->get("sensitivity dispRel").section();
+    _fields->get("sensitivity relative disp").section();
 
-  const double sign = (negativeSide) ? -1.0 : 1.0;
+  const PylithScalar sign = (negativeSide) ? -1.0 : 1.0;
 
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
@@ -1830,18 +1919,18 @@
 // Solve slip/Lagrange multiplier sensitivity problem for case of lumped Jacobian in 1-D.
 void
 pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped1D(
-                                     double_array* slip,
-				     const double_array& dLagrangeTpdt,
-				     const double_array& jacobianN,
-				     const double_array& jacobianP)
+                                     scalar_array* slip,
+				     const scalar_array& dLagrangeTpdt,
+				     const scalar_array& jacobianN,
+				     const scalar_array& jacobianP)
 { // _sensitivitySolveLumped1D
   assert(0 != slip);
 
   // Sensitivity of slip to changes in the Lagrange multipliers
-  const double Spp = 1.0 / jacobianN[0] + 1.0
+  const PylithScalar Spp = 1.0 / jacobianN[0] + 1.0
     / jacobianP[0];
 
-  const double dlp = dLagrangeTpdt[0];
+  const PylithScalar dlp = dLagrangeTpdt[0];
   (*slip)[0] -= Spp * dlp;
 
   PetscLogFlops(2);
@@ -1851,10 +1940,10 @@
 // Solve slip/Lagrange multiplier sensitivity problem for case of lumped Jacobian in 2-D.
 void
 pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped2D(
-                                     double_array* slip,
-				     const double_array& dLagrangeTpdt,
-				     const double_array& jacobianN,
-				     const double_array& jacobianP)
+                                     scalar_array* slip,
+				     const scalar_array& dLagrangeTpdt,
+				     const scalar_array& jacobianN,
+				     const scalar_array& jacobianP)
 { // _sensitivitySolveLumped2D
   assert(0 != slip);
 
@@ -1868,11 +1957,11 @@
   assert(jacobianN[0] == jacobianN[1]);
   assert(jacobianP[0] == jacobianP[1]);
   
-  const double Spp = 1.0 / jacobianN[0] + 1.0 / jacobianP[0];
-  const double Sqq = Spp;
+  const PylithScalar Spp = 1.0 / jacobianN[0] + 1.0 / jacobianP[0];
+  const PylithScalar Sqq = Spp;
 
-  const double dlp = dLagrangeTpdt[0];
-  const double dlq = dLagrangeTpdt[1];
+  const PylithScalar dlp = dLagrangeTpdt[0];
+  const PylithScalar dlq = dLagrangeTpdt[1];
   (*slip)[0] -= Spp * dlp;
   (*slip)[1] -= Sqq * dlq;
 
@@ -1883,10 +1972,10 @@
 // Solve slip/Lagrange multiplier sensitivity problem for case of lumped Jacobian in 3-D.
 void
 pylith::faults::FaultCohesiveDyn::_sensitivitySolveLumped3D(
-                                     double_array* slip,
-				     const double_array& dLagrangeTpdt,
-				     const double_array& jacobianN,
-				     const double_array& jacobianP)
+                                     scalar_array* slip,
+				     const scalar_array& dLagrangeTpdt,
+				     const scalar_array& jacobianN,
+				     const scalar_array& jacobianP)
 { // _sensitivitySolveLumped3D
   assert(0 != slip);
 
@@ -1903,13 +1992,13 @@
 	 jacobianP[0] == jacobianP[2]);
 
 
-  const double Spp = 1.0 / jacobianN[0] + 1.0 / jacobianP[0];
-  const double Sqq = Spp;
-  const double Srr = Spp;
+  const PylithScalar Spp = 1.0 / jacobianN[0] + 1.0 / jacobianP[0];
+  const PylithScalar Sqq = Spp;
+  const PylithScalar Srr = Spp;
 
-  const double dlp = dLagrangeTpdt[0];
-  const double dlq = dLagrangeTpdt[1];
-  const double dlr = dLagrangeTpdt[2];
+  const PylithScalar dlp = dLagrangeTpdt[0];
+  const PylithScalar dlq = dLagrangeTpdt[1];
+  const PylithScalar dlr = dLagrangeTpdt[2];
   (*slip)[0] -= Spp * dlp;
   (*slip)[1] -= Sqq * dlq;
   (*slip)[2] -= Srr * dlr;
@@ -1920,11 +2009,10 @@
 // ----------------------------------------------------------------------
 // Constrain solution space in 1-D.
 void
-pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D(double_array* dLagrangeTpdt,
-         const double_array& slip,
-         const double_array& sliprate,
-         const double_array& tractionTpdt,
-         const double area)
+pylith::faults::FaultCohesiveDyn::_constrainSolnSpace1D(scalar_array* dLagrangeTpdt,
+         const scalar_array& slip,
+         const scalar_array& sliprate,
+         const scalar_array& tractionTpdt)
 { // _constrainSolnSpace1D
   assert(0 != dLagrangeTpdt);
 
@@ -1933,7 +2021,7 @@
     } else {
       // if tension, then traction is zero.
 
-      const double dlp = -tractionTpdt[0] * area;
+      const PylithScalar dlp = -tractionTpdt[0];
       (*dLagrangeTpdt)[0] = dlp;
     } // else
 
@@ -1943,34 +2031,38 @@
 // ----------------------------------------------------------------------
 // Constrain solution space in 2-D.
 void
-pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D(double_array* dLagrangeTpdt,
-         const double_array& slip,
-         const double_array& slipRate,
-         const double_array& tractionTpdt,
-         const double area)
+pylith::faults::FaultCohesiveDyn::_constrainSolnSpace2D(scalar_array* dLagrangeTpdt,
+         const scalar_array& slip,
+         const scalar_array& slipRate,
+         const scalar_array& tractionTpdt)
 { // _constrainSolnSpace2D
   assert(0 != dLagrangeTpdt);
 
-  const double slipMag = fabs(slip[0]);
-  const double slipRateMag = fabs(slipRate[0]);
+  const PylithScalar slipMag = fabs(slip[0]);
+  const PylithScalar slipRateMag = fabs(slipRate[0]);
 
-  const double tractionNormal = tractionTpdt[1];
-  const double tractionShearMag = fabs(tractionTpdt[0]);
+  const PylithScalar tractionNormal = tractionTpdt[1];
+  const PylithScalar tractionShearMag = fabs(tractionTpdt[0]);
 
   if (tractionNormal < 0 && 0.0 == slip[1]) {
     // if in compression and no opening
-    const double frictionStress = _friction->calcFriction(slipMag, slipRateMag,
+    const PylithScalar frictionStress = _friction->calcFriction(slipMag, slipRateMag,
 							  tractionNormal);
     if (tractionShearMag > frictionStress || slipRateMag > 0.0) {
       // traction is limited by friction, so have sliding OR
       // friction exceeds traction due to overshoot in slip
-      
-      // Update traction increment based on value required to stick
-      // versus friction
-      const double dlp = -(tractionShearMag - frictionStress) * area *
-	tractionTpdt[0] / tractionShearMag;
-      (*dLagrangeTpdt)[0] = dlp;
-      (*dLagrangeTpdt)[1] = 0.0;
+
+      if (tractionShearMag > 0.0) {
+	// Update traction increment based on value required to stick
+	// versus friction
+	const PylithScalar dlp = -(tractionShearMag - frictionStress) *
+	  tractionTpdt[0] / tractionShearMag;
+	(*dLagrangeTpdt)[0] = dlp;
+	(*dLagrangeTpdt)[1] = 0.0;
+      } else {
+	(*dLagrangeTpdt)[0] = -(*dLagrangeTpdt)[0];
+	(*dLagrangeTpdt)[1] = 0.0;
+      } // if/else
     } else {
       // friction exceeds value necessary to stick
       // no changes to solution
@@ -1978,8 +2070,8 @@
     } // if/else
   } else {
     // if in tension, then traction is zero.
-    (*dLagrangeTpdt)[0] = -tractionTpdt[0] * area;
-    (*dLagrangeTpdt)[1] = -tractionTpdt[1] * area;
+    (*dLagrangeTpdt)[0] = -tractionTpdt[0];
+    (*dLagrangeTpdt)[1] = -tractionTpdt[1];
   } // else
 
   PetscLogFlops(8);
@@ -1988,42 +2080,47 @@
 // ----------------------------------------------------------------------
 // Constrain solution space in 3-D.
 void
-pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D(double_array* dLagrangeTpdt,
-         const double_array& slip,
-         const double_array& slipRate,
-         const double_array& tractionTpdt,
-         const double area)
+pylith::faults::FaultCohesiveDyn::_constrainSolnSpace3D(scalar_array* dLagrangeTpdt,
+         const scalar_array& slip,
+         const scalar_array& slipRate,
+         const scalar_array& tractionTpdt)
 { // _constrainSolnSpace3D
   assert(0 != dLagrangeTpdt);
 
-  const double slipShearMag = sqrt(slip[0] * slip[0] +
+  const PylithScalar slipShearMag = sqrt(slip[0] * slip[0] +
              slip[1] * slip[1]);
-  double slipRateMag = sqrt(slipRate[0]*slipRate[0] + 
+  PylithScalar slipRateMag = sqrt(slipRate[0]*slipRate[0] + 
             slipRate[1]*slipRate[1]);
   
-  const double tractionNormal = tractionTpdt[2];
-  const double tractionShearMag = 
+  const PylithScalar tractionNormal = tractionTpdt[2];
+  const PylithScalar tractionShearMag = 
     sqrt(tractionTpdt[0] * tractionTpdt[0] +
 	 tractionTpdt[1] * tractionTpdt[1]);
   
   if (tractionNormal < 0.0 && 0.0 == slip[2]) {
     // if in compression and no opening
-    const double frictionStress = 
+    const PylithScalar frictionStress = 
       _friction->calcFriction(slipShearMag, slipRateMag, tractionNormal);
     if (tractionShearMag > frictionStress || slipRateMag > 0.0) {
       // traction is limited by friction, so have sliding OR
       // friction exceeds traction due to overshoot in slip
       
-      // Update traction increment based on value required to stick
-      // versus friction
-      const double dlp = -(tractionShearMag - frictionStress) * area *
-	tractionTpdt[0] / tractionShearMag;
-      const double dlq = -(tractionShearMag - frictionStress) * area *
-	tractionTpdt[1] / tractionShearMag;
-
-      (*dLagrangeTpdt)[0] = dlp;
-      (*dLagrangeTpdt)[1] = dlq;
-      (*dLagrangeTpdt)[2] = 0.0;
+      if (tractionShearMag > 0.0) {
+	// Update traction increment based on value required to stick
+	// versus friction
+	const PylithScalar dlp = -(tractionShearMag - frictionStress) * 
+	  tractionTpdt[0] / tractionShearMag;
+	const PylithScalar dlq = -(tractionShearMag - frictionStress) * 
+	  tractionTpdt[1] / tractionShearMag;
+	
+	(*dLagrangeTpdt)[0] = dlp;
+	(*dLagrangeTpdt)[1] = dlq;
+	(*dLagrangeTpdt)[2] = 0.0;
+      } else {
+	(*dLagrangeTpdt)[0] = -(*dLagrangeTpdt)[0];
+	(*dLagrangeTpdt)[0] = -(*dLagrangeTpdt)[0];
+	(*dLagrangeTpdt)[2] = 0.0;
+      } // if/else	
       
     } else {
       // else friction exceeds value necessary, so stick
@@ -2032,9 +2129,9 @@
     } // if/else
   } else {
     // if in tension, then traction is zero.
-    (*dLagrangeTpdt)[0] = -tractionTpdt[0] * area;
-    (*dLagrangeTpdt)[1] = -tractionTpdt[1] * area;
-    (*dLagrangeTpdt)[2] = -tractionTpdt[2] * area;
+    (*dLagrangeTpdt)[0] = -tractionTpdt[0];
+    (*dLagrangeTpdt)[1] = -tractionTpdt[1];
+    (*dLagrangeTpdt)[2] = -tractionTpdt[2];
   } // else
 
   PetscLogFlops(22);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveDyn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,6 +67,12 @@
    */
   void frictionModel(friction::FrictionModel* const model);
 
+  /** Nondimensional tolerance for detecting near zero values.
+   *
+   * @param value Nondimensional tolerance
+   */
+  void zeroTolerance(const PylithScalar value);
+
   /** Initialize fault. Determine orientation and setup boundary
    * condition parameters.
    *
@@ -76,7 +82,7 @@
    *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator that
    * do not require assembly across processors.
@@ -90,7 +96,7 @@
    */
   virtual
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Update state variables as needed.
@@ -99,7 +105,7 @@
    * @param fields Solution fields
    * @param mesh Finite-element mesh
    */
-  void updateStateVars(const double t,
+  void updateStateVars(const PylithScalar t,
 		       topology::SolutionFields* const fields);
 
   /** Constrain solution space based on friction.
@@ -109,7 +115,7 @@
    * @param jacobian Sparse matrix for system Jacobian.
    */
   void constrainSolnSpace(topology::SolutionFields* const fields,
-			  const double t,
+			  const PylithScalar t,
 			  const topology::Jacobian& jacobian);
 
   /** Adjust solution from solver with lumped Jacobian to match Lagrange
@@ -146,18 +152,13 @@
   void _calcTractions(topology::Field<topology::SubMesh>* tractions,
           const topology::Field<topology::Mesh>& solution);
 
-  /** Get initial tractions on fault surface.
+  /** Update relative velocity associated with Lagrange vertex k
+   * corresponding to diffential velocity between conventional
+   * vertices i and j.
    *
-   * @param tractions Field for tractions.
-   */
-  void _getInitialTractions(topology::Field<topology::SubMesh>* tractions);
-
-  /** Update slip rate associated with Lagrange vertex k corresponding
-   * to diffential velocity between conventional vertices i and j.
-   *
    * @param fields Solution fields.
    */
-  void _updateSlipRate(const topology::SolutionFields& fields);
+  void _updateVelRel(const topology::SolutionFields& fields);
 
   /** Setup sensitivity problem to compute change in slip given change
    * in Lagrange multipliers.
@@ -205,10 +206,10 @@
    * @param jacobianN Jacobian for vertex on - side of the fault.
    * @param jacobianP Jacobian for vertex on + side of the fault.
    */
-  void _sensitivitySolveLumped1D(double_array* slip,
-                                 const double_array& dLagrangeTpdt,
-                                 const double_array& jacobianN,
-                                 const double_array& jacobianP);
+  void _sensitivitySolveLumped1D(scalar_array* slip,
+                                 const scalar_array& dLagrangeTpdt,
+                                 const scalar_array& jacobianN,
+                                 const scalar_array& jacobianP);
 
   /** Solve slip/Lagrange multiplier sensitivity problem for case of lumped Jacobian in 2-D.
    *
@@ -217,10 +218,10 @@
    * @param jacobianN Jacobian for vertex on - side of the fault.
    * @param jacobianP Jacobian for vertex on + side of the fault.
    */
-  void _sensitivitySolveLumped2D(double_array* slip,
-                                 const double_array& dLagrangeTpdt,
-                                 const double_array& jacobianN,
-                                 const double_array& jacobianP);
+  void _sensitivitySolveLumped2D(scalar_array* slip,
+                                 const scalar_array& dLagrangeTpdt,
+                                 const scalar_array& jacobianN,
+                                 const scalar_array& jacobianP);
 
   /** Solve slip/Lagrange multiplier sensitivity problem for case of lumped Jacobian in 3-D.
    *
@@ -229,10 +230,10 @@
    * @param jacobianN Jacobian for vertex on - side of the fault.
    * @param jacobianP Jacobian for vertex on + side of the fault.
    */
-  void _sensitivitySolveLumped3D(double_array* slip,
-                                 const double_array& dLagrangeTpdt,
-                                 const double_array& jacobianN,
-                                 const double_array& jacobianP);
+  void _sensitivitySolveLumped3D(scalar_array* slip,
+                                 const scalar_array& dLagrangeTpdt,
+                                 const scalar_array& jacobianN,
+                                 const scalar_array& jacobianP);
 
   /** Constrain solution space with lumped Jacobian in 1-D.
    *
@@ -240,13 +241,11 @@
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
-   * @param area Fault area associated w/Lagrange multiplier vertex.
    */
-  void _constrainSolnSpace1D(double_array* dLagrangeTpdt,
-           const double_array& slip,
-           const double_array& slipRate,
-           const double_array& tractionTpdt,
-           const double area);
+  void _constrainSolnSpace1D(scalar_array* dLagrangeTpdt,
+           const scalar_array& slip,
+           const scalar_array& slipRate,
+           const scalar_array& tractionTpdt);
 
   /** Constrain solution space with lumped Jacobian in 2-D.
    *
@@ -254,13 +253,11 @@
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
-   * @param area Fault area associated w/Lagrange multiplier vertex.
    */
-  void _constrainSolnSpace2D(double_array* dLagrangeTpdt,
-           const double_array& slip,
-           const double_array& slipRate,
-           const double_array& tractionTpdt,
-           const double area);
+  void _constrainSolnSpace2D(scalar_array* dLagrangeTpdt,
+           const scalar_array& slip,
+           const scalar_array& slipRate,
+           const scalar_array& tractionTpdt);
 
   /** Constrain solution space with lumped Jacobian in 3-D.
    *
@@ -268,17 +265,18 @@
    * @param slip Slip assoc. w/Lagrange multiplier vertex.
    * @param slipRate Slip rate assoc. w/Lagrange multiplier vertex.
    * @param tractionTpdt Fault traction assoc. w/Lagrange multiplier vertex.
-   * @param area Fault area associated w/Lagrange multiplier vertex.
    */
-  void _constrainSolnSpace3D(double_array* dLagrangeTpdt,
-           const double_array& slip,
-           const double_array& slipRate,
-           const double_array& tractionTpdt,
-           const double area);
+  void _constrainSolnSpace3D(scalar_array* dLagrangeTpdt,
+           const scalar_array& slip,
+           const scalar_array& slipRate,
+           const scalar_array& tractionTpdt);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
+  /// Minimum resolvable value accounting for roundoff errors
+  PylithScalar _zeroTolerance;
+
   /// Database for initial tractions.
   spatialdata::spatialdb::SpatialDB* _dbInitialTract;
 
@@ -290,9 +288,6 @@
 
   PetscKSP _ksp; ///< PETSc KSP linear solver for sensitivity problem.
 
-  /// Minimum resolvable slip rate accounting for roundoff errors
-  static const double _slipRateTolerance;
-
 // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -97,7 +97,7 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveKin::initialize(const topology::Mesh& mesh,
-					     const double upDir[3])
+					     const PylithScalar upDir[3])
 { // initialize
   assert(0 != upDir);
   assert(0 != _quadrature);
@@ -119,7 +119,7 @@
 void
 pylith::faults::FaultCohesiveKin::integrateResidual(
 			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != fields);
@@ -129,17 +129,21 @@
   const int setupEvent = _logger->eventId("FaIR setup");
   _logger->eventBegin(setupEvent);
 
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  slip.zero();
+  topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+  dispRel.zero();
   // Compute slip field at current time step
   const srcs_type::const_iterator srcsEnd = _eqSrcs.end();
   for (srcs_type::iterator s_iter = _eqSrcs.begin(); s_iter != srcsEnd; ++s_iter) {
     EqKinSrc* src = s_iter->second;
     assert(0 != src);
     if (t >= src->originTime())
-      src->slip(&slip, t);
+      src->slip(&dispRel, t);
   } // for
 
+  // Transform slip from local (fault) coordinate system to relative
+  // displacement field in global coordinate system
+  _faultToGlobal(&dispRel);
+
   _logger->eventEnd(setupEvent);
 
   FaultCohesiveLagrange::integrateResidual(residual, t, fields);
@@ -163,11 +167,18 @@
   const int slipStrLen = strlen("final_slip");
   const int timeStrLen = strlen("slip_time");
 
-  double scale = 0.0;
+  PylithScalar scale = 0.0;
   int fiberDim = 0;
   if (0 == strcasecmp("slip", name)) {
-    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-    return slip;
+    const topology::Field<topology::SubMesh>& dispRel = 
+      _fields->get("relative disp");
+    _allocateBufferVectorField();
+    topology::Field<topology::SubMesh>& buffer =
+        _fields->get("buffer (vector)");
+    buffer.copy(dispRel);
+    buffer.label("slip");
+    _globalToFault(&buffer);
+    return buffer;
 
   } else if (cohesiveDim > 0 && 0 == strcasecmp("strike_dir", name)) {
     const ALE::Obj<RealSection>& orientationSection = _fields->get(
@@ -227,7 +238,8 @@
         _fields->get("buffer (vector)");
     buffer.copy(s_iter->second->finalSlip());
     assert(value.length() > 0);
-    const std::string& label = std::string("final_slip_") + std::string(value);
+    const std::string& label = (_eqSrcs.size() > 1) ? 
+      std::string("final_slip_") + std::string(value) : "final_slip";
     buffer.label(label.c_str());
 
     return buffer;
@@ -244,7 +256,8 @@
         _fields->get("buffer (scalar)");
     buffer.copy(s_iter->second->slipTime());
     assert(value.length() > 0);
-    const std::string& label = std::string("slip_time_") + std::string(value);
+    const std::string& label = (_eqSrcs.size() > 1) ? 
+      std::string("slip_time_") + std::string(value) : "slip_time";
     buffer.label(label.c_str());
 
     return buffer;
@@ -266,6 +279,9 @@
   } // else
 
 
+  // Should never get here.
+  throw std::logic_error("Unknown field in FaultCohesiveKin::vertexField().");
+
   // Satisfy return values
   assert(0 != _fields);
   const topology::Field<topology::SubMesh>& buffer = _fields->get(

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveKin.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
    *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contributions to residual term (r) for operator that
    * do not require assembly across cells, vertices, or processors.
@@ -83,7 +83,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Get vertex field associated with integrator.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
 typedef pylith::topology::SubMesh::SieveMesh SieveSubMesh;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
 // Default constructor.
@@ -83,7 +83,7 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveLagrange::initialize(const topology::Mesh& mesh,
-					     const double upDir[3])
+					     const PylithScalar upDir[3])
 { // initialize
   assert(0 != upDir);
   assert(0 != _quadrature);
@@ -107,18 +107,18 @@
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   //logger.stagePush("Fault");
 
-  // Allocate slip field
+  // Allocate dispRel field
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
   assert(!faultSieveMesh.isNull());
   const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
       faultSieveMesh->depthStratum(0);
   assert(!vertices.isNull());
-  _fields->add("slip", "slip");
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  slip.newSection(vertices, cs->spaceDim());
-  slip.allocate();
-  slip.vectorFieldType(topology::FieldBase::VECTOR);
-  slip.scale(_normalizer->lengthScale());
+  _fields->add("relative disp", "relative_disp");
+  topology::Field<topology::SubMesh>& dispRel = _fields->get("relative disp");
+  dispRel.newSection(vertices, cs->spaceDim());
+  dispRel.allocate();
+  dispRel.vectorFieldType(topology::FieldBase::VECTOR);
+  dispRel.scale(_normalizer->lengthScale());
 
   const ALE::Obj<SieveSubMesh::label_sequence>& cells =
       faultSieveMesh->heightStratum(0);
@@ -135,13 +135,13 @@
   dist.allocate();
   const ALE::Obj<RealSection>& distSection = dist.section();
   assert(!distSection.isNull());
-  const double rank = (double) distSection->commRank();
+  const PylithScalar rank = (PylithScalar) distSection->commRank();
 
-  // Loop over cells in fault mesh, compute area
+  // Loop over cells in fault mesh, set distribution
   for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin; c_iter
       != cellsEnd; ++c_iter) {
     distSection->updatePoint(*c_iter, &rank);
-  }
+  } // for
 
   // Compute orientation at vertices in fault mesh.
   _calcOrientation(upDir);
@@ -188,20 +188,21 @@
 void
 pylith::faults::FaultCohesiveLagrange::integrateResidual(
 			 const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != fields);
   assert(0 != _fields);
   assert(0 != _logger);
 
-  // Cohesive cells with normal vertices i and j, and constraint
-  // vertex k make contributions to the assembled residual:
+  // Cohesive cells with conventional vertices N and P, and constraint
+  // vertex L make contributions to the assembled residual:
   //
-  //   * DOF i and j: internal forces in soln field associated with
-  //                  slip  -[C]^T{L(t)+dL(t)}
-  //   * DOF k: slip values  -[C]{u(t)+dt(t)}
-  //   * DOF k: slip values {D(t+dt)}
+  // DOF P: \int_{S_f^+} \tensor{N}_m^T \cdot \tensor{N}_p \cdot \vec{l}_p dS
+  // DOF N: -\int_{S_f^+} \tensor{N}_m^T \cdot \tensor{N}_p \cdot \vec{l}_p dS
+  // DOF L: \int_S_f \tensor{N}_p^T ( \tensor{R} \cdot \vec{d} 
+  //                 -\tensor{N}_{n^+} \cdot \vec{u}_{n^+}
+  //                 +\tensor{N}_{n^-} \cdot \vec{u}_{n^-} dS
 
   const int setupEvent = _logger->eventId("FaIR setup");
   const int geometryEvent = _logger->eventId("FaIR geometry");
@@ -211,51 +212,40 @@
 
   _logger->eventBegin(setupEvent);
 
-  // Get cell information and setup storage for cell data
+  // Get cell geometry information that doesn't depend on cell
   const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim * spaceDim;
 
-  // Allocate vectors for vertex values
-  double_array slipVertex(spaceDim);
-  double_array orientationVertex(orientationSize);
-  double_array dispTVertexN(spaceDim);
-  double_array dispTVertexP(spaceDim);
-  double_array dispTVertexL(spaceDim);
-  double_array dispTIncrVertexN(spaceDim);
-  double_array dispTIncrVertexP(spaceDim);
-  double_array dispTIncrVertexL(spaceDim);
-  double_array dispTpdtVertexN(spaceDim);
-  double_array dispTpdtVertexP(spaceDim);
-  double_array dispTpdtVertexL(spaceDim);
-  double_array residualVertexN(spaceDim);
-  double_array residualVertexP(spaceDim);
-  double_array residualVertexL(spaceDim);
-
-  // Get sections
-  topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  const ALE::Obj<RealSection>& slipSection = slip.section();
-  assert(!slipSection.isNull());
-
+  // Get sections associated with cohesive cells
+  scalar_array residualVertexN(spaceDim);
+  scalar_array residualVertexP(spaceDim);
+  scalar_array residualVertexL(spaceDim);
   const ALE::Obj<RealSection>& residualSection = residual.section();
   assert(!residualSection.isNull());
 
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
-
-  topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
-  const ALE::Obj<RealSection>& dispTSection = dispT.section();
+  const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
 
-  topology::Field<topology::Mesh>& dispTIncr = fields->get("dispIncr(t->t+dt)");
-  const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
+  const ALE::Obj<RealSection>& dispTIncrSection = 
+    fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
 
+  scalar_array dispTpdtVertexN(spaceDim);
+  scalar_array dispTpdtVertexP(spaceDim);
+  scalar_array dispTpdtVertexL(spaceDim);
+
+  const ALE::Obj<RealSection>& dispRelSection = 
+    _fields->get("relative disp").section();
+  assert(!dispRelSection.isNull());
+
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
+
+  // Get fault information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
-    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
-					    residualSection);
+      sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+					      residualSection);
   assert(!globalOrder.isNull());
 
   _logger->eventEnd(setupEvent);
@@ -263,6 +253,7 @@
   _logger->eventBegin(computeEvent);
 #endif
 
+  // Loop over fault vertices
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
@@ -278,29 +269,45 @@
     _logger->eventBegin(restrictEvent);
 #endif
 
-    // Get slip at fault vertex.
-    slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
+    // Get relative dislplacement at fault vertex.
+    assert(spaceDim == dispRelSection->getFiberDimension(v_fault));
+    const PylithScalar* dispRelVertex = dispRelSection->restrictPoint(v_fault);
+    assert(dispRelVertex);
 
-    // Get orientations at fault vertex.
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0],
-				      orientationVertex.size());
+    // Get area associated with fault vertex.
+    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
 
     // Get disp(t) at conventional vertices and Lagrange vertex.
-    dispTSection->restrictPoint(v_negative, &dispTVertexN[0],
-				dispTVertexN.size());
-    dispTSection->restrictPoint(v_positive, &dispTVertexP[0],
-				dispTVertexP.size());
-    dispTSection->restrictPoint(v_lagrange, &dispTVertexL[0],
-				dispTVertexL.size());
+    assert(spaceDim == dispTSection->getFiberDimension(v_negative));
+    const PylithScalar* dispTVertexN = dispTSection->restrictPoint(v_negative);
+    assert(dispTVertexN);
 
+    assert(spaceDim == dispTSection->getFiberDimension(v_positive));
+    const PylithScalar* dispTVertexP = dispTSection->restrictPoint(v_positive);
+    assert(dispTVertexP);
+
+    assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
+    const PylithScalar* dispTVertexL = dispTSection->restrictPoint(v_lagrange);
+    assert(dispTVertexL);
+
     // Get dispIncr(t->t+dt) at conventional vertices and Lagrange vertex.
-    dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
-				    dispTIncrVertexN.size());
-    dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
-				    dispTIncrVertexP.size());
-    dispTIncrSection->restrictPoint(v_lagrange, &dispTIncrVertexL[0],
-				    dispTIncrVertexL.size());
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+    const PylithScalar* dispTIncrVertexN = 
+      dispTIncrSection->restrictPoint(v_negative);
+    assert(dispTIncrVertexN);
 
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+    const PylithScalar* dispTIncrVertexP = 
+      dispTIncrSection->restrictPoint(v_positive);
+    assert(dispTIncrVertexP);
+
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+    const PylithScalar* dispTIncrVertexL = 
+      dispTIncrSection->restrictPoint(v_lagrange);
+    assert(dispTIncrVertexL);
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
     _logger->eventBegin(computeEvent);
@@ -308,33 +315,27 @@
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
-    dispTpdtVertexN = dispTVertexN + dispTIncrVertexN;
-    dispTpdtVertexP = dispTVertexP + dispTIncrVertexP;
-    dispTpdtVertexL = dispTVertexL + dispTIncrVertexL;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      dispTpdtVertexN[iDim] = dispTVertexN[iDim] + dispTIncrVertexN[iDim];
+      dispTpdtVertexP[iDim] = dispTVertexP[iDim] + dispTIncrVertexP[iDim];
+      dispTpdtVertexL[iDim] = dispTVertexL[iDim] + dispTIncrVertexL[iDim];
+    } // for
 
-    // Entries associated with constraint forces applied at negative vertex
-    residualVertexN = 0.0;
-    for (int iDim = 0; iDim < spaceDim; ++iDim)
-      for (int kDim = 0; kDim < spaceDim; ++kDim)
-        residualVertexN[iDim] -= 
-	  dispTpdtVertexL[kDim] * -orientationVertex[kDim*spaceDim+iDim];
-
-    // Entries associated with constraint forces applied at positive vertex
+    residualVertexN = areaVertex * dispTpdtVertexL;
     residualVertexP = -residualVertexN;
 
-    // Entries associated with relative displacements between positive
-    // and negative vertices for Lagrange vertex.
-    residualVertexL = slipVertex;
-    for (int kDim = 0; kDim < spaceDim; ++kDim)
-      for (int iDim = 0; iDim < spaceDim; ++iDim)
-        residualVertexL[kDim] -= (dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim])
-            * orientationVertex[kDim*spaceDim+iDim];
+    residualVertexL = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      residualVertexL[iDim] = -areaVertex * 
+	(dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim] - dispRelVertex[iDim]);
+    } // for
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
     _logger->eventBegin(updateEvent);
 #endif
 
+    // Assemble contributions into field
     assert(residualVertexN.size() == 
 	   residualSection->getFiberDimension(v_negative));
     residualSection->updateAddPoint(v_negative, &residualVertexN[0]);
@@ -351,7 +352,7 @@
     _logger->eventEnd(updateEvent);
 #endif
   } // for
-  PetscLogFlops(numVertices*spaceDim*spaceDim*8);
+  PetscLogFlops(numVertices*spaceDim*8);
 
 #if !defined(DETAILED_EVENT_LOGGING)
   _logger->eventEnd(computeEvent);
@@ -363,7 +364,7 @@
 void
 pylith::faults::FaultCohesiveLagrange::integrateJacobian(
 				   topology::Jacobian* jacobian,
-				   const double t,
+				   const PylithScalar t,
 				   topology::SolutionFields* const fields)
 { // integrateJacobian
   assert(0 != jacobian);
@@ -379,39 +380,37 @@
 
   _logger->eventBegin(setupEvent);
 
-  // Add constraint information to Jacobian matrix; these are the
-  // direction cosines. Entries are associated with vertices ik, jk,
-  // ki, and kj.
+  // Add constraint information to Jacobian matrix; Entries are
+  // associated with vertices ik, jk, ki, and kj.
 
-  // Get cell information and setup storage for cell data
+  // Get cell geometry information that doesn't depend on cell
   const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim * spaceDim;
 
-  // Allocate vectors for vertex values
-  double_array orientationVertex(orientationSize);
-  double_array jacobianVertex(spaceDim*spaceDim);
-  int_array indicesL(spaceDim);
-  int_array indicesN(spaceDim);
-  int_array indicesP(spaceDim);
-  int_array indicesRel(spaceDim);
-  for (int i=0; i < spaceDim; ++i)
-    indicesRel[i] = i;
-
   // Get sections
-  const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
-  assert(!solutionSection.isNull());
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
 
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
+  const ALE::Obj<RealSection>& solnSection = fields->solution().section();
+  assert(!solnSection.isNull());
 
+  // Get fault information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
       sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
-        solutionSection);
+        solnSection);
   assert(!globalOrder.isNull());
 
+  // Allocate vectors for vertex values
+  scalar_array jacobianVertex(spaceDim*spaceDim);
+  int_array indicesL(spaceDim);
+  int_array indicesN(spaceDim);
+  int_array indicesP(spaceDim);
+  int_array indicesRel(spaceDim);
+  for (int i=0; i < spaceDim; ++i)
+    indicesRel[i] = i;
+
+  // Get sparse matrix
   const PetscMat jacobianMatrix = jacobian->matrix();
   assert(0 != jacobianMatrix);
 
@@ -435,55 +434,51 @@
     _logger->eventBegin(restrictEvent);
 #endif
 
-    // Get orientations at fault cell's vertices.
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0], orientationVertex.size());
+    // Get area associated with fault vertex.
+    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
 
     // Set global order indices
     indicesL = indicesRel + globalOrder->getIndex(v_lagrange);
     indicesN = indicesRel + globalOrder->getIndex(v_negative);
     indicesP = indicesRel + globalOrder->getIndex(v_positive);
-    assert(0 == solutionSection->getConstraintDimension(v_negative));
-    assert(0 == solutionSection->getConstraintDimension(v_positive));
+    assert(0 == solnSection->getConstraintDimension(v_negative));
+    assert(0 == solnSection->getConstraintDimension(v_positive));
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
     _logger->eventBegin(updateEvent);
 #endif
 
-    // Values associated with [C]
+    // Set diagonal entries of Jacobian at positive vertex to area
+    // associated with vertex.
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      jacobianVertex[iDim*spaceDim+iDim] = areaVertex;
+
     // Values at positive vertex, entry L,P in Jacobian
-    jacobianVertex = orientationVertex;
     MatSetValues(jacobianMatrix,
                  indicesL.size(), &indicesL[0],
                  indicesP.size(), &indicesP[0],
                  &jacobianVertex[0],
                  ADD_VALUES);
 
-    // Values at negative vertex, entry L,N in Jacobian
-    jacobianVertex *= -1.0;
+    // Values at positive vertex, entry P,L in Jacobian
     MatSetValues(jacobianMatrix,
+                 indicesP.size(), &indicesP[0],
                  indicesL.size(), &indicesL[0],
-                 indicesN.size(), &indicesN[0],
                  &jacobianVertex[0],
                  ADD_VALUES);
 
-    // Values associated with [C]^T
-    // Transpose orientation matrix
-    jacobianVertex = 0.0;
-    for (int iDim=0; iDim < spaceDim; ++iDim)
-      for (int jDim=0; jDim < spaceDim; ++jDim)
-        jacobianVertex[iDim*spaceDim+jDim] = 
-	  orientationVertex[jDim*spaceDim+iDim];
-
-    // Values at positive vertex, entry P,L in Jacobian
+    // Values at negative vertex, entry L,N in Jacobian
+    jacobianVertex *= -1.0;
     MatSetValues(jacobianMatrix,
-                 indicesP.size(), &indicesP[0],
                  indicesL.size(), &indicesL[0],
+                 indicesN.size(), &indicesN[0],
                  &jacobianVertex[0],
                  ADD_VALUES);
 
-    // Values at negative vertex, entry L,N in Jacobian
-    jacobianVertex *= -1.0;
+    // Values at negative vertex, entry N,L in Jacobian
     MatSetValues(jacobianMatrix,
                  indicesN.size(), &indicesN[0],
                  indicesL.size(), &indicesL[0],
@@ -500,14 +495,13 @@
                  ADD_VALUES);
 
 #if defined(DETAILED_EVENT_LOGGING)
-    PetscLogFlops(spaceDim*spaceDim*2);
-    _logger->eventBegin(updateEvent);
+    _logger->eventEnd(updateEvent);
 #endif
 
   } // for
+  PetscLogFlops(numVertices*spaceDim*2);
 
 #if !defined(DETAILED_EVENT_LOGGING)
-  PetscLogFlops(numVertices*(spaceDim*spaceDim*2));
   _logger->eventEnd(computeEvent);
 #endif
 
@@ -517,7 +511,6 @@
   sieveMesh->getSendOverlap()->view("Send domain overlap");
   sieveMesh->getRecvOverlap()->view("Receive domain overlap");
 #endif
-
 } // integrateJacobian
 
 // ----------------------------------------------------------------------
@@ -525,7 +518,7 @@
 void
 pylith::faults::FaultCohesiveLagrange::integrateJacobian(
 	                  topology::Field<topology::Mesh>* jacobian,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateJacobian
   assert(0 != jacobian);
@@ -547,7 +540,7 @@
   // multipliers as part of the solve.
 
   const int spaceDim = _quadrature->spaceDim();
-  double_array jacobianVertex(spaceDim);
+  scalar_array jacobianVertex(spaceDim);
   jacobianVertex = 1.0;
   const ALE::Obj<RealSection>& jacobianSection = jacobian->section();
   assert(!jacobianSection.isNull());
@@ -571,12 +564,13 @@
     if (!globalOrder->isLocal(v_lagrange))
       continue;
 
-    assert(jacobianSection->getFiberDimension(v_lagrange) == spaceDim);
-
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventBegin(updateEvent);
 #endif
+
+    assert(jacobianSection->getFiberDimension(v_lagrange) == spaceDim);
     jacobianSection->updatePoint(v_lagrange, &jacobianVertex[0]);
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(updateEvent);
 #endif
@@ -605,44 +599,22 @@
   assert(0 != _fields);
   assert(0 != _logger);
 
-  /** We have J = [A C^T]
-   *              [C   0]
+  /** We have A = [K L^T]
+   *              [L   0]
    *
-   * We want to approximate -( C A^(-1) C^T )
+   * Compute Pmat = -( [L] [K]^(-1) [L]^T ) using the diagonal of K to
+   * approximate [K]^(-1).
    *
-   * Consider Lagrange vertex L that constrains the relative
-   * displacement between vertex N on the negative side of the fault
-   * and vertex P on the positive side of the fault.
+   * Decompose [K] into [Kn] and [Kp], where [Kn] contains the terms
+   * for vertices on the negative side of the fault and [Kp] contains
+   * the terms for vertices on the positive side of the fault.
    *
-   * If we approximate A(-1) by 1/diag(A), then we can write 
-   * C A^(-1) C^T for a 2-D case as
+   * Pmat = L_{ik} (1.0/Kn_{kk} + 1.0/Kp{kk}) L_{ik}
    *
-   * [-R00 -R01  R00 R01][Ai_nx 0      0     0    ][-R00 -R10]
-   * [-R10 -R11  R10 R11][      Ai_ny  0     0    ][-R01 -R11]
-   *                     [      0      Ai_px 0    ][ R00  R10]
-   *                     [                   Ai_py][ R01  R11]
-   *
-   * where
-   *
-   * Ai_nx is the inverse of the diag(A) for DOF x of vertex N
-   * Ai_ny is the inverse of the diag(A) for DOF y of vertex N
-   * Ai_px is the inverse of the diag(A) for DOF x of vertex P
-   * Ai_py is the inverse of the diag(A) for DOF y of vertex P
-   *
-   * If Ai_nx == Ai_ny and Ai_px == Ai_py, then the result is
-   * diagonal. Otherwise, the off-diagonal terms will be nonzero,
-   * but we expect them to be small. Since we already approximate
-   * the inverse of A by the inverse of the diagonal, we drop the
-   * off-diagonal terms of C A^(-1) C^T:
-   *
-   * Term for DOF x of vertex L is: 
-   * -(R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py))
-   *
-   * Term for DOF y of vertex L is: 
-   * -(R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py))
+   * Because we use quadrature points located at the vertices,
+   * L_{ii} = area, L_{ij} = 0 if i != j
    */
 
-#if 1 // DIAGONAL PRECONDITIONER
   const int setupEvent = _logger->eventId("FaPr setup");
   const int computeEvent = _logger->eventId("FaPr compute");
   const int restrictEvent = _logger->eventId("FaPr restrict");
@@ -652,15 +624,13 @@
 
   // Get cell information and setup storage for cell data
   const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim * spaceDim;
 
   // Allocate vectors for vertex values
-  double_array orientationVertex(orientationSize);
-  double_array jacobianVertexP(spaceDim*spaceDim);
-  double_array jacobianVertexN(spaceDim*spaceDim);
-  double_array jacobianInvVertexP(spaceDim);
-  double_array jacobianInvVertexN(spaceDim);
-  double_array precondVertexL(spaceDim);
+  scalar_array jacobianVertexP(spaceDim*spaceDim);
+  scalar_array jacobianVertexN(spaceDim*spaceDim);
+  scalar_array jacobianInvVertexP(spaceDim);
+  scalar_array jacobianInvVertexN(spaceDim);
+  scalar_array precondVertexL(spaceDim);
   int_array indicesN(spaceDim);
   int_array indicesP(spaceDim);
   int_array indicesRel(spaceDim);
@@ -668,13 +638,12 @@
     indicesRel[i] = i;
 
   // Get sections
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
+
   const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
   assert(!solutionSection.isNull());
 
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
-
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
@@ -711,10 +680,12 @@
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventBegin(restrictEvent);
 #endif
-    // Get orientations at fault cell's vertices.
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0],
-				      orientationVertex.size());
 
+    // Get area associated with fault vertex.
+    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
+
     indicesN = 
       indicesRel + indicesMatToSubmat[globalOrder->getIndex(v_negative)];
     err = MatGetValues(jacobianNP,
@@ -739,18 +710,13 @@
       jacobianInvVertexP[iDim] = 1.0/jacobianVertexP[iDim*spaceDim+iDim];
     } // for
 
-    // Compute -[C] [Adiag]^(-1) [C]^T
-    //   C_{ij}          = orientationVertex[i*spaceDim+j]
-    //   C^T_{ij}        = orientationVertex[j*spaceDim+i]
+    // Compute -[L] [Adiag]^(-1) [L]^T
+    //   L_{ii} = L^T{ii} = areaVertex
     //   Adiag^{-1}_{ii} = jacobianInvVertexN[i] + jacobianInvVertexP[i]
-    //  \sum_{j} C_{ij} Adiag^{-1}_{jj} C^T_{ji}
     precondVertexL = 0.0;
-    for (int kDim=0; kDim < spaceDim; ++kDim) {
-      for (int iDim=0; iDim < spaceDim; ++iDim)
-	precondVertexL[kDim] -= 
-          orientationVertex[kDim*spaceDim+iDim] * 
-          orientationVertex[kDim*spaceDim+iDim] * 
-          (jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      precondVertexL[iDim] -= areaVertex * areaVertex * 
+	(jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
     } // for
     
 
@@ -759,7 +725,8 @@
     _logger->eventBegin(updateEvent);
 #endif
 
-    // Set global preconditioner index associated with Lagrange constraint vertex.
+    // Set global preconditioner index associated with Lagrange
+    // constraint vertex.
     const int indexLprecond = lagrangeGlobalOrder->getIndex(v_lagrange);
     
     // Set diagonal entries in preconditioned matrix.
@@ -769,371 +736,25 @@
 		  indexLprecond + iDim,
 		  precondVertexL[iDim],
 		  INSERT_VALUES);
+
+#if 0 // DEBUGGING
+    std::cout << "1/P_vertex " << *v_lagrange << std::endl;
+    for(int iDim = 0; iDim < spaceDim; ++iDim) {
+      std::cout << "  " << precondVertexL[iDim] << std::endl;
+    } // for
+#endif
+
     
 #if defined(DETAILED_EVENT_LOGGING)
-    PetscLogFlops(spaceDim*spaceDim*4);
     _logger->eventEnd(updateEvent);
 #endif
   } // for
   err = MatDestroy(&jacobianNP); CHECK_PETSC_ERROR(err);
+  PetscLogFlops(numVertices*spaceDim*6);
 
-
-#else // FULL PRECONDITIONER
-
-  // Compute -( [C] [A]^(-1) [C]^T ) for cell.
-  //
-  // numBasis = number of corners in fault cell
-  // spaceDim = spatial dimension
-  //
-  // For the cell, [A] is 2*numBasis*spaceDim x 2*numBasis*spaceDim,
-  // [C] is numBasis*spaceDim x 2*numBasis*spaceDim
-  //
-  // Decompose [A] into [An] and [Ap], where [An] contains the terms
-  // for vertices on the negative side of the fault and [Ap] contains
-  // the terms for vertices on the positive side of the fault.
-  //
-  // [An] and [Ap] are numBasis*spaceDim x numBasis*spaceDim
-  // 
-  // Let [CAC] = [C] [A]^(-1) [C]^T.
-  //
-  // CAiC_kl = Cij Ai_jk C_lk
-  //
-  // Cij: iLagrange, iDim, jBasis, jDim
-  // Ai_jk: jBasis, jDim, kBasis, kDim
-  // C_lk: lLagrange, lDim, kBasis, kDim
-  
-
-  const int setupEvent = _logger->eventId("FaPr setup");
-  const int computeEvent = _logger->eventId("FaPr compute");
-  const int restrictEvent = _logger->eventId("FaPr restrict");
-  const int updateEvent = _logger->eventId("FaPr update");
-
-  _logger->eventBegin(setupEvent);
-
-  // Get cell information and setup storage for cell data
-  const int spaceDim = _quadrature->spaceDim();
-  const int numBasis = _quadrature->numBasis();
-  const int orientationSize = spaceDim * spaceDim;
-  const int nrowsF = numBasis*spaceDim; // number of rows/cols in fault matrix
-
-  // Size of fault preconditioner matrix for cell
-  const int matrixSizeF = nrowsF * nrowsF;
-  PetscBLASInt workSize = 6*nrowsF;
-
-  // Allocate vectors for vertex values
-  double_array preconditionerCell(matrixSizeF);
-  int_array indicesN(nrowsF);
-  int_array indicesP(nrowsF);
-  int_array indicesLagrange(nrowsF);
-  double_array jacobianCellP(matrixSizeF);
-  double_array jacobianCellN(matrixSizeF);
-  double_array jacobianInvCellP(matrixSizeF);
-  double_array jacobianInvCellN(matrixSizeF);
-  double_array UN(matrixSizeF);
-  double_array UP(matrixSizeF);
-  double_array VNt(matrixSizeF);
-  double_array VPt(matrixSizeF);
-  double_array singularValuesN(nrowsF);
-  double_array singularValuesP(nrowsF);
-  double_array work(workSize);
-
-  // Get sections
-  const ALE::Obj<RealSection>& solutionSection = fields->solution().section();
-  assert(!solutionSection.isNull());
-
-  double_array orientationCell(numBasis*orientationSize);
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
-  RestrictVisitor orientationVisitor(*orientationSection,
-				     orientationCell.size(), 
-				     &orientationCell[0]);
-
-  const int numConstraintVert = numBasis;
-  const int numCorners = 3 * numConstraintVert; // cohesive cell
-
-  // Get cohesive cells
-  const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
-  assert(!sieveMesh.isNull());
-  const ALE::Obj<SieveMesh::order_type>& lagrangeGlobalOrder =
-      sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "faultDefault",
-        solutionSection, spaceDim);
-  assert(!lagrangeGlobalOrder.isNull());
-  const ALE::Obj<SieveMesh::label_sequence>& cellsCohesive =
-    sieveMesh->getLabelStratum("material-id", id());
-  assert(!cellsCohesive.isNull());
-  const SieveMesh::label_sequence::iterator cellsCohesiveBegin =
-    cellsCohesive->begin();
-  const SieveMesh::label_sequence::iterator cellsCohesiveEnd =
-    cellsCohesive->end();
-
-  const PetscMat jacobianMatrix = jacobian->matrix();
-  assert(0 != jacobianMatrix);
-  const ALE::Obj<SieveMesh::order_type>& globalOrder =
-    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
-					    solutionSection);
-  assert(!globalOrder.isNull());
-  // We would need to request unique points here if we had an interpolated mesh
-  IndicesVisitor jacobianVisitor(*solutionSection, *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
-
-
-
-  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
-  assert(!sieve.isNull());
-  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve,
-      (size_t) pow(sieve->getMaxConeSize(), std::max(0, sieveMesh->depth())));
-
-
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
-  assert(!faultSieveMesh.isNull());
-  const ALE::Obj<SieveSubMesh::sieve_type>& faultSieve = faultSieveMesh->getSieve();
-  assert(!faultSieve.isNull());
-  ALE::ISieveVisitor::NConeRetriever<SieveSubMesh::sieve_type> fncV(*faultSieve,
-      (size_t) pow(faultSieve->getMaxConeSize(), std::max(0, faultSieveMesh->depth())));
-
-  _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
-  _logger->eventBegin(computeEvent);
-#endif
-
-  for (SieveMesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
-       c_iter != cellsCohesiveEnd;
-       ++c_iter) {
-    // Get cone for cohesive cell
-    ncV.clear();
-    ALE::ISieveTraversal<SieveMesh::sieve_type>::orientedClosure(*sieve,
-								 *c_iter, ncV);
-    const int coneSize = ncV.getSize();
-    assert(coneSize == numCorners);
-    const Mesh::point_type *cohesiveCone = ncV.getPoints();
-    assert(0 != cohesiveCone);
-
-    // Get cone for corresponding fault cell
-    const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
-    fncV.clear();
-    ALE::ISieveTraversal<SieveMesh::sieve_type>::orientedClosure(*faultSieve,
-								 c_fault, fncV);
-    const int coneSizeFault = fncV.getSize();
-    assert(coneSizeFault == numBasis);
-    const Mesh::point_type *faultCone = fncV.getPoints();
-    assert(0 != faultCone);
-
-    jacobianCellP = 0.0;
-    jacobianCellN = 0.0;
-    preconditionerCell = 0.0;
-
-#if defined(DETAILED_EVENT_LOGGING)
-    _logger->eventBegin(restrictEvent);
-#endif
-
-    // Get indices
-    for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
-      // constraint vertex k
-      const int v_negative = cohesiveCone[0*numBasis+iBasis];
-      const int v_positive = cohesiveCone[1*numBasis+iBasis];
-      const int v_lagrange = cohesiveCone[2*numBasis+iBasis];
-      
-      for (int iDim=0, iB=iBasis*spaceDim; iDim < spaceDim; ++iDim) {
-	if (globalOrder->isLocal(v_negative))
-	  indicesN[iB+iDim] = globalOrder->getIndex(v_negative) + iDim;
-	else
-	  indicesN[iB+iDim] = -1;
-	if (globalOrder->isLocal(v_positive))
-	  indicesP[iB+iDim] = globalOrder->getIndex(v_positive) + iDim;
-	else
-	  indicesP[iB+iDim] = -1;
-	if (globalOrder->isLocal(v_lagrange))
-	  indicesLagrange[iB+iDim] = lagrangeGlobalOrder->getIndex(v_lagrange) + iDim;
-	else
-	  indicesLagrange[iB+iDim] = -1;
-
-	// Set matrix diagonal entries to 1.0 (used when vertex is not local).
-	jacobianCellN[iB+iDim] = 1.0;
-	jacobianCellP[iB+iDim] = 1.0;
-      } // for
-    } // for
-    
-    // Get values from Jacobian matrix.
-    PetscErrorCode err = 0;
-    err = MatGetValues(jacobianMatrix, 
-		       indicesN.size(), &indicesN[0],
-		       indicesN.size(), &indicesN[0],
-		       &jacobianCellN[0]);
-    CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-    
-    err = MatGetValues(jacobianMatrix, 
-		       indicesP.size(), &indicesP[0],
-		       indicesP.size(), &indicesP[0],
-		       &jacobianCellP[0]);
-    CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-   
-    // Get orientation at fault vertices.
-    orientationVisitor.clear();
-    faultSieveMesh->restrictClosure(c_fault, orientationVisitor);
-
-
-#if defined(DETAILED_EVENT_LOGGING)
-    _logger->eventEnd(restrictEvent);
-    _logger->eventBegin(computeEvent);
-#endif
-
-    // Invert jacobianCellN and jacobianCellP, result goes in
-    // jacobianInvCellN and jacobianInvCellP if need separate place
-    // for result.
-    PetscBLASInt elemRows = nrowsF;
-    PetscScalar  one      = 1.0;
-    PetscBLASInt berr;
-
-#if 0
-    std::cout << "AN_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << jacobianCellN[i*nrowsF+j];
-      }
-      std::cout << std::endl;
-    }
-#endif
-
-    // Transpose matrices so we can call LAPACK
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < i; ++j) {
-        PetscInt    k  = i*nrowsF+j;
-        PetscInt    kp = j*nrowsF+i;
-        PetscScalar tmp;
-        tmp               = jacobianCellN[k];
-        jacobianCellN[k]  = jacobianCellN[kp];
-        jacobianCellN[kp] = tmp;
-        tmp               = jacobianCellP[k];
-        jacobianCellP[k]  = jacobianCellP[kp];
-        jacobianCellP[kp] = tmp;
-      }
-    }
-    LAPACKgesvd_("A", "A", &elemRows, &elemRows, &jacobianCellN[0], &elemRows, &singularValuesN[0], &UN[0], &elemRows, &VNt[0], &elemRows, &work[0], &workSize, &berr);
-    CHECK_PETSC_ERROR_MSG(berr, "Inversion of negative-side element matrix failed.");
-    LAPACKgesvd_("A", "A", &elemRows, &elemRows, &jacobianCellP[0], &elemRows, &singularValuesP[0], &UP[0], &elemRows, &VPt[0], &elemRows, &work[0], &workSize, &berr);
-    CHECK_PETSC_ERROR_MSG(berr, "Inversion of positive-side element matrix failed.");
-
-#if 0
-    for(int i = 0; i < nrowsF; ++i) {
-      std::cout << "sigmaN["<<i<<"]: " << singularValuesN[i] << " sigmaP["<<i<<"]: " << singularValuesP[i] << std::endl;
-    }
-    std::cout << "UN_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << UN[j*nrowsF+i];
-      }
-      std::cout << std::endl;
-    }
-    std::cout << "VNt_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << VNt[j*nrowsF+i];
-      }
-      std::cout << std::endl;
-    }
-#endif
-
-    // Row scale Vt by the inverse of the singular values
-    for(int i = 0; i < nrowsF; ++i) {
-      const PetscReal invN = singularValuesN[i] > 1.0e-10 ? 1.0/singularValuesN[i] : 0.0;
-      const PetscReal invP = singularValuesP[i] > 1.0e-10 ? 1.0/singularValuesP[i] : 0.0;
-
-      for(int j = 0; j < nrowsF; ++j) {
-        VNt[j*nrowsF+i] *= invN;
-        VPt[j*nrowsF+i] *= invP;
-      }
-    }
-    BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UN[0], &elemRows, &VNt[0], &elemRows, &one, &jacobianInvCellN[0], &elemRows);
-    BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UP[0], &elemRows, &VPt[0], &elemRows, &one, &jacobianInvCellP[0], &elemRows);
-
-    // Transpose matrices from LAPACK
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < i; ++j) {
-        PetscInt    k  = i*nrowsF+j;
-        PetscInt    kp = j*nrowsF+i;
-        PetscScalar tmp;
-        tmp                  = jacobianInvCellN[k];
-        jacobianInvCellN[k]  = jacobianInvCellN[kp];
-        jacobianInvCellN[kp] = tmp;
-        tmp                  = jacobianInvCellP[k];
-        jacobianInvCellP[k]  = jacobianInvCellP[kp];
-        jacobianInvCellP[kp] = tmp;
-      }
-    }
-
-    // Combine Jacbian inverse terms with result in jacobianInvCellN
-    jacobianInvCellN += jacobianInvCellP;
-
-    for (int iLagrange=0; iLagrange < numBasis; ++iLagrange) {
-      // Exploit structure of C in matrix multiplication.
-      // C_ij Ai_jk C_lk - Structure of C means j == i;
-      const int jBasis = iLagrange;
-      
-      for (int lLagrange=0; lLagrange < numBasis; ++lLagrange) {
-	// Exploit structure of C in matrix multiplication.
-	// -C_ij Ai_jk C_lk - Structure of C means k == l;
-	const int kBasis = lLagrange;
-
-	for (int iDim=0; iDim < spaceDim; ++iDim) {
-	  const int iL = iLagrange*spaceDim + iDim;
-
-	  for (int lDim=0; lDim < spaceDim; ++lDim) {
-	    const int lL = lLagrange*spaceDim + lDim;
-
-	    for (int jDim=0; jDim < spaceDim; ++jDim) {
-	      const int jB = jBasis*spaceDim + jDim;
-
-	      for (int kDim=0; kDim < spaceDim; ++kDim) {
-		const int kB = kBasis*spaceDim + kDim;
-
-		preconditionerCell[iL*nrowsF+lL] -= 
-		  orientationCell[iLagrange*orientationSize+iDim*spaceDim+jDim] *
-		  jacobianInvCellN[jB*nrowsF+kB] *
-		  orientationCell[lLagrange*orientationSize+kDim*spaceDim+lDim];
-
-	      } // for
-	    } // for
-	  } // for
-	} // for
-      } // for
-    } // for
-
-#if 0
-    std::cout << "1/P_cell " << *c_iter << std::endl;
-    for(int i = 0; i < nrowsF; ++i) {
-      for(int j = 0; j < nrowsF; ++j) {
-        std::cout << "  " << preconditionerCell[i*nrowsF+j];
-      }
-      std::cout << std::endl;
-    }
-#endif
-
-#if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
-    _logger->eventBegin(updateEvent);
 #endif
-
-    err = MatSetValues(*precondMatrix,
-                 indicesLagrange.size(), &indicesLagrange[0],
-                 indicesLagrange.size(), &indicesLagrange[0],
-                 &preconditionerCell[0],
-                 ADD_VALUES);
-    CHECK_PETSC_ERROR_MSG(err, "Setting values in fault preconditioner failed.");
-
-#if defined(DETAILED_EVENT_LOGGING)
-    _logger->eventBegin(updateEvent);
-#endif
-
-  } // for
-
-#if !defined(DETAILED_EVENT_LOGGING)
-  _logger->eventEnd(computeEvent);
-#endif
-
-#endif
-
 } // calcPreconditioner
 
 // ----------------------------------------------------------------------
@@ -1144,28 +765,27 @@
                                                         const topology::Field<
 							topology::Mesh>& jacobian)
 { // adjustSolnLumped
-  /// Member prototype for _adjustSolnLumpedXD()
-  typedef void (pylith::faults::FaultCohesiveLagrange::*adjustSolnLumped_fn_type)
-    (double_array*, double_array*, double_array*,
-     const double_array&, const double_array&, 
-     const double_array&, const double_array&, 
-     const double_array&, const double_array&, 
-     const double_array&, const double_array&);
-
   assert(0 != fields);
   assert(0 != _quadrature);
 
-  // Cohesive cells with conventional vertices i and j, and constraint
-  // vertex k require 2 adjustments to the solution:
+  // Cohesive cells with conventional vertices N and P, and constraint
+  // vertex L require 2 adjustments to the solution:
   //
-  //   * DOF k: Compute increment in Lagrange multipliers
-  //            dl_k = S^{-1} (-C_ki (A_i^{-1} r_i - C_kj A_j^{-1} r_j + u_i - u_j) - d_k)
-  //            S = C_ki (A_i^{-1} + A_j^{-1}) C_ki^T
+  //   * DOF L: Compute increment in Lagrange multipliers
   //
+  //     d\vec{l}_p = \tensor{S}^{-1} \cdot (-\vec{r}_p^{*} + \tensor{L}_p 
+  //                   \cdot (d\vec{u}_{n+}^* - d\vec{u}_{n-}^*))
+  //     \tensor{S} = \tensor{L}_p \cdot 
+  //                   (\tensor{K}_{n+n+}{-1} + \tensor{K}_{n-n-})
+  //                   \cdot \tensor{L}_p^T
+  //
   //   * DOF i and j: Adjust displacement increment (solution) to create slip
   //     consistent with Lagrange multiplier constraints
-  //            du_i = +A_i^-1 C_ki^T dlk
-  //            du_j = -A_j^-1 C_kj^T dlk
+  //
+  //     d\vec{u}_{n+} = d\vec{u}_{n+}^{*} - \tensor{K}_{n+n+}^{-1} \cdot 
+  //                     \tensor{L}_p^T \cdot d\vec{l}_p
+  //     d\vec{u}_{n-} = d\vec{u}_{n-}^{*} + \tensor{K}_{n-n-}^{-1} \cdot 
+  //                     \tensor{L}_p^T \cdot d\vec{l}_p
 
   const int setupEvent = _logger->eventId("FaAS setup");
   const int geometryEvent = _logger->eventId("FaAS geometry");
@@ -1177,37 +797,21 @@
 
   // Get cell information and setup storage for cell data
   const int spaceDim = _quadrature->spaceDim();
-  const int orientationSize = spaceDim * spaceDim;
 
   // Get section information
-  double_array orientationVertex(orientationSize);
-  const ALE::Obj<RealSection>& orientationSection =
-      _fields->get("orientation").section();
-  assert(!orientationSection.isNull());
+  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
+  assert(!areaSection.isNull());
 
-  double_array slipVertex(spaceDim);
-  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
-  assert(!slipSection.isNull());
-
-  double_array jacobianVertexN(spaceDim);
-  double_array jacobianVertexP(spaceDim);
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   assert(!jacobianSection.isNull());
 
-  double_array residualVertexN(spaceDim);
-  double_array residualVertexP(spaceDim);
   const ALE::Obj<RealSection>& residualSection =
       fields->get("residual").section();
   assert(!residualSection.isNull());
 
-  double_array dispTVertexN(spaceDim);
-  double_array dispTVertexP(spaceDim);
-  const ALE::Obj<RealSection>& dispTSection = fields->get("disp(t)").section();
-  assert(!dispTSection.isNull());
-
-  double_array dispTIncrVertexN(spaceDim);
-  double_array dispTIncrVertexP(spaceDim);
-  double_array lagrangeTIncrVertex(spaceDim);
+  scalar_array dispTIncrVertexN(spaceDim);
+  scalar_array dispTIncrVertexP(spaceDim);
+  scalar_array dispTIncrVertexL(spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection = fields->get(
     "dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -1219,29 +823,10 @@
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::order_type>& globalOrder =
-    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", jacobianSection);
+    sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", 
+					    jacobianSection);
   assert(!globalOrder.isNull());
 
-  adjustSolnLumped_fn_type adjustSolnLumpedFn;
-  switch (spaceDim) { // switch
-  case 1:
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped1D;
-    break;
-  case 2: 
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped2D;
-    break;
-  case 3:
-    adjustSolnLumpedFn = 
-      &pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped3D;
-    break;
-  default :
-    assert(0);
-    throw std::logic_error("Unknown spatial dimension in "
-			   "FaultCohesiveLagrange::adjustSolnLumped.");
-  } // switch
-
   _logger->eventEnd(setupEvent);
 
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -1263,44 +848,61 @@
     _logger->eventBegin(restrictEvent);
 #endif
 
-    // Get orientations at fault cell's vertices.
-    orientationSection->restrictPoint(v_fault, &orientationVertex[0],
-				      orientationVertex.size());
-
-    // Get slip at fault cell's vertices.
-    slipSection->restrictPoint(v_fault, &slipVertex[0], slipVertex.size());
-
     // Get residual at cohesive cell's vertices.
-    residualSection->restrictPoint(v_negative, &residualVertexN[0],
-			   residualVertexN.size());
-    residualSection->restrictPoint(v_positive, &residualVertexP[0], 
-				   residualVertexP.size());
-    
+    assert(spaceDim == residualSection->getFiberDimension(v_lagrange));
+    const PylithScalar* residualVertexL = residualSection->restrictPoint(v_lagrange);
+    assert(residualVertexL);
+
     // Get jacobian at cohesive cell's vertices.
-    jacobianSection->restrictPoint(v_negative, &jacobianVertexN[0], 
-				   jacobianVertexN.size());
-    jacobianSection->restrictPoint(v_positive, &jacobianVertexP[0], 
-				   jacobianVertexP.size());
+    assert(spaceDim == jacobianSection->getFiberDimension(v_negative));
+    const PylithScalar* jacobianVertexN = jacobianSection->restrictPoint(v_negative);
+    assert(jacobianVertexN);
 
-    // Get disp(t) at cohesive cell's vertices.
-    dispTSection->restrictPoint(v_negative, &dispTVertexN[0],
-				dispTVertexN.size());
-    dispTSection->restrictPoint(v_positive, &dispTVertexP[0],
-				dispTVertexP.size());
+    assert(spaceDim == jacobianSection->getFiberDimension(v_positive));
+    const PylithScalar* jacobianVertexP = jacobianSection->restrictPoint(v_positive);
+    assert(jacobianVertexP);
 
+    // Get area at fault vertex.
+    assert(1 == areaSection->getFiberDimension(v_fault));
+    assert(areaSection->restrictPoint(v_fault));
+    const PylithScalar areaVertex = *areaSection->restrictPoint(v_fault);
+    assert(areaVertex > 0.0);
+
+    // Get dispIncr(t) at vertices.
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_negative));
+    dispTIncrSection->restrictPoint(v_negative, &dispTIncrVertexN[0],
+				    dispTIncrVertexN.size());
+
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_positive));
+    dispTIncrSection->restrictPoint(v_positive, &dispTIncrVertexP[0],
+				    dispTIncrVertexP.size());
+
+    assert(spaceDim == dispTIncrSection->getFiberDimension(v_lagrange));
+    dispTIncrSection->restrictPoint(v_lagrange, &dispTIncrVertexL[0],
+				    dispTIncrVertexL.size());
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(restrictEvent);
     _logger->eventBegin(computeEvent);
 #endif
 
-    CALL_MEMBER_FN(*this, 
-		   adjustSolnLumpedFn)(&lagrangeTIncrVertex, 
-				       &dispTIncrVertexN, &dispTIncrVertexP,
-				       slipVertex, orientationVertex, 
-				       dispTVertexN, dispTVertexP,
-				       residualVertexN, residualVertexP,
-				       jacobianVertexN, jacobianVertexP);
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const PylithScalar S = (1.0/jacobianVertexP[iDim] + 1.0/jacobianVertexN[iDim]) *
+	areaVertex * areaVertex;
+      dispTIncrVertexL[iDim] = 1.0/S * 
+	(-residualVertexL[iDim] +
+	 areaVertex * (dispTIncrVertexP[iDim] - dispTIncrVertexN[iDim]));
 
+      assert(jacobianVertexN[iDim] > 0.0);
+      dispTIncrVertexN[iDim] = 
+	+areaVertex / jacobianVertexN[iDim]*dispTIncrVertexL[iDim];
+
+      assert(jacobianVertexP[iDim] > 0.0);
+      dispTIncrVertexP[iDim] = 
+	-areaVertex / jacobianVertexP[iDim]*dispTIncrVertexL[iDim];
+
+    } // for
+
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
     _logger->eventBegin(updateEvent);
@@ -1317,10 +919,10 @@
     dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
 
     // Set Lagrange multiplier value. Value from preliminary solve is
-    // bogus due to artificial diagonal entry of 1.0.
-    assert(lagrangeTIncrVertex.size() == 
+    // bogus due to artificial diagonal entry.
+    assert(dispTIncrVertexL.size() == 
 	   dispTIncrSection->getFiberDimension(v_lagrange));
-    dispTIncrSection->updatePoint(v_lagrange, &lagrangeTIncrVertex[0]);
+    dispTIncrSection->updatePoint(v_lagrange, &dispTIncrVertexL[0]);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(updateEvent);
@@ -1349,6 +951,31 @@
     throw std::runtime_error(msg.str());
   } // if  
 
+  // Verify quadrature scheme is consistent with points collocated
+  // with verties. Expect basis functions to be 1.0 at one quadrature
+  // point and zero at all others.
+  const scalar_array basis = _quadrature->basis();
+  const int numBasis = _quadrature->numBasis();
+  const int numQuadPts = _quadrature->numQuadPts();
+  for (int iQuadPt=0; iQuadPt < numQuadPts; ++iQuadPt) {
+    int nonzero = 0;
+    const PylithScalar tolerance = 1.0e-6;
+    for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+      if (fabs(basis[iQuadPt*numBasis+iBasis]) > tolerance) 
+	++nonzero;
+    } // for
+    if (numBasis != numQuadPts || 1 != nonzero) {
+      std::ostringstream msg;
+      msg << "Quadrature scheme for fault " << label()
+	  << " is incompatible with fault implementation.\n"
+	  << "Expected quadrature points collocated with vertices, so that "
+	  << "basis functions are \n"
+	  << "1.0 at one quadrature point and zero at all other quadrature "
+	  << "points.";
+      throw std::runtime_error(msg.str());
+    } // if
+  } // for
+
   // check compatibility of mesh and quadrature scheme
   const int dimension = mesh.dimension() - 1;
   if (_quadrature->cellDim() != dimension) {
@@ -1460,10 +1087,12 @@
 
   const ALE::Obj<SieveMesh::sieve_type>& sieve = mesh.sieveMesh()->getSieve();
   assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), faultSieveMesh->depth()));
+  assert(closureSize >= 0);
+  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type>
+    ncV(*sieve, closureSize);
 
-  ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve,
-      (size_t) pow(sieve->getMaxConeSize(), std::max(0, sieveMesh->depth())));
-
   for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
       c_iter != cellsEnd;
       ++c_iter, ++f_iter) {
@@ -1547,13 +1176,15 @@
 // ----------------------------------------------------------------------
 // Calculate orientation at fault vertices.
 void
-pylith::faults::FaultCohesiveLagrange::_calcOrientation(const double upDir[3])
+pylith::faults::FaultCohesiveLagrange::_calcOrientation(const PylithScalar upDir[3])
 { // _calcOrientation
   assert(0 != upDir);
   assert(0 != _faultMesh);
   assert(0 != _fields);
 
-  double_array upDirArray(upDir, 3);
+  scalar_array up(3);
+  for (int i=0; i < 3; ++i)
+    up[i] = upDir[i];
 
   // Get vertices in fault mesh.
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
@@ -1570,20 +1201,20 @@
   const int spaceDim = _quadrature->spaceDim();
   const int orientationSize = spaceDim * spaceDim;
   const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
-  const double_array& verticesRef = cellGeometry.vertices();
+  const scalar_array& verticesRef = cellGeometry.vertices();
   const int jacobianSize = (cohesiveDim > 0) ? spaceDim * cohesiveDim : 1;
-  const double_array& quadWts = _quadrature->quadWts();
-  double_array jacobian(jacobianSize);
-  double jacobianDet = 0;
-  double_array orientationVertex(orientationSize);
-  double_array coordinatesCell(numBasis * spaceDim);
-  double_array refCoordsVertex(cohesiveDim);
+  const scalar_array& quadWts = _quadrature->quadWts();
+  scalar_array jacobian(jacobianSize);
+  PylithScalar jacobianDet = 0;
+  scalar_array refCoordsVertex(cohesiveDim);
 
   // Allocate orientation field.
+  scalar_array orientationVertex(orientationSize);
   _fields->add("orientation", "orientation");
   topology::Field<topology::SubMesh>& orientation = _fields->get("orientation");
-  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  orientation.newSection(slip, orientationSize);
+  const topology::Field<topology::SubMesh>& dispRel = 
+    _fields->get("relative disp");
+  orientation.newSection(dispRel, orientationSize);
   const ALE::Obj<RealSection>& orientationSection = orientation.section();
   assert(!orientationSection.isNull());
   // Create subspaces for along-strike, up-dip, and normal directions
@@ -1604,6 +1235,7 @@
   // Compute orientation of fault at constraint vertices
 
   // Get section containing coordinates of vertices
+  scalar_array coordinatesCell(numBasis * spaceDim);
   const ALE::Obj<RealSection>& coordinatesSection =
       faultSieveMesh->getRealSection("coordinates");
   assert(!coordinatesSection.isNull());
@@ -1620,10 +1252,11 @@
 
   const ALE::Obj<SieveSubMesh::sieve_type>& sieve = faultSieveMesh->getSieve();
   assert(!sieve.isNull());
-
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), faultSieveMesh->depth()));
+  assert(closureSize >= 0);
   ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type>
-      ncV(*sieve, (size_t) pow(sieve->getMaxConeSize(), std::max(0,
-        faultSieveMesh->depth())));
+    ncV(*sieve, closureSize);
 
   for (SieveSubMesh::label_sequence::iterator c_iter = cellsBegin; c_iter
       != cellsEnd; ++c_iter) {
@@ -1635,18 +1268,18 @@
     ALE::ISieveTraversal<SieveSubMesh::sieve_type>::orientedClosure(*sieve,
       *c_iter, ncV);
     const int coneSize = ncV.getSize();
-    const SieveSubMesh::point_type *cone = ncV.getPoints();
+    const SieveSubMesh::point_type* cone = ncV.getPoints();
 
-    for (int v = 0; v < coneSize; ++v) {
+    for (int v=0; v < coneSize; ++v) {
       // Compute Jacobian and determinant of Jacobian at vertex
       memcpy(&refCoordsVertex[0], &verticesRef[v * cohesiveDim], cohesiveDim
-          * sizeof(double));
+          * sizeof(PylithScalar));
       cellGeometry.jacobian(&jacobian, &jacobianDet, coordinatesCell,
         refCoordsVertex);
 
       // Compute orientation
       cellGeometry.orientation(&orientationVertex, jacobian, jacobianDet,
-        upDirArray);
+        up);
 
       // Update orientation
       orientationSection->updateAddPoint(cone[v], &orientationVertex[0]);
@@ -1659,7 +1292,7 @@
   orientation.complete();
 
   // Loop over vertices, make orientation information unit magnitude
-  double_array vertexDir(orientationSize);
+  scalar_array vertexDir(orientationSize);
   int count = 0;
   for (SieveSubMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
       != verticesEnd; ++v_iter, ++count) {
@@ -1667,7 +1300,7 @@
     orientationSection->restrictPoint(*v_iter, &orientationVertex[0],
       orientationVertex.size());
     for (int iDim = 0; iDim < spaceDim; ++iDim) {
-      double mag = 0;
+      PylithScalar mag = 0;
       for (int jDim = 0, index = iDim * spaceDim; jDim < spaceDim; ++jDim)
         mag += pow(orientationVertex[index + jDim], 2);
       mag = sqrt(mag);
@@ -1705,11 +1338,11 @@
       &orientationVertex[0], orientationVertex.size());
 
     assert(2 == spaceDim);
-    const double* shearDirVertex = &orientationVertex[0];
-    const double* normalDirVertex = &orientationVertex[2];
-    const double shearDirDot = 
+    const PylithScalar* shearDirVertex = &orientationVertex[0];
+    const PylithScalar* normalDirVertex = &orientationVertex[2];
+    const PylithScalar shearDirDot = 
       upDir[0] * shearDirVertex[0] + upDir[1] * shearDirVertex[1];
-    const double normalDirDot = 
+    const PylithScalar normalDirDot = 
       upDir[0] * normalDirVertex[0] + upDir[1] * normalDirVertex[1];
 
     const int ishear = 0;
@@ -1755,13 +1388,13 @@
       &orientationVertex[0], orientationVertex.size());
 
     assert(3 == spaceDim);
-    const double* dipDirVertex = &orientationVertex[3];
-    const double* normalDirVertex = &orientationVertex[6];
-    const double dipDirDot = 
+    const PylithScalar* dipDirVertex = &orientationVertex[3];
+    const PylithScalar* normalDirVertex = &orientationVertex[6];
+    const PylithScalar dipDirDot = 
       upDir[0]*dipDirVertex[0] + 
       upDir[1]*dipDirVertex[1] + 
       upDir[2]*dipDirVertex[2];
-    const double normalDirDot = 
+    const PylithScalar normalDirDot = 
       upDir[0]*normalDirVertex[0] +
       upDir[1]*normalDirVertex[1] +
       upDir[2]*normalDirVertex[2];
@@ -1807,10 +1440,10 @@
   const int numQuadPts = _quadrature->numQuadPts();
   const int spaceDim = _quadrature->spaceDim();
   const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
-  double jacobianDet = 0;
-  double_array areaCell(numBasis);
+  PylithScalar jacobianDet = 0;
+  scalar_array areaCell(numBasis);
 
   // Get vertices in fault mesh.
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
@@ -1824,16 +1457,17 @@
   // Allocate area field.
   _fields->add("area", "area");
   topology::Field<topology::SubMesh>& area = _fields->get("area");
-  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  area.newSection(slip, 1);
-  area.vectorFieldType(topology::FieldBase::SCALAR);
+  const topology::Field<topology::SubMesh>& dispRel = 
+    _fields->get("relative disp");
+  area.newSection(dispRel, 1);
   area.allocate();
+  area.vectorFieldType(topology::FieldBase::SCALAR);
   area.zero();
   const ALE::Obj<RealSection>& areaSection = area.section();
   assert(!areaSection.isNull());
   UpdateAddVisitor areaVisitor(*areaSection, &areaCell[0]);
 
-  double_array coordinatesCell(numBasis * spaceDim);
+  scalar_array coordinatesCell(numBasis * spaceDim);
   const ALE::Obj<RealSection>& coordinates = faultSieveMesh->getRealSection(
     "coordinates");
   assert(!coordinates.isNull());
@@ -1861,14 +1495,14 @@
 #endif
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute area
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
       for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
-        const double dArea = wt * basis[iQuad * numBasis + iBasis];
+        const PylithScalar dArea = wt * basis[iQuad * numBasis + iBasis];
         areaCell[iBasis] += dArea;
       } // for
     } // for
@@ -1905,29 +1539,32 @@
 
   // Fiber dimension of tractions matches spatial dimension.
   const int spaceDim = _quadrature->spaceDim();
-  double_array tractionsVertex(spaceDim);
+  scalar_array tractionsVertex(spaceDim);
 
   // Get sections.
-  const ALE::Obj<RealSection>& areaSection = _fields->get("area").section();
-  assert(!areaSection.isNull());
   const ALE::Obj<RealSection>& dispTSection = dispT.section();
   assert(!dispTSection.isNull());
 
+  const ALE::Obj<RealSection>& orientationSection =
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
   // Allocate buffer for tractions field (if necessary).
   const ALE::Obj<RealSection>& tractionsSection = tractions->section();
   if (tractionsSection.isNull()) {
     ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
     //logger.stagePush("Fault");
 
-    const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-    tractions->cloneSection(slip);
+    const topology::Field<topology::SubMesh>& dispRel = 
+      _fields->get("relative disp");
+    tractions->cloneSection(dispRel);
 
     //logger.stagePop();
   } // if
   assert(!tractionsSection.isNull());
   tractions->zero();
 
-  const double pressureScale = tractions->scale();
+  const PylithScalar pressureScale = tractions->scale();
 
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
@@ -1935,18 +1572,23 @@
     const int v_fault = _cohesiveVertices[iVertex].fault;
 
     assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
-    assert(spaceDim == tractionsSection->getFiberDimension(v_fault));
-    assert(1 == areaSection->getFiberDimension(v_fault));
-
-    const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
+    const PylithScalar* dispTVertex = dispTSection->restrictPoint(v_lagrange);
     assert(0 != dispTVertex);
-    const double* areaVertex = areaSection->restrictPoint(v_fault);
-    assert(0 != areaVertex);
 
-    for (int i = 0; i < spaceDim; ++i)
-      tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = 
+      orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
 
-    assert(tractionsVertex.size() == tractionsSection->getFiberDimension(v_fault));
+    // Rotate from global coordinate system to fault (orientation)
+    tractionsVertex = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      for (int jDim=0; jDim < spaceDim; ++jDim)
+	tractionsVertex[iDim] += 
+	  orientationVertex[iDim*spaceDim+jDim] * dispTVertex[jDim];
+
+    assert(tractionsVertex.size() == 
+	   tractionsSection->getFiberDimension(v_fault));
     tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
   } // for
 
@@ -1958,6 +1600,112 @@
 } // _calcTractionsChange
 
 // ----------------------------------------------------------------------
+// Transform field from local (fault) coordinate system to
+// global coordinate system.
+void
+pylith::faults::FaultCohesiveLagrange::_faultToGlobal(topology::Field<topology::SubMesh>* field)
+{ // _faultToGlobal
+  assert(field);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  // Fiber dimension of vector field matches spatial dimension.
+  const int spaceDim = _quadrature->spaceDim();
+  scalar_array fieldVertexGlobal(spaceDim);
+
+  // Get sections.
+  const ALE::Obj<RealSection>& fieldSection = field->section();
+  assert(!fieldSection.isNull());
+
+  const ALE::Obj<RealSection>& orientationSection =
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  const int numVertices = _cohesiveVertices.size();
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    const int v_fault = _cohesiveVertices[iVertex].fault;
+
+    assert(spaceDim == fieldSection->getFiberDimension(v_fault));
+    const PylithScalar* fieldVertexFault = fieldSection->restrictPoint(v_fault);
+    assert(fieldVertexFault);
+
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
+
+    // Rotate from fault to global coordinate system (transpose orientation)
+    fieldVertexGlobal = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      for (int jDim=0; jDim < spaceDim; ++jDim)
+	fieldVertexGlobal[iDim] += 
+	  orientationVertex[jDim*spaceDim+iDim] * fieldVertexFault[jDim];
+
+    assert(fieldVertexGlobal.size() == 
+	   fieldSection->getFiberDimension(v_fault));
+    fieldSection->updatePoint(v_fault, &fieldVertexGlobal[0]);
+  } // for
+  
+  PetscLogFlops(numVertices * (2*spaceDim*spaceDim) );
+
+#if 0 // DEBUGGING
+  field->view("FIELD (GLOBAL)");
+#endif
+} // _faultToGlobal
+
+// ----------------------------------------------------------------------
+// Transform field from global coordinate system to local (fault)
+// coordinate system.
+void
+pylith::faults::FaultCohesiveLagrange::_globalToFault(topology::Field<topology::SubMesh>* field)
+{ // _globalToFault
+  assert(field);
+  assert(0 != _faultMesh);
+  assert(0 != _fields);
+
+  // Fiber dimension of vector field matches spatial dimension.
+  const int spaceDim = _quadrature->spaceDim();
+  scalar_array fieldVertexFault(spaceDim);
+
+  // Get sections.
+  const ALE::Obj<RealSection>& fieldSection = field->section();
+  assert(!fieldSection.isNull());
+
+  const ALE::Obj<RealSection>& orientationSection =
+    _fields->get("orientation").section();
+  assert(!orientationSection.isNull());
+
+  const int numVertices = _cohesiveVertices.size();
+  for (int iVertex=0; iVertex < numVertices; ++iVertex) {
+    const int v_fault = _cohesiveVertices[iVertex].fault;
+
+    assert(spaceDim == fieldSection->getFiberDimension(v_fault));
+    const PylithScalar* fieldVertexGlobal = fieldSection->restrictPoint(v_fault);
+    assert(fieldVertexGlobal);
+
+    assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+    const PylithScalar* orientationVertex = orientationSection->restrictPoint(v_fault);
+    assert(orientationVertex);
+
+    // Rotate from global coordinate system to fault (orientation)
+    fieldVertexFault = 0.0;
+    for (int iDim=0; iDim < spaceDim; ++iDim)
+      for (int jDim=0; jDim < spaceDim; ++jDim)
+	fieldVertexFault[iDim] += 
+	  orientationVertex[iDim*spaceDim+jDim] * fieldVertexGlobal[jDim];
+
+    assert(fieldVertexFault.size() == 
+	   fieldSection->getFiberDimension(v_fault));
+    fieldSection->updatePoint(v_fault, &fieldVertexFault[0]);
+  } // for
+  
+  PetscLogFlops(numVertices * (2*spaceDim*spaceDim) );
+
+#if 0 // DEBUGGING
+  field->view("FIELD (FAULT)");
+#endif
+} // _faultToGlobal
+
+// ----------------------------------------------------------------------
 // Allocate buffer for vector field.
 void
 pylith::faults::FaultCohesiveLagrange::_allocateBufferVectorField(void)
@@ -1969,13 +1717,16 @@
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Output");
 
-  // Create vector field; use same shape/chart as slip field.
+  // Create vector field; use same shape/chart as relative
+  // displacement field.
   assert(0 != _faultMesh);
   _fields->add("buffer (vector)", "buffer");
   topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (vector)");
-  const topology::Field<topology::SubMesh>& slip = _fields->get("slip");
-  buffer.cloneSection(slip);
+  const topology::Field<topology::SubMesh>& dispRel = 
+    _fields->get("relative disp");
+  buffer.cloneSection(dispRel);
   buffer.zero();
+  assert(buffer.vectorFieldType() == topology::FieldBase::VECTOR);
 
   logger.stagePop();
 } // _allocateBufferVectorField
@@ -1996,9 +1747,17 @@
   assert(0 != _faultMesh);
   _fields->add("buffer (scalar)", "buffer");
   topology::Field<topology::SubMesh>& buffer = _fields->get("buffer (scalar)");
-  const topology::Field<topology::SubMesh>& area = _fields->get("area");
-  buffer.cloneSection(area);
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
+  assert(!faultSieveMesh.isNull());
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+      faultSieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  buffer.newSection(vertices, 1);
+  buffer.allocate();
+  buffer.vectorFieldType(topology::FieldBase::SCALAR);
+  buffer.scale(1.0);
   buffer.zero();
+  assert(buffer.vectorFieldType() == topology::FieldBase::SCALAR);
 
   logger.stagePop();
 } // _allocateBufferScalarField
@@ -2092,216 +1851,6 @@
 } // _getJacobianSubmatrixNP
 
 // ----------------------------------------------------------------------
-// Adjust solution in lumped formulation to match slip for 1-D.
-void
-pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped1D(
-					  double_array* lagrangeTIncr,
-					  double_array* dispTIncrN,
-					  double_array* dispTIncrP,
-					  const double_array& slip,
-					  const double_array& orientation,
-					  const double_array& dispTN,
-					  const double_array& dispTP,
-					  const double_array& residualN,
-					  const double_array& residualP,
-					  const double_array& jacobianN,
-					  const double_array& jacobianP)
-{ // _adjustSoln1D
-  assert(0 != lagrangeTIncr);
-  assert(0 != dispTIncrN);
-  assert(0 != dispTIncrP);
-
-  assert(jacobianN[0] > 0.0);
-  assert(jacobianP[0] > 0.0);
-  
-  const double Sinv = jacobianN[0] * jacobianP[0]
-    / (jacobianN[0] + jacobianP[0]);
-  
-  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
-  const double Aru = residualN[0] / jacobianN[0]
-    - residualP[0] / jacobianP[0] + dispTN[0]
-    - dispTP[0];
-  
-  // dl_k = D^{-1}( - C_{ki} Aru - d_k)
-  const double Aruslip = -Aru - slip[0];
-  const double dlp = Sinv * Aruslip;
-  
-  // Update displacements at negative vertex
-  (*dispTIncrN)[0] = +1.0 / jacobianN[0] * dlp;
-  
-  // Update displacements at positive vertex
-  (*dispTIncrP)[0] = -1.0 / jacobianP[0] * dlp;
-  
-  // Update Lagrange multiplier.
-  (*lagrangeTIncr)[0] = dlp;
-
-  PetscLogFlops(17);
-} // _adjustSoln1D
-
-// ----------------------------------------------------------------------
-// Adjust solution in lumped formulation to match slip for 2-D.
-void
-pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped2D(
-					  double_array* lagrangeTIncr,
-					  double_array* dispTIncrN,
-					  double_array* dispTIncrP,
-					  const double_array& slip,
-					  const double_array& orientation,
-					  const double_array& dispTN,
-					  const double_array& dispTP,
-					  const double_array& residualN,
-					  const double_array& residualP,
-					  const double_array& jacobianN,
-					  const double_array& jacobianP)
-{ // _adjustSoln2D
-  assert(0 != lagrangeTIncr);
-  assert(0 != dispTIncrN);
-  assert(0 != dispTIncrP);
-
-  assert(jacobianN[0] > 0.0);
-  assert(jacobianN[1] > 0.0);
-  assert(jacobianP[0] > 0.0);
-  assert(jacobianP[1] > 0.0);
-  
-  const double Cpx = orientation[0];
-  const double Cpy = orientation[1];
-  const double Cqx = orientation[2];
-  const double Cqy = orientation[3];
-  
-  // Check to make sure Jacobian is same at all DOF for
-  // vertices i and j (means S is diagonal with equal enties).
-  assert(jacobianN[0] == jacobianN[1]);
-  assert(jacobianP[0] == jacobianP[1]);
-  
-  const double Sinv = jacobianN[0] * jacobianP[0]
-    / (jacobianN[0] + jacobianP[0]);
-  
-  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
-  const double Arux = residualN[0] / jacobianN[0]
-    - residualP[0] / jacobianP[0] + dispTN[0]
-    - dispTP[0];
-  const double Aruy = residualN[1] / jacobianN[1]
-    - residualP[1] / jacobianP[1] + dispTN[1]
-    - dispTP[1];
-  
-  // dl_k = S^{-1}(-C_{ki} Aru - d_k)
-  const double Arup = Cpx * Arux + Cpy * Aruy;
-  const double Aruq = Cqx * Arux + Cqy * Aruy;
-  const double Arupslip = -Arup - slip[0];
-  const double Aruqslip = -Aruq - slip[1];
-  const double dlp = Sinv * Arupslip;
-  const double dlq = Sinv * Aruqslip;
-  
-  const double dlx = Cpx * dlp + Cqx * dlq;
-  const double dly = Cpy * dlp + Cqy * dlq;
-  
-  // Update displacements at negative vertex.
-  (*dispTIncrN)[0] = dlx / jacobianN[0];
-  (*dispTIncrN)[1] = dly / jacobianN[1];
-  
-  // Update displacements at positive vertex.
-  (*dispTIncrP)[0] = -dlx / jacobianP[0];
-  (*dispTIncrP)[1] = -dly / jacobianP[0];
-  
-  // Update Lagrange multiplier.
-  (*lagrangeTIncr)[0] = dlp;
-  (*lagrangeTIncr)[1] = dlq;
-
-    PetscLogFlops(41);
-} // _adjustSoln2D
-
-// ----------------------------------------------------------------------
-// Adjust solution in lumped formulation to match slip for 3-D.
-void
-pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped3D(
-					  double_array* lagrangeTIncr,
-					  double_array* dispTIncrN,
-					  double_array* dispTIncrP,
-					  const double_array& slip,
-					  const double_array& orientation,
-					  const double_array& dispTN,
-					  const double_array& dispTP,
-					  const double_array& residualN,
-					  const double_array& residualP,
-					  const double_array& jacobianN,
-					  const double_array& jacobianP)
-{ // _adjustSoln3D
-  assert(0 != lagrangeTIncr);
-  assert(0 != dispTIncrN);
-  assert(0 != dispTIncrP);
-
-  assert(jacobianN[0] > 0.0);
-  assert(jacobianN[1] > 0.0);
-  assert(jacobianN[2] > 0.0);
-  assert(jacobianP[0] > 0.0);
-  assert(jacobianP[1] > 0.0);
-  assert(jacobianP[2] > 0.0);
-
-  const double Cpx = orientation[0];
-  const double Cpy = orientation[1];
-  const double Cpz = orientation[2];
-  const double Cqx = orientation[3];
-  const double Cqy = orientation[4];
-  const double Cqz = orientation[5];
-  const double Crx = orientation[6];
-  const double Cry = orientation[7];
-  const double Crz = orientation[8];
-
-  // Check to make sure Jacobian is same at all DOF for
-  // vertices i and j (means S is diagonal with equal enties).
-  assert(jacobianN[0] == jacobianN[1] && 
-	 jacobianN[0] == jacobianN[2]);
-  assert(jacobianP[0] == jacobianP[1] && 
-	 jacobianP[0] == jacobianP[2]);
-
-  const double Sinv = jacobianN[0] * jacobianP[0]
-    / (jacobianN[0] + jacobianP[0]);
-
-  // Aru = A_i^{-1} r_i - A_j^{-1} r_j + u_i - u_j
-  const double Arux = residualN[0] / jacobianN[0]
-    - residualP[0] / jacobianP[0] + dispTN[0]
-    - dispTP[0];
-  const double Aruy = residualN[1] / jacobianN[1]
-    - residualP[1] / jacobianP[1] + dispTN[1]
-    - dispTP[1];
-  const double Aruz = residualN[2] / jacobianN[2]
-    - residualP[2] / jacobianP[2] + dispTN[2]
-    - dispTP[2];
-
-  // dl_k = D^{-1}( -C_{ki} Aru - d_k)
-  const double Arup = Cpx * Arux + Cpy * Aruy + Cpz * Aruz;
-  const double Aruq = Cqx * Arux + Cqy * Aruy + Cqz * Aruz;
-  const double Arur = Crx * Arux + Cry * Aruy + Crz * Aruz;
-  const double Arupslip = -Arup - slip[0];
-  const double Aruqslip = -Aruq - slip[1];
-  const double Arurslip = -Arur - slip[2];
-  const double dlp = Sinv * Arupslip;
-  const double dlq = Sinv * Aruqslip;
-  const double dlr = Sinv * Arurslip;
-
-  const double dlx = Cpx * dlp + Cqx * dlq + Crx * dlr;
-  const double dly = Cpy * dlp + Cqy * dlq + Cry * dlr;
-  const double dlz = Cpz * dlp + Cqz * dlq + Crz * dlr;
-
-  // Update displacements at negative vertex.
-  (*dispTIncrN)[0] = dlx / jacobianN[0];
-  (*dispTIncrN)[1] = dly / jacobianN[1];
-  (*dispTIncrN)[2] = dlz / jacobianN[2];
-
-  // Update displacements at positive vertex.
-  (*dispTIncrP)[0] = -dlx / jacobianP[0];
-  (*dispTIncrP)[1] = -dly / jacobianP[1];
-  (*dispTIncrP)[2] = -dlz / jacobianP[2];
-
-  // Update Lagrange multiplier.
-  (*lagrangeTIncr)[0] = dlp;
-  (*lagrangeTIncr)[1] = dlq;
-  (*lagrangeTIncr)[2] = dlr;
-
-  PetscLogFlops(72);
-} // _adjustSoln3D
-
-// ----------------------------------------------------------------------
 // Get cell field associated with integrator.
 const pylith::topology::Field<pylith::topology::SubMesh>&
 pylith::faults::FaultCohesiveLagrange::cellField(const char* name,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveLagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -110,7 +110,7 @@
    */
   virtual
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Split solution field for separate preconditioning.
    *
@@ -127,7 +127,7 @@
    */
   virtual
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-				  const double t,
+				  const PylithScalar t,
 				  topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -139,7 +139,7 @@
    */
   virtual
   void integrateJacobian(topology::Jacobian* jacobian,
-				  const double t,
+				  const PylithScalar t,
 				  topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -151,7 +151,7 @@
    */
   virtual
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-				  const double t,
+				  const PylithScalar t,
 				  topology::SolutionFields* const fields);
 
   /** Compute custom fault precoditioner using Schur complement.
@@ -234,6 +234,20 @@
   void _calcTractionsChange(topology::Field<topology::SubMesh>* tractions,
           const topology::Field<topology::Mesh>& solution);
 
+  /** Transform field from local (fault) coordinate system to
+   * global coordinate system.
+   *
+   * @param field Field to transform.
+   */
+  void _faultToGlobal(topology::Field<topology::SubMesh>* field);
+
+  /** Transform field from global coordinate system to local (fault)
+   * coordinate system.
+   *
+   * @param field Field to transform.
+   */
+  void _globalToFault(topology::Field<topology::SubMesh>* field);
+
   /// Allocate buffer for vector field.
   void _allocateBufferVectorField(void);
 
@@ -256,84 +270,6 @@
 			       const topology::Jacobian& jacobian,
 			       const topology::SolutionFields& fields);
 
-  /** Adjust solution in lumped formulation to match slip for 1-D.
-   *
-   * @param lagrangeIncr Increment in Lagrange multiplier.
-   * @param dispTIncrN Disp increment assoc. w/vertex on - side of fault.
-   * @param dispTIncrP Disp increment assoc. w/vertex on + side of fault.
-   * @param slip Slip associated with Lagrange multipler vertex.
-   * @param orientation Orientation associated with Lagrange multipluer vertex.
-   * @param dispTN Displacement associated with vertex on - side of fault.
-   * @param dispTP Displacement associated with vertex on + side of fault.
-   * @param residualN Residual associated with vertex on - side of fault.
-   * @param residualP Residual associated with vertex on + side of fault.
-   * @param jacobianN Jacobian associated with vertex on - side of fault.
-   * @param jacobianP Jacobian associated with vertex on + side of fault.
-   */
-  void _adjustSolnLumped1D(double_array* lagrangeIncr,
-			   double_array* dispTIncrN,
-			   double_array* dispTIncrP,
-			   const double_array& slip,
-			   const double_array& orientation,
-			   const double_array& dispTN,
-			   const double_array& dispTP,
-			   const double_array& residualN,
-			   const double_array& residualP,
-			   const double_array& jacobianN,
-			   const double_array& jacobianP);
-
-  /** Adjust solution in lumped formulation to match slip for 2-D.
-   *
-   * @param lagrangeIncr Increment in Lagrange multiplier.
-   * @param dispTIncrN Disp increment assoc. w/vertex on - side of fault.
-   * @param dispTIncrP Disp increment assoc. w/vertex on + side of fault.
-   * @param slip Slip associated with Lagrange multipler vertex.
-   * @param orientation Orientation associated with Lagrange multipluer vertex.
-   * @param dispTN Displacement associated with vertex on - side of fault.
-   * @param dispTP Displacement associated with vertex on + side of fault.
-   * @param residualN Residual associated with vertex on - side of fault.
-   * @param residualP Residual associated with vertex on + side of fault.
-   * @param jacobianN Jacobian associated with vertex on - side of fault.
-   * @param jacobianP Jacobian associated with vertex on + side of fault.
-   */
-  void _adjustSolnLumped2D(double_array* lagrangeIncr,
-			   double_array* dispTIncrN,
-			   double_array* dispTIncrP,
-			   const double_array& slip,
-			   const double_array& orientation,
-			   const double_array& dispTN,
-			   const double_array& dispTP,
-			   const double_array& residualN,
-			   const double_array& residualP,
-			   const double_array& jacobianN,
-			   const double_array& jacobianP);
-
-  /** Adjust solution in lumped formulation to match slip for 3-D.
-   *
-   * @param lagrangeIncr Increment in Lagrange multiplier.
-   * @param dispTIncrN Disp increment assoc. w/vertex on - side of fault.
-   * @param dispTIncrP Disp increment assoc. w/vertex on + side of fault.
-   * @param slip Slip associated with Lagrange multipler vertex.
-   * @param orientation Orientation associated with Lagrange multipluer vertex.
-   * @param dispTN Displacement associated with vertex on - side of fault.
-   * @param dispTP Displacement associated with vertex on + side of fault.
-   * @param residualN Residual associated with vertex on - side of fault.
-   * @param residualP Residual associated with vertex on + side of fault.
-   * @param jacobianN Jacobian associated with vertex on - side of fault.
-   * @param jacobianP Jacobian associated with vertex on + side of fault.
-   */
-  void _adjustSolnLumped3D(double_array* lagrangeIncr,
-			   double_array* dispTIncrN,
-			   double_array* dispTIncrP,
-			   const double_array& slip,
-			   const double_array& orientation,
-			   const double_array& dispTN,
-			   const double_array& dispTP,
-			   const double_array& residualN,
-			   const double_array& residualP,
-			   const double_array& jacobianN,
-			   const double_array& jacobianP);
-
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 
@@ -356,7 +292,7 @@
    *   not collinear with fault normal (usually "up" direction but could 
    *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
-  void _calcOrientation(const double upDir[3]);
+  void _calcOrientation(const PylithScalar upDir[3]);
 
   /// Calculate fault area field.
   void _calcArea(void);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 typedef pylith::topology::Field<pylith::topology::SubMesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::SubMesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveSubMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
 // Default constructor.
@@ -71,7 +71,7 @@
 // Initialize fault. Determine orientation and setup boundary
 void
 pylith::faults::FaultCohesiveTract::initialize(const topology::Mesh& mesh,
-					     const double upDir[3])
+					       const PylithScalar upDir[3])
 { // initialize
   assert(0 != upDir);
   assert(0 != _quadrature);
@@ -103,7 +103,7 @@
 void
 pylith::faults::FaultCohesiveTract::integrateResidual(
 			   const topology::Field<topology::Mesh>& residual,
-			   const double t,
+			   const PylithScalar t,
 			   topology::SolutionFields* const fields)
 { // integrateResidual
   throw std::logic_error("FaultCohesiveTract::integrateResidual() not implemented.");
@@ -114,7 +114,7 @@
 void
 pylith::faults::FaultCohesiveTract::integrateJacobian(
 				   topology::Jacobian* jacobian,
-				   const double t,
+				   const PylithScalar t,
 				   topology::SolutionFields* const fields)
 { // integrateJacobian
   throw std::logic_error("FaultCohesiveTract::integrateJacobian() not implemented.");
@@ -196,12 +196,14 @@
 // ----------------------------------------------------------------------
 // Calculate orientation at fault vertices.
 void
-pylith::faults::FaultCohesiveTract::_calcOrientation(const double upDir[3])
+pylith::faults::FaultCohesiveTract::_calcOrientation(const PylithScalar upDir[3])
 { // _calcOrientation
   assert(0 != _fields);
   assert(0 != _quadrature);
 
-  double_array up(upDir, 3);
+  scalar_array up(3);
+  for (int i=0; i < 3; ++i)
+    up[i] = upDir[i];
 
   // Get 'fault' cells.
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
@@ -218,20 +220,20 @@
   const int numBasis = _quadrature->numBasis();
   const int numQuadPts = _quadrature->numQuadPts();
   const int spaceDim = cellGeometry.spaceDim();
-  double_array quadPtRef(cellDim);
-  const double_array& quadPtsRef = _quadrature->quadPtsRef();
+  scalar_array quadPtRef(cellDim);
+  const scalar_array& quadPtsRef = _quadrature->quadPtsRef();
   
   // Containers for orientation information
   const int orientationSize = spaceDim * spaceDim;
   const int fiberDim = numQuadPts * orientationSize;
   const int jacobianSize = spaceDim * cellDim;
-  double_array jacobian(jacobianSize);
-  double jacobianDet = 0;
-  double_array orientationQuadPt(orientationSize);
-  double_array orientationCell(fiberDim);
+  scalar_array jacobian(jacobianSize);
+  PylithScalar jacobianDet = 0;
+  scalar_array orientationQuadPt(orientationSize);
+  scalar_array orientationCell(fiberDim);
 
   // Get sections.
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     faultSieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -267,7 +269,7 @@
 
       // Compute Jacobian and determinant at quadrature point, then get
       // orientation.
-      memcpy(&quadPtRef[0], &quadPtsRef[iRef], cellDim*sizeof(double));
+      memcpy(&quadPtRef[0], &quadPtsRef[iRef], cellDim*sizeof(PylithScalar));
       cellGeometry.jacobian(&jacobian, &jacobianDet,
 			    coordinatesCell, quadPtRef);
       cellGeometry.orientation(&orientationQuadPt, jacobian, jacobianDet, up);
@@ -275,7 +277,7 @@
       orientationQuadPt /= jacobianDet;
 
       memcpy(&orientationCell[iQuad*orientationSize], 
-	     &orientationQuadPt[0], orientationSize*sizeof(double));
+	     &orientationQuadPt[0], orientationSize*sizeof(PylithScalar));
     } // for
 
     orientationSection->updatePoint(*c_iter, &orientationCell[0]);
@@ -292,8 +294,8 @@
   assert(0 != _normalizer);
   assert(0 != _quadrature);
 
-  const double pressureScale = _normalizer->pressureScale();
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
   const int spaceDim = _quadrature->spaceDim();
   const int numQuadPts = _quadrature->numQuadPts();
@@ -302,10 +304,10 @@
     // Create section to hold initial tractions.
     _fields->add("initial traction", "initial_traction");
     topology::Field<topology::SubMesh>& traction = _fields->get("initial traction");
+    traction.newSection(topology::FieldBase::CELLS_FIELD, numQuadPts*spaceDim);
+    traction.allocate();
     traction.scale(pressureScale);
     traction.vectorFieldType(topology::FieldBase::MULTI_VECTOR);
-    traction.newSection(topology::FieldBase::CELLS_FIELD, numQuadPts*spaceDim);
-    traction.allocate();
     const ALE::Obj<RealSection>& tractionSection = traction.section();
     assert(!tractionSection.isNull());
 
@@ -351,11 +353,11 @@
   
     // Containers for database query results and quadrature coordinates in
     // reference geometry.
-    double_array tractionCell(numQuadPts*spaceDim);
-    double_array quadPtsGlobal(numQuadPts*spaceDim);
+    scalar_array tractionCell(numQuadPts*spaceDim);
+    scalar_array quadPtsGlobal(numQuadPts*spaceDim);
     
     // Get sections.
-    double_array coordinatesCell(numBasis*spaceDim);
+    scalar_array coordinatesCell(numBasis*spaceDim);
     const ALE::Obj<RealSection>& coordinates =
       faultSieveMesh->getRealSection("coordinates");
     assert(!coordinates.isNull());
@@ -375,7 +377,7 @@
       faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
       _quadrature->computeGeometry(coordinatesCell, *c_iter);
       
-      const double_array& quadPtsNondim = _quadrature->quadPts();
+      const scalar_array& quadPtsNondim = _quadrature->quadPts();
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				  lengthScale);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/FaultCohesiveTract.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -65,7 +65,7 @@
    *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
   void initialize(const topology::Mesh& mesh,
-		  const double upDir[3]);
+		  const PylithScalar upDir[3]);
 
   /** Integrate contribution of cohesive cells to residual term.
    *
@@ -74,7 +74,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -85,7 +85,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
   
   /** Verify configuration is acceptable.
@@ -125,7 +125,7 @@
    *   not collinear with fault normal (usually "up" direction but could 
    *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
    */
-  void _calcOrientation(const double upDir[3]);
+  void _calcOrientation(const PylithScalar upDir[3]);
 
   /** Get initial tractions using a spatial database.
    */

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
 pylith::faults::LiuCosSlipFn::initialize(
 			    const topology::SubMesh& faultMesh,
 			    const spatialdata::units::Nondimensional& normalizer,
-			    const double originTime)
+			    const PylithScalar originTime)
 { // initialize
   assert(0 != _dbFinalSlip);
   assert(0 != _dbSlipTime);
@@ -83,8 +83,8 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = normalizer.lengthScale();
-  const double timeScale = normalizer.timeScale();
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
 
   // Get vertices in fault mesh
   const ALE::Obj<SieveMesh>& sieveMesh = faultMesh.sieveMesh();
@@ -168,7 +168,7 @@
   assert(!coordinates.isNull());
 
   _slipVertex.resize(spaceDim);
-  double_array vCoordsGlobal(spaceDim);
+  scalar_array vCoordsGlobal(spaceDim);
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -231,7 +231,7 @@
 // Get slip on fault surface at time t.
 void
 pylith::faults::LiuCosSlipFn::slip(topology::Field<topology::SubMesh>* slip,
-				  const double t)
+				  const PylithScalar t)
 { // slip
   assert(0 != slip);
   assert(0 != _parameters);
@@ -269,14 +269,14 @@
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
     riseTimeSection->restrictPoint(*v_iter, &_riseTimeVertex, 1);
 
-    double finalSlipMag = 0.0;
+    PylithScalar finalSlipMag = 0.0;
     for (int i=0; i < spaceDim; ++i)
       finalSlipMag += _slipVertex[i]*_slipVertex[i];
     finalSlipMag = sqrt(finalSlipMag);
 
-    const double slip = _slipFn(t-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip = _slipFn(t-_slipTimeVertex, finalSlipMag,
 				_riseTimeVertex);
-    const double scale = finalSlipMag > 0.0 ? slip / finalSlipMag : 0.0;
+    const PylithScalar scale = finalSlipMag > 0.0 ? slip / finalSlipMag : 0.0;
     _slipVertex *= scale;
     
     // Update field
@@ -291,8 +291,8 @@
 void
 pylith::faults::LiuCosSlipFn::slipIncr(
 				      topology::Field<topology::SubMesh>* slip,
-				      const double t0,
-				      const double t1)
+				      const PylithScalar t0,
+				      const PylithScalar t1)
 { // slipIncr
   assert(0 != slip);
   assert(0 != _parameters);
@@ -330,16 +330,16 @@
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
     riseTimeSection->restrictPoint(*v_iter, &_riseTimeVertex, 1);
 
-    double finalSlipMag = 0.0;
+    PylithScalar finalSlipMag = 0.0;
     for (int i=0; i < spaceDim; ++i)
       finalSlipMag += _slipVertex[i]*_slipVertex[i];
     finalSlipMag = sqrt(finalSlipMag);
 
-    const double slip0 = _slipFn(t0-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip0 = _slipFn(t0-_slipTimeVertex, finalSlipMag,
 				 _riseTimeVertex);
-    const double slip1 = _slipFn(t1-_slipTimeVertex, finalSlipMag,
+    const PylithScalar slip1 = _slipFn(t1-_slipTimeVertex, finalSlipMag,
 				 _riseTimeVertex);
-    const double scale = finalSlipMag > 0.0 ? 
+    const PylithScalar scale = finalSlipMag > 0.0 ? 
       (slip1 - slip0) / finalSlipMag : 0.0;
     _slipVertex *= scale;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 
 #include "pylith/topology/topologyfwd.hh" // USES Fields<Field<SubMesh> >
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // LiuCosSlipFn ---------------------------------------------------------
 /**
@@ -85,7 +85,7 @@
    */
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0);
+		  const PylithScalar originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *
@@ -95,7 +95,7 @@
    * @returns Slip vector as left-lateral/reverse/normal.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -106,8 +106,8 @@
    * @returns Increment in slip vector as left-lateral/reverse/normal.
    */
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -139,16 +139,16 @@
    * @returns Slip at point at time t
    */
   static
-  double _slipFn(const double t,
-		 const double finalSlip,
-		 const double riseTime);
+  PylithScalar _slipFn(const PylithScalar t,
+		 const PylithScalar finalSlip,
+		 const PylithScalar riseTime);
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _slipTimeVertex; ///< Slip time at a vertex.
-  double _riseTimeVertex; ///< Rise time at a vertex.
-  double_array _slipVertex; ///< Slip at a vertex.
+  PylithScalar _slipTimeVertex; ///< Slip time at a vertex.
+  PylithScalar _riseTimeVertex; ///< Rise time at a vertex.
+  scalar_array _slipVertex; ///< Slip at a vertex.
 
   /// Spatial database for final slip.
   spatialdata::spatialdb::SpatialDB* _dbFinalSlip;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/LiuCosSlipFn.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,16 +45,16 @@
 
 // Compute slip using slip time function.
 inline
-double
-pylith::faults::LiuCosSlipFn::_slipFn(const double t,
-				      const double finalSlip,
-				      const double riseTime) {
-  double slip = 0.0;
+PylithScalar
+pylith::faults::LiuCosSlipFn::_slipFn(const PylithScalar t,
+				      const PylithScalar finalSlip,
+				      const PylithScalar riseTime) {
+  PylithScalar slip = 0.0;
   if (t > 0.0) {
-    const double tau = riseTime * 1.525;
-    const double tau1 = 0.13 * tau;
-    const double tau2 = tau - tau1;
-    const double Cn = 
+    const PylithScalar tau = riseTime * 1.525;
+    const PylithScalar tau1 = 0.13 * tau;
+    const PylithScalar tau2 = tau - tau1;
+    const PylithScalar Cn = 
       M_PI /  (1.4 * M_PI * tau1 + 1.2 * tau1 + 0.3 * M_PI * tau2);
     
     if (t <= tau1) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/SlipTimeFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/SlipTimeFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/SlipTimeFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -66,7 +66,7 @@
   virtual
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0) = 0;
+		  const PylithScalar originTime =0.0) = 0;
 
   /** Get slip on fault surface at time t.
    *
@@ -77,7 +77,7 @@
    */
   virtual
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t) = 0;
+	    const PylithScalar t) = 0;
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -89,8 +89,8 @@
    */
   virtual
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1) = 0;
+		const PylithScalar t0,
+		const PylithScalar t1) = 0;
 
   /** Get final slip.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -70,7 +70,7 @@
 pylith::faults::StepSlipFn::initialize(
 			    const topology::SubMesh& faultMesh,
 			    const spatialdata::units::Nondimensional& normalizer,
-			    const double originTime)
+			    const PylithScalar originTime)
 { // initialize
   assert(0 != _dbFinalSlip);
   assert(0 != _dbSlipTime);
@@ -79,8 +79,8 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = normalizer.lengthScale();
-  const double timeScale = normalizer.timeScale();
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
 
   // Memory logging
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
@@ -153,7 +153,7 @@
   assert(!coordinates.isNull());
 
   _slipVertex.resize(spaceDim);
-  double_array vCoordsGlobal(spaceDim);  
+  scalar_array vCoordsGlobal(spaceDim);  
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -202,7 +202,7 @@
 // Get slip on fault surface at time t.
 void
 pylith::faults::StepSlipFn::slip(topology::Field<topology::SubMesh>* slip,
-				 const double t)
+				 const PylithScalar t)
 { // slip
   assert(0 != slip);
   assert(0 != _parameters);
@@ -233,7 +233,7 @@
     finalSlipSection->restrictPoint(*v_iter, &_slipVertex[0], _slipVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    const double relTime = t - _slipTimeVertex;
+    const PylithScalar relTime = t - _slipTimeVertex;
     if (relTime < 0.0)
       _slipVertex = 0.0;
     
@@ -248,8 +248,8 @@
 // Get increment of slip on fault surface between time t0 and t1.
 void
 pylith::faults::StepSlipFn::slipIncr(topology::Field<topology::SubMesh>* slip,
-				     const double t0,
-				     const double t1)
+				     const PylithScalar t0,
+				     const PylithScalar t1)
 { // slipIncr
   assert(0 != slip);
   assert(0 != _parameters);
@@ -280,8 +280,8 @@
     finalSlipSection->restrictPoint(*v_iter, &_slipVertex[0], _slipVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    const double relTime0 = t0 - _slipTimeVertex;
-    const double relTime1 = t1 - _slipTimeVertex;
+    const PylithScalar relTime0 = t0 - _slipTimeVertex;
+    const PylithScalar relTime1 = t1 - _slipTimeVertex;
     if (relTime1 < 0.0 || relTime0 >= 0.0)
       _slipVertex = 0.0;
     

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/StepSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 // Include directives ---------------------------------------------------
 #include "SlipTimeFn.hh"
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // StepSlipFn -----------------------------------------------------------
 /**
@@ -75,7 +75,7 @@
    */
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0);
+		  const PylithScalar originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *
@@ -85,7 +85,7 @@
    * @returns Slip vector as left-lateral/reverse/normal.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -96,8 +96,8 @@
    * @returns Increment in slip vector as left-lateral/reverse/normal.
    */
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -120,8 +120,8 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _slipTimeVertex; ///< Slip time at a vertex.
-  double_array _slipVertex; ///< Final slip at a vertex.
+  PylithScalar _slipTimeVertex; ///< Slip time at a vertex.
+  scalar_array _slipVertex; ///< Final slip at a vertex.
 
   /// Spatial database for final slip
   spatialdata::spatialdb::SpatialDB* _dbFinalSlip;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,7 +76,7 @@
 pylith::faults::TimeHistorySlipFn::initialize(
 			    const topology::SubMesh& faultMesh,
 			    const spatialdata::units::Nondimensional& normalizer,
-			    const double originTime)
+			    const PylithScalar originTime)
 { // initialize
   assert(0 != _dbAmplitude);
   assert(0 != _dbSlipTime);
@@ -85,8 +85,8 @@
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
 
-  const double lengthScale = normalizer.lengthScale();
-  const double timeScale = normalizer.timeScale();
+  const PylithScalar lengthScale = normalizer.lengthScale();
+  const PylithScalar timeScale = normalizer.timeScale();
 
   // Memory logging
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
@@ -160,7 +160,7 @@
   assert(!coordinates.isNull());
 
   _slipVertex.resize(spaceDim);
-  double_array vCoordsGlobal(spaceDim);  
+  scalar_array vCoordsGlobal(spaceDim);  
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -213,7 +213,7 @@
 // Get slip on fault surface at time t.
 void
 pylith::faults::TimeHistorySlipFn::slip(topology::Field<topology::SubMesh>* slip,
-				 const double t)
+				 const PylithScalar t)
 { // slip
   assert(0 != slip);
   assert(0 != _parameters);
@@ -239,7 +239,7 @@
   const ALE::Obj<RealSection>& slipSection = slip->section();
   assert(!slipSection.isNull());
 
-  double amplitude = 0.0;
+  PylithScalar amplitude = 0.0;
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
@@ -247,7 +247,7 @@
 					&_slipVertex[0], _slipVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    double relTime = t - _slipTimeVertex;
+    PylithScalar relTime = t - _slipTimeVertex;
     if (relTime < 0.0)
       _slipVertex = 0.0;
     else {
@@ -274,8 +274,8 @@
 // Get increment of slip on fault surface between time t0 and t1.
 void
 pylith::faults::TimeHistorySlipFn::slipIncr(topology::Field<topology::SubMesh>* slip,
-				     const double t0,
-				     const double t1)
+				     const PylithScalar t0,
+				     const PylithScalar t1)
 { // slipIncr
   assert(0 != slip);
   assert(0 != _parameters);
@@ -301,16 +301,16 @@
   const ALE::Obj<RealSection>& slipSection = slip->section();
   assert(!slipSection.isNull());
 
-  double amplitude0 = 0.0;
-  double amplitude1 = 0.0;
+  PylithScalar amplitude0 = 0.0;
+  PylithScalar amplitude1 = 0.0;
   for (label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
     slipAmplitudeSection->restrictPoint(*v_iter, &_slipVertex[0], _slipVertex.size());
     slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
 
-    double relTime0 = t0 - _slipTimeVertex;
-    double relTime1 = t1 - _slipTimeVertex;
+    PylithScalar relTime0 = t0 - _slipTimeVertex;
+    PylithScalar relTime1 = t1 - _slipTimeVertex;
     if (relTime1 < 0.0)
       _slipVertex = 0.0;
     else {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/faults/TimeHistorySlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "SlipTimeFn.hh"
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // TimeHistorySlipFn -----------------------------------------------------------
 /**
@@ -82,7 +82,7 @@
    */
   void initialize(const topology::SubMesh& faultMesh,
 		  const spatialdata::units::Nondimensional& normalizer,
-		  const double originTime =0.0);
+		  const PylithScalar originTime =0.0);
 
   /** Get slip on fault surface at time t.
    *
@@ -92,7 +92,7 @@
    * @returns Slip vector as left-lateral/reverse/normal.
    */
   void slip(topology::Field<topology::SubMesh>* const slipField,
-	    const double t);
+	    const PylithScalar t);
   
   /** Get slip increment on fault surface between time t0 and t1.
    *
@@ -103,8 +103,8 @@
    * @returns Increment in slip vector as left-lateral/reverse/normal.
    */
   void slipIncr(topology::Field<topology::SubMesh>* slipField,
-		const double t0,
-		const double t1);
+		const PylithScalar t0,
+		const PylithScalar t1);
 
   /** Get final slip.
    *
@@ -127,9 +127,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _slipTimeVertex; ///< Slip time at a vertex.
-  double _timeScale; ///< Time scale.
-  double_array _slipVertex; ///< Final slip at a vertex.
+  PylithScalar _slipTimeVertex; ///< Slip time at a vertex.
+  PylithScalar _timeScale; ///< Time scale.
+  scalar_array _slipVertex; ///< Final slip at a vertex.
 
   /// Spatial database for amplitude of slip time history.
   spatialdata::spatialdb::SpatialDB* _dbAmplitude;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -152,7 +152,7 @@
 // ----------------------------------------------------------------------
 // Set coordinates of vertices in reference cell.
 void
-pylith::feassemble::CellGeometry::_setVertices(const double* vertices,
+pylith::feassemble::CellGeometry::_setVertices(const PylithScalar* vertices,
 					       const int numVertices,
 					       const int dim)
 { // _setVertices
@@ -163,7 +163,7 @@
     assert(1 == numVertices);
     assert(1 == dim);
   } // if/else
-  const int nbytes = numVertices*dim*sizeof(double);
+  const int nbytes = numVertices*dim*sizeof(PylithScalar);
   _vertices.resize(numVertices*dim);
   memcpy(&_vertices[0], vertices, nbytes);
 } // _setVertices
@@ -171,10 +171,10 @@
 // ----------------------------------------------------------------------
 // Compute orientation of 0-D cell.
 void
-pylith::feassemble::CellGeometry::_orient0D(double_array* orientation,
-					    const double_array& jacobian,
-					    const double jacobianDet,
-					    const double_array& upDir)
+pylith::feassemble::CellGeometry::_orient0D(scalar_array* orientation,
+					    const scalar_array& jacobian,
+					    const PylithScalar jacobianDet,
+					    const scalar_array& upDir)
 { // _orient0D
   assert(0 != orientation);
   assert(1 == orientation->size());
@@ -184,10 +184,10 @@
 // ----------------------------------------------------------------------
 // Compute orientation of 1-D cell.
 void
-pylith::feassemble::CellGeometry::_orient1D(double_array* orientation,
-					    const double_array& jacobian,
-					    const double jacobianDet,
-					    const double_array& upDir)
+pylith::feassemble::CellGeometry::_orient1D(scalar_array* orientation,
+					    const scalar_array& jacobian,
+					    const PylithScalar jacobianDet,
+					    const scalar_array& upDir)
 { // _orient1D
   const int orientSize = 4;
   assert(0 != orientation);
@@ -198,8 +198,8 @@
   // cellDim is 1
   const int spaceDim = 2;
 
-  const double j1 = jacobian[0];
-  const double j2 = jacobian[1];
+  const PylithScalar j1 = jacobian[0];
+  const PylithScalar j2 = jacobian[1];
   (*orientation)[0] =  j1;
   (*orientation)[1] =  j2;
   (*orientation)[2] =  j2;
@@ -210,10 +210,10 @@
 // ----------------------------------------------------------------------
 // Compute orientation of 2-D cell.
 void
-pylith::feassemble::CellGeometry::_orient2D(double_array* orientation,
-					    const double_array& jacobian,
-					    const double jacobianDet,
-					    const double_array& upDir)
+pylith::feassemble::CellGeometry::_orient2D(scalar_array* orientation,
+					    const scalar_array& jacobian,
+					    const PylithScalar jacobianDet,
+					    const scalar_array& upDir)
 { // _orient2D
   const int orientSize = 9;
   assert(0 != orientation);
@@ -225,28 +225,28 @@
   const int cellDim = 2;
   const int spaceDim = 3;
 
-  const double j00 = jacobian[0];
-  const double j01 = jacobian[1];
-  const double j10 = jacobian[2];
-  const double j11 = jacobian[3];
-  const double j20 = jacobian[4];
-  const double j21 = jacobian[5];
+  const PylithScalar j00 = jacobian[0];
+  const PylithScalar j01 = jacobian[1];
+  const PylithScalar j10 = jacobian[2];
+  const PylithScalar j11 = jacobian[3];
+  const PylithScalar j20 = jacobian[4];
+  const PylithScalar j21 = jacobian[5];
 
   // Compute normal using Jacobian
-  double r0 =  j10*j21 - j20*j11;
-  double r1 = -j00*j21 + j20*j01;
-  double r2 =  j00*j11 - j10*j01;
+  PylithScalar r0 =  j10*j21 - j20*j11;
+  PylithScalar r1 = -j00*j21 + j20*j01;
+  PylithScalar r2 =  j00*j11 - j10*j01;
   // Make unit vector
-  double mag = sqrt(r0*r0 + r1*r1 + r2*r2);
+  PylithScalar mag = sqrt(r0*r0 + r1*r1 + r2*r2);
   assert(mag > 0.0);
   r0 /= mag;
   r1 /= mag;
   r2 /= mag;
   
   // Compute along-strike direction; cross product of "up" and normal
-  double p0 =  upDir[1]*r2 - upDir[2]*r1;
-  double p1 = -upDir[0]*r2 + upDir[2]*r0;
-  double p2 =  upDir[0]*r1 - upDir[1]*r0;
+  PylithScalar p0 =  upDir[1]*r2 - upDir[2]*r1;
+  PylithScalar p1 = -upDir[0]*r2 + upDir[2]*r0;
+  PylithScalar p2 =  upDir[0]*r1 - upDir[1]*r0;
   // Make unit vector
   mag = sqrt(p0*p0 + p1*p1 + p2*p2);
   assert(mag > 0.0);
@@ -255,13 +255,13 @@
   p2 /= mag;
   
   // Compute up-dip direction; cross product of normal and along-strike
-  const double q0 =  r1*p2 - r2*p1;
-  const double q1 = -r0*p2 + r2*p0;
-  const double q2 =  r0*p1 - r1*p0;
+  const PylithScalar q0 =  r1*p2 - r2*p1;
+  const PylithScalar q1 = -r0*p2 + r2*p0;
+  const PylithScalar q2 =  r0*p1 - r1*p0;
   mag = sqrt(q0*q0 + q1*q1 + q2*q2);
   assert(mag > 0.0);
   
-  const double wt = jacobianDet;
+  const PylithScalar wt = jacobianDet;
   (*orientation)[0] =  p0*wt;
   (*orientation)[1] =  p1*wt;
   (*orientation)[2] =  p2*wt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "feassemblefwd.hh" // forwward declarations
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // CellGeometry ---------------------------------------------------------
 /// Abstract base class for cell geometry calculations.
@@ -96,7 +96,7 @@
    *
    * @returns Array of coordinates of vertices in reference cell
    */
-  const double_array& vertices(void) const;
+  const scalar_array& vertices(void) const;
 
   /** Get cell geometry for lower dimension cell.
    *
@@ -115,9 +115,9 @@
    * @param npts Number of points to transform.
    */
   virtual
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts) const = 0;
 
@@ -129,10 +129,10 @@
    * @param location Location in reference cell at which to compute Jacobian.
    */
   virtual
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const = 0;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const = 0;
 
   /** Compute Jacobian at location in cell.
    *
@@ -144,10 +144,10 @@
    * @param npts Number of points to transform.
    */
   virtual
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts) const = 0;
 
@@ -165,10 +165,10 @@
    * @param upDir Direction perpendicular to horizontal direction that is 
    *   not collinear with cell normal (usually "up" direction).
    */
-  void orientation(double_array* orientation,
-		   const double_array& jacobian,
-		   const double jacobianDet,
-		   const double_array& upDir) const;
+  void orientation(scalar_array* orientation,
+		   const scalar_array& jacobian,
+		   const PylithScalar jacobianDet,
+		   const scalar_array& upDir) const;
 
 // PROTECTED ////////////////////////////////////////////////////////////
 protected :
@@ -185,7 +185,7 @@
    * @param numVertices Number of vertices.
    * @param dim Dimension of cell
    */
-  void _setVertices(const double* vertices,
+  void _setVertices(const PylithScalar* vertices,
 		    const int numVertices,
 		    const int dim);
 
@@ -199,10 +199,10 @@
 private :
 
   /// Function type for orientation methods.
-  typedef void (*orient_fn_type)(double_array*, 
-				 const double_array&,
-				 const double,
-				 const double_array&);  
+  typedef void (*orient_fn_type)(scalar_array*, 
+				 const scalar_array&,
+				 const PylithScalar,
+				 const scalar_array&);  
 
 // PRIVATE METHODS //////////////////////////////////////////////////////
 private :
@@ -226,10 +226,10 @@
    *   be up-dip direction).
    */
   static
-  void _orient0D(double_array* orientation,
-		 const double_array& jacobian,
-		 const double jacobianDet,
-		 const double_array& upDir);
+  void _orient0D(scalar_array* orientation,
+		 const scalar_array& jacobian,
+		 const PylithScalar jacobianDet,
+		 const scalar_array& upDir);
 		
   /** Compute orientation of 1-D cell. Orientation is either at
    * vertices or quadrature points, depending on whether the arguments
@@ -248,10 +248,10 @@
    *   be up-dip direction).
    */
   static 
-  void _orient1D(double_array* orientation,
-		 const double_array& jacobian,
-		 const double jacobianDet,
-		 const double_array& upDir);
+  void _orient1D(scalar_array* orientation,
+		 const scalar_array& jacobian,
+		 const PylithScalar jacobianDet,
+		 const scalar_array& upDir);
 		
   /** Compute orientation of 2-D cell. Orientation is either at
    * vertices or quadrature points, depending on whether the arguments
@@ -270,10 +270,10 @@
    *   be up-dip direction).
    */
   static
-  void _orient2D(double_array* orientation,
-		 const double_array& jacobian,
-		 const double jacobianDet,
-		 const double_array& upDir);
+  void _orient2D(scalar_array* orientation,
+		 const scalar_array& jacobian,
+		 const PylithScalar jacobianDet,
+		 const scalar_array& upDir);
 		
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
@@ -288,7 +288,7 @@
    * size = numBasis * cellDim
    * index = iBasis*cellDim + iDim
    */
-  double_array _vertices;
+  scalar_array _vertices;
 
   orient_fn_type _orientFn; ///< Function for computing orientation of cell
   int _spaceDim; ///< Dimension of coordinate space.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/CellGeometry.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 // Get coordinates of vertices in reference cell (dual basis).
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::CellGeometry::vertices(void) const {
   return _vertices;
 }
@@ -39,10 +39,10 @@
 // Compute orientation of cell at location.
 inline
 void
-pylith::feassemble::CellGeometry::orientation(double_array* orientation,
-					      const double_array& jacobian,
-					      const double jacobianDet,
-					      const double_array& upDir) const {
+pylith::feassemble::CellGeometry::orientation(scalar_array* orientation,
+					      const scalar_array& jacobian,
+					      const PylithScalar jacobianDet,
+					      const scalar_array& upDir) const {
   if (0 != _orientFn)
     _orientFn(orientation, jacobian, jacobianDet, upDir);
 } // orientation

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Constraint.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Constraint.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Constraint.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -94,7 +94,7 @@
    * @param field Solution field
    */
   virtual
-  void setField(const double t,
+  void setField(const PylithScalar t,
 		const topology::Field<topology::Mesh>& field) = 0;
 
   /** Set increment in values from t0 to t1 in field.
@@ -104,8 +104,8 @@
    * @param field Solution field
    */
   virtual
-  void setFieldIncr(const double t0,
-		    const double t1,
+  void setFieldIncr(const PylithScalar t0,
+		    const PylithScalar t1,
 		    const topology::Field<topology::Mesh>& field) = 0;
 
   // PROTECTED MEMBERS //////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -70,7 +70,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityExplicit::timeStep(const double dt)
+pylith::feassemble::ElasticityExplicit::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -85,7 +85,7 @@
 // ----------------------------------------------------------------------
 // Set normalized viscosity for numerical damping.
 void
-pylith::feassemble::ElasticityExplicit::normViscosity(const double viscosity)
+pylith::feassemble::ElasticityExplicit::normViscosity(const PylithScalar viscosity)
 { // normViscosity
   if (viscosity < 0.0) {
     std::ostringstream msg;
@@ -114,12 +114,12 @@
 void
 pylith::feassemble::ElasticityExplicit::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicit::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -138,7 +138,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -185,10 +185,10 @@
   } // switch
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -201,20 +201,20 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
   
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
   
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = fields->get("disp(t)").section();
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
@@ -222,7 +222,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -230,15 +230,15 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -292,10 +292,10 @@
 #endif
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute body force vector if gravity is being used.
     if (0 != _gravityField) {
@@ -303,23 +303,24 @@
       assert(0 != cs);
 
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
           lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+        const int err = db->query(&gravVec[0], gravVec.size(),
             &quadPtsGlobal[0], spaceDim, cs);
         if (err)
           throw std::runtime_error("Unable to get gravity vector for point.");
         _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
             gravityScale);
-        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
         for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
-          const double valI = wt * basis[iQ + iBasis];
+          const PylithScalar valI = wt * basis[iQ + iBasis];
           for (int iDim = 0; iDim < spaceDim; ++iDim) {
             _cellVector[iBasis * spaceDim + iDim] += valI * gravVec[iDim];
           } // for
@@ -329,13 +330,13 @@
     } // if
 
     // Compute action for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
       for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
-        const double valI = wt * basis[iQuad*numBasis+iBasis];
+        const PylithScalar valI = wt * basis[iQuad*numBasis+iBasis];
         for (int jBasis = 0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          const PylithScalar valIJ = valI * basis[iQuad*numBasis+jBasis];
           for (int iDim = 0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis*spaceDim+iDim] -= valIJ * 
 	      accCell[jBasis*spaceDim+iDim];
@@ -356,7 +357,7 @@
     calcTotalStrainFn(&strainCell, basisDeriv, dispAdjCell, 
 		      numBasis, numQuadPts);
 
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(stressEvent);
@@ -389,12 +390,12 @@
 void
 pylith::feassemble::ElasticityExplicit::integrateResidualLumped(
         const topology::Field<topology::Mesh>& residual,
-        const double t,
+        const PylithScalar t,
         topology::SolutionFields* const fields)
 { // integrateResidualLumped
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicit::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -413,7 +414,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -455,10 +456,10 @@
   } // if/else
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -471,20 +472,20 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
   
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
   
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -493,7 +494,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
   
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -501,18 +502,18 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale =
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale =
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
             _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   // Get parameters used in integration.
-  double_array valuesIJ(numBasis);
+  scalar_array valuesIJ(numBasis);
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -566,10 +567,10 @@
 #endif
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute body force vector if gravity is being used.
     if (0 != _gravityField) {
@@ -577,23 +578,24 @@
       assert(0 != cs);
 
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
           lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+        const int err = db->query(&gravVec[0], gravVec.size(),
             &quadPtsGlobal[0], spaceDim, cs);
         if (err)
           throw std::runtime_error("Unable to get gravity vector for point.");
         _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
             gravityScale);
-        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
         for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
-          const double valI = wt * basis[iQ + iBasis];
+          const PylithScalar valI = wt * basis[iQ + iBasis];
           for (int iDim = 0; iDim < spaceDim; ++iDim) {
             _cellVector[iBasis*spaceDim+iDim] += valI * gravVec[iDim];
           } // for
@@ -603,12 +605,12 @@
     } // if
 
     // Compute action for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     valuesIJ = 0.0;
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
       const int iQ = iQuad * numBasis;
-      double valJ = 0.0;
+      PylithScalar valJ = 0.0;
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
 	valJ += basis[iQ + jBasis];
       valJ *= wt;
@@ -633,7 +635,7 @@
     // Compute B(transpose) * sigma, first computing strains
     calcTotalStrainFn(&strainCell, basisDeriv, dispAdjCell,
           numBasis, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(stressEvent);
@@ -667,7 +669,7 @@
 void
 pylith::feassemble::ElasticityExplicit::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -686,12 +688,11 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const int tensorSize = _material->tensorSize();
   if (cellDim != spaceDim)
     throw std::logic_error("Don't know how to integrate elasticity " \
 			   "contribution to Jacobian matrix for cells with " \
@@ -716,19 +717,23 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
     sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solnSection);
   assert(!globalOrder.isNull());
   // We would need to request unique points here if we had an interpolated mesh
-  IndicesVisitor jacobianVisitor(*solnSection, *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+  assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+  assert(closureSize >= 0);
+  IndicesVisitor jacobianVisitor(*solnSection, *globalOrder, 
+				 closureSize*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -773,20 +778,20 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
     // Compute Jacobian for inertial terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = 
+      const PylithScalar wt = 
           quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
       for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQ+iBasis];
+        const PylithScalar valI = wt*basis[iQ+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQ+jBasis];
+          const PylithScalar valIJ = valI * basis[iQ+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim) {
             const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
             const int jBlock = (jBasis*spaceDim + iDim);
@@ -827,7 +832,7 @@
 void
 pylith::feassemble::ElasticityExplicit::integrateJacobian(
 			    topology::Field<topology::Mesh>* jacobian,
-			    const double t,
+			    const PylithScalar t,
 			    topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -846,12 +851,11 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const int tensorSize = _material->tensorSize();
   if (cellDim != spaceDim)
     throw std::logic_error("Don't know how to integrate elasticity " \
 			   "contribution to Jacobian matrix for cells with " \
@@ -868,17 +872,17 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
-  double_array valuesIJ(numBasis);
+  scalar_array valuesIJ(numBasis);
 
   // Get sections
   const ALE::Obj<RealSection>& jacobianSection = jacobian->section();
   assert(!jacobianSection.isNull());
   UpdateAddVisitor jacobianVisitor(*jacobianSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -922,19 +926,19 @@
     _resetCellVector();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
     // Compute Jacobian for inertial terms
     valuesIJ = 0.0;
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad]
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad]
 	/ dt2;
       const int iQ = iQuad * numBasis;
-      double valJ = 0.0;
+      PylithScalar valJ = 0.0;
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
         valJ += basis[iQ + jBasis];
       valJ *= wt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicit.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -88,13 +88,13 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set normalized viscosity for numerical damping.
    *
    * @param viscosity Normalized viscosity (viscosity / elastic modulus).
    */
-  void normViscosity(const double viscosity);
+  void normViscosity(const PylithScalar viscosity);
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -110,7 +110,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -120,7 +120,7 @@
    * @param fields Solution fields
    */
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -131,7 +131,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -142,7 +142,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
@@ -157,8 +157,8 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _dtm1; ///< Time step for t-dt1 -> t
-  double _normViscosity; ///< Normalized viscosity for numerical damping.
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _normViscosity; ///< Normalized viscosity for numerical damping.
 
 }; // ElasticityExplicit
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -68,7 +68,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityExplicitLgDeform::timeStep(const double dt)
+pylith::feassemble::ElasticityExplicitLgDeform::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -83,7 +83,7 @@
 // ----------------------------------------------------------------------
 // Set normalized viscosity for numerical damping.
 void
-pylith::feassemble::ElasticityExplicitLgDeform::normViscosity(const double viscosity)
+pylith::feassemble::ElasticityExplicitLgDeform::normViscosity(const PylithScalar viscosity)
 { // normViscosity
   if (viscosity < 0.0) {
     std::ostringstream msg;
@@ -111,12 +111,12 @@
 void
 pylith::feassemble::ElasticityExplicitLgDeform::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicitLgDeform::*elasticityResidual_fn_type)
-    (const double_array&, const double_array&);
+    (const scalar_array&, const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -135,7 +135,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -175,10 +175,10 @@
     assert(0);
 
   // Allocate vectors for cell values.
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -191,23 +191,23 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
 #if 0 // Numerical damping not yet implemented
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
 #endif
 
-  double_array dispCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = fields->get("disp(t)").section();
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
@@ -215,7 +215,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -223,15 +223,15 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   _logger->eventEnd(setupEvent);
   _logger->eventBegin(computeEvent);
@@ -268,10 +268,10 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute body force vector if gravity is being used.
     if (0 != _gravityField) {
@@ -279,24 +279,25 @@
       assert(0 != cs);
       
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				  lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+	const int err = db->query(&gravVec[0], gravVec.size(),
 					     &quadPtsGlobal[0], spaceDim, cs);
 	if (err)
 	  throw std::runtime_error("Unable to get gravity vector for point.");
 	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
 				       gravityScale);
-	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+	const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
 	for (int iBasis=0, iQ=iQuad*numBasis;
 	     iBasis < numBasis; ++iBasis) {
-	  const double valI = wt*basis[iQ+iBasis];
+	  const PylithScalar valI = wt*basis[iQ+iBasis];
 	  for (int iDim=0; iDim < spaceDim; ++iDim) {
 	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
 	  } // for
@@ -306,14 +307,14 @@
     } // if
 
     // Compute action for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = 
+      const PylithScalar wt = 
 	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
       for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQuad*numBasis+iBasis];
+        const PylithScalar valI = wt*basis[iQuad*numBasis+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQuad*numBasis+jBasis];
+          const PylithScalar valIJ = valI * basis[iQuad*numBasis+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis*spaceDim+iDim] -= 
 	      valIJ * accCell[jBasis*spaceDim+iDim];
@@ -334,7 +335,7 @@
     _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
 		     numBasis, numQuadPts, spaceDim);
     calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell, dispCell);
 
@@ -351,12 +352,12 @@
 void
 pylith::feassemble::ElasticityExplicitLgDeform::integrateResidualLumped(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidualLumped
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicitLgDeform::*elasticityResidual_fn_type)
-    (const double_array&, const double_array&);
+    (const scalar_array&, const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -375,7 +376,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -415,10 +416,10 @@
     assert(0);
 
   // Allocate vectors for cell values.
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -431,23 +432,23 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
 #if 0 // Numerical damping not yet implemented
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
 #endif
 
-  double_array dispCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = fields->get("disp(t)").section();
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
@@ -455,7 +456,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -463,13 +464,13 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
   // Get parameters used in integration.
-  double_array valuesIJ(numBasis);
+  scalar_array valuesIJ(numBasis);
 
   _logger->eventEnd(setupEvent);
   _logger->eventBegin(computeEvent);
@@ -506,10 +507,10 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute body force vector if gravity is being used.
     if (0 != _gravityField) {
@@ -517,24 +518,25 @@
       assert(0 != cs);
       
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				  lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+	const int err = db->query(&gravVec[0], gravVec.size(),
 					     &quadPtsGlobal[0], spaceDim, cs);
 	if (err)
 	  throw std::runtime_error("Unable to get gravity vector for point.");
 	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
 				       gravityScale);
-	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+	const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
 	for (int iBasis=0, iQ=iQuad*numBasis;
 	     iBasis < numBasis; ++iBasis) {
-	  const double valI = wt*basis[iQ+iBasis];
+	  const PylithScalar valI = wt*basis[iQ+iBasis];
 	  for (int iDim=0; iDim < spaceDim; ++iDim) {
 	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
 	  } // for
@@ -544,12 +546,12 @@
     } // if
 
     // Compute action for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     valuesIJ = 0.0;
     for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+      const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
       const int iQ = iQuad * numBasis;
-      double valJ = 0.0;
+      PylithScalar valJ = 0.0;
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
 	valJ += basis[iQ + jBasis];
       valJ *= wt;
@@ -573,7 +575,7 @@
     _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
 		     numBasis, numQuadPts, spaceDim);
     calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell, dispCell);
     
@@ -590,7 +592,7 @@
 void
 pylith::feassemble::ElasticityExplicitLgDeform::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -609,7 +611,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -639,19 +641,23 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
     sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solnSection);
   assert(!globalOrder.isNull());
   // We would need to request unique points here if we had an interpolated mesh
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+  assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+  assert(closureSize >= 0);
   IndicesVisitor jacobianVisitor(*solnSection, *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
+				 closureSize*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -681,20 +687,20 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
     // Compute Jacobian for inertial terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = 
+      const PylithScalar wt = 
 	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
       for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQ+iBasis];
+        const PylithScalar valI = wt*basis[iQ+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQ+jBasis];
+          const PylithScalar valIJ = valI * basis[iQ+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim) {
             const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
             const int jBlock = (jBasis*spaceDim + iDim);
@@ -724,7 +730,7 @@
 void
 pylith::feassemble::ElasticityExplicitLgDeform::integrateJacobian(
 			    topology::Field<topology::Mesh>* jacobian,
-			    const double t,
+			    const PylithScalar t,
 			    topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -743,7 +749,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -765,8 +771,8 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   // Get sections
@@ -774,7 +780,7 @@
   assert(!jacobianSection.isNull());
   UpdateAddVisitor jacobianVisitor(*jacobianSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -804,20 +810,20 @@
     _resetCellMatrix();
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
     // Compute Jacobian for inertial terms
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double wt = 
+      const PylithScalar wt = 
 	quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad] / dt2;
       for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-        const double valI = wt*basis[iQ+iBasis];
+        const PylithScalar valI = wt*basis[iQ+iBasis];
         for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-          const double valIJ = valI * basis[iQ+jBasis];
+          const PylithScalar valIJ = valI * basis[iQ+jBasis];
           for (int iDim=0; iDim < spaceDim; ++iDim) {
             const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
             const int jBlock = (jBasis*spaceDim + iDim);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -90,13 +90,13 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set normalized viscosity for numerical damping.
    *
    * @param viscosity Normalized viscosity (viscosity / elastic modulus).
    */
-  void normViscosity(const double viscosity);
+  void normViscosity(const PylithScalar viscosity);
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -112,7 +112,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -122,7 +122,7 @@
    * @param fields Solution fields
    */
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -133,7 +133,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -144,7 +144,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
@@ -159,8 +159,8 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _dtm1; ///< Time step for t-dt1 -> t
-  double _normViscosity; ///< Normalized viscosity for numerical damping.
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _normViscosity; ///< Normalized viscosity for numerical damping.
 
 }; // ElasticityExplicitLgDeform
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -75,7 +75,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityExplicitTet4::timeStep(const double dt)
+pylith::feassemble::ElasticityExplicitTet4::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -90,7 +90,7 @@
 // ----------------------------------------------------------------------
 // Set normalized viscosity for numerical damping.
 void
-pylith::feassemble::ElasticityExplicitTet4::normViscosity(const double viscosity)
+pylith::feassemble::ElasticityExplicitTet4::normViscosity(const PylithScalar viscosity)
 { // normViscosity
   if (viscosity < 0.0) {
     std::ostringstream msg;
@@ -119,7 +119,7 @@
 void
 pylith::feassemble::ElasticityExplicitTet4::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != _quadrature);
@@ -139,7 +139,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   assert(_quadrature->numQuadPts() == _numQuadPts);
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == _numQuadPts);
   assert(_quadrature->numBasis() == _numBasis);
   assert(_quadrature->spaceDim() == _spaceDim);
@@ -163,10 +163,10 @@
 			   "domain not implemented yet.");
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -179,20 +179,20 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -201,7 +201,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
   
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -209,15 +209,15 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -235,7 +235,7 @@
     // Compute geometry information for current cell
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double volume = _volume(coordinatesCell);
+    const PylithScalar volume = _volume(coordinatesCell);
     assert(volume > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -269,7 +269,7 @@
     _logger->eventBegin(computeEvent);
 #endif
 
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     assert(density.size() == 1);
 
     // Compute body force vector if gravity is being used.
@@ -286,13 +286,14 @@
           lengthScale);
 
       // Compute action for element body forces
-      const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
+      const int err = db->query(&gravVec[0], gravVec.size(),
         &quadPtsGlobal[0], spaceDim, cs);
       if (err)
         throw std::runtime_error("Unable to get gravity vector for point.");
       _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
           gravityScale);
-      const double wtVertex = density[0] * volume / 4.0;
+      const PylithScalar wtVertex = density[0] * volume / 4.0;
       for (int iBasis=0; iBasis < numBasis; ++iBasis)
         for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
@@ -300,7 +301,7 @@
     } // if
 
     // Compute action for inertial terms
-    const double wtVertex = density[0] * volume / 16.0;
+    const PylithScalar wtVertex = density[0] * volume / 16.0;
     for (int iBasis = 0; iBasis < numBasis; ++iBasis)
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
         for (int iDim = 0; iDim < spaceDim; ++iDim)
@@ -318,38 +319,38 @@
     dispAdjCell = dispCell + viscosity * velCell;
 
     // Compute B(transpose) * sigma, first computing strains
-    const double x0 = coordinatesCell[0];
-    const double y0 = coordinatesCell[1];
-    const double z0 = coordinatesCell[2];
+    const PylithScalar x0 = coordinatesCell[0];
+    const PylithScalar y0 = coordinatesCell[1];
+    const PylithScalar z0 = coordinatesCell[2];
 
-    const double x1 = coordinatesCell[3];
-    const double y1 = coordinatesCell[4];
-    const double z1 = coordinatesCell[5];
+    const PylithScalar x1 = coordinatesCell[3];
+    const PylithScalar y1 = coordinatesCell[4];
+    const PylithScalar z1 = coordinatesCell[5];
 
-    const double x2 = coordinatesCell[6];
-    const double y2 = coordinatesCell[7];
-    const double z2 = coordinatesCell[8];
+    const PylithScalar x2 = coordinatesCell[6];
+    const PylithScalar y2 = coordinatesCell[7];
+    const PylithScalar z2 = coordinatesCell[8];
 
-    const double x3 = coordinatesCell[9];
-    const double y3 = coordinatesCell[10];
-    const double z3 = coordinatesCell[11];
+    const PylithScalar x3 = coordinatesCell[9];
+    const PylithScalar y3 = coordinatesCell[10];
+    const PylithScalar z3 = coordinatesCell[11];
 
-    const double scaleB = 6.0 * volume;
-    const double b1 = (y1*(z3-z2)-y2*z3+y3*z2-(y3-y2)*z1) / scaleB;
-    const double c1 = (-x1*(z3-z2)+x2*z3-x3*z2-(x2-x3)*z1) / scaleB;
-    const double d1 = (-x2*y3-x1*(y2-y3)+x3*y2+(x2-x3)*y1) / scaleB;
+    const PylithScalar scaleB = 6.0 * volume;
+    const PylithScalar b1 = (y1*(z3-z2)-y2*z3+y3*z2-(y3-y2)*z1) / scaleB;
+    const PylithScalar c1 = (-x1*(z3-z2)+x2*z3-x3*z2-(x2-x3)*z1) / scaleB;
+    const PylithScalar d1 = (-x2*y3-x1*(y2-y3)+x3*y2+(x2-x3)*y1) / scaleB;
 
-    const double b2 = (-y0*z3-y2*(z0-z3)+(y0-y3)*z2+y3*z0) / scaleB;
-    const double c2 = (x0*z3+x2*(z0-z3)+(x3-x0)*z2-x3*z0) / scaleB;
-    const double d2 = (x2*(y3-y0)-x0*y3-(x3-x0)*y2+x3*y0) / scaleB;
+    const PylithScalar b2 = (-y0*z3-y2*(z0-z3)+(y0-y3)*z2+y3*z0) / scaleB;
+    const PylithScalar c2 = (x0*z3+x2*(z0-z3)+(x3-x0)*z2-x3*z0) / scaleB;
+    const PylithScalar d2 = (x2*(y3-y0)-x0*y3-(x3-x0)*y2+x3*y0) / scaleB;
 
-    const double b3 = (-(y1-y0)*z3+y3*(z1-z0)-y0*z1+y1*z0) / scaleB;
-    const double c3 = (-(x0-x1)*z3-x3*(z1-z0)+x0*z1-x1*z0) / scaleB;
-    const double d3 = ((x0-x1)*y3-x0*y1-x3*(y0-y1)+x1*y0) / scaleB;
+    const PylithScalar b3 = (-(y1-y0)*z3+y3*(z1-z0)-y0*z1+y1*z0) / scaleB;
+    const PylithScalar c3 = (-(x0-x1)*z3-x3*(z1-z0)+x0*z1-x1*z0) / scaleB;
+    const PylithScalar d3 = ((x0-x1)*y3-x0*y1-x3*(y0-y1)+x1*y0) / scaleB;
 
-    const double b4 = (-y0*(z2-z1)+y1*z2-y2*z1+(y2-y1)*z0) / scaleB;
-    const double c4 = (x0*(z2-z1)-x1*z2+x2*z1+(x1-x2)*z0) / scaleB;
-    const double d4 = (x1*y2+x0*(y1-y2)-x2*y1-(x1-x2)*y0) / scaleB;
+    const PylithScalar b4 = (-y0*(z2-z1)+y1*z2-y2*z1+(y2-y1)*z0) / scaleB;
+    const PylithScalar c4 = (x0*(z2-z1)-x1*z2+x2*z1+(x1-x2)*z0) / scaleB;
+    const PylithScalar d4 = (x1*y2+x0*(y1-y2)-x2*y1-(x1-x2)*y0) / scaleB;
 
     assert(strainCell.size() == 6);
     strainCell[0] = 
@@ -377,7 +378,7 @@
        d2 * dispAdjCell[3] + b1 * dispAdjCell[2] + 
        b4 * dispAdjCell[11] + d1 * dispAdjCell[0]) / 2.0;
 
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     PetscLogFlops(196);
@@ -425,12 +426,12 @@
 void
 pylith::feassemble::ElasticityExplicitTet4::integrateResidualLumped(
         const topology::Field<topology::Mesh>& residual,
-        const double t,
+        const PylithScalar t,
         topology::SolutionFields* const fields)
 { // integrateResidualLumped
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicitTet4::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -471,10 +472,10 @@
          "domain not implemented yet.");
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -490,20 +491,20 @@
   assert(!sieve.isNull());
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -512,7 +513,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -520,18 +521,18 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale =
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale =
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
             _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   // Get parameters used in integration.
-  double_array valuesIJ(numBasis);
+  scalar_array valuesIJ(numBasis);
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -579,7 +580,7 @@
 #endif
 
     // Compute geometry information for current cell
-    const double volume = _volume(coordinatesCell);
+    const PylithScalar volume = _volume(coordinatesCell);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(geometryEvent);
@@ -590,7 +591,7 @@
     _material->retrievePropsAndVars(*c_iter);
 
     // Get density at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(stateVarsEvent);
@@ -614,13 +615,14 @@
           lengthScale);
 
       // Compute action for element body forces
-      const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
+      const int err = db->query(&gravVec[0], gravVec.size(),
         &quadPtsGlobal[0], spaceDim, cs);
       if (err)
         throw std::runtime_error("Unable to get gravity vector for point.");
       _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
           gravityScale);
-      const double wtVertex = density[0] * volume / 4.0;
+      const PylithScalar wtVertex = density[0] * volume / 4.0;
       for (int iBasis=0; iBasis < numBasis; ++iBasis)
         for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
@@ -628,7 +630,7 @@
     } // if
 
     // Compute action for inertial terms
-    const double wtVertex = density[0] * volume / 4.0;
+    const PylithScalar wtVertex = density[0] * volume / 4.0;
     _cellVector -= wtVertex * accCell;
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -642,38 +644,38 @@
     dispAdjCell = dispCell + viscosity * velCell;    
 
     // Compute B(transpose) * sigma, first computing strains
-    const double x0 = coordinatesCell[0];
-    const double y0 = coordinatesCell[1];
-    const double z0 = coordinatesCell[2];
+    const PylithScalar x0 = coordinatesCell[0];
+    const PylithScalar y0 = coordinatesCell[1];
+    const PylithScalar z0 = coordinatesCell[2];
 
-    const double x1 = coordinatesCell[3];
-    const double y1 = coordinatesCell[4];
-    const double z1 = coordinatesCell[5];
+    const PylithScalar x1 = coordinatesCell[3];
+    const PylithScalar y1 = coordinatesCell[4];
+    const PylithScalar z1 = coordinatesCell[5];
 
-    const double x2 = coordinatesCell[6];
-    const double y2 = coordinatesCell[7];
-    const double z2 = coordinatesCell[8];
+    const PylithScalar x2 = coordinatesCell[6];
+    const PylithScalar y2 = coordinatesCell[7];
+    const PylithScalar z2 = coordinatesCell[8];
 
-    const double x3 = coordinatesCell[9];
-    const double y3 = coordinatesCell[10];
-    const double z3 = coordinatesCell[11];
+    const PylithScalar x3 = coordinatesCell[9];
+    const PylithScalar y3 = coordinatesCell[10];
+    const PylithScalar z3 = coordinatesCell[11];
 
-    const double scaleB = 6.0 * volume;
-    const double b1 = (y1*(z3-z2)-y2*z3+y3*z2-(y3-y2)*z1) / scaleB;
-    const double c1 = (-x1*(z3-z2)+x2*z3-x3*z2-(x2-x3)*z1) / scaleB;
-    const double d1 = (-x2*y3-x1*(y2-y3)+x3*y2+(x2-x3)*y1) / scaleB;
+    const PylithScalar scaleB = 6.0 * volume;
+    const PylithScalar b1 = (y1*(z3-z2)-y2*z3+y3*z2-(y3-y2)*z1) / scaleB;
+    const PylithScalar c1 = (-x1*(z3-z2)+x2*z3-x3*z2-(x2-x3)*z1) / scaleB;
+    const PylithScalar d1 = (-x2*y3-x1*(y2-y3)+x3*y2+(x2-x3)*y1) / scaleB;
 
-    const double b2 = (-y0*z3-y2*(z0-z3)+(y0-y3)*z2+y3*z0) / scaleB;
-    const double c2 = (x0*z3+x2*(z0-z3)+(x3-x0)*z2-x3*z0) / scaleB;
-    const double d2 = (x2*(y3-y0)-x0*y3-(x3-x0)*y2+x3*y0) / scaleB;
+    const PylithScalar b2 = (-y0*z3-y2*(z0-z3)+(y0-y3)*z2+y3*z0) / scaleB;
+    const PylithScalar c2 = (x0*z3+x2*(z0-z3)+(x3-x0)*z2-x3*z0) / scaleB;
+    const PylithScalar d2 = (x2*(y3-y0)-x0*y3-(x3-x0)*y2+x3*y0) / scaleB;
 
-    const double b3 = (-(y1-y0)*z3+y3*(z1-z0)-y0*z1+y1*z0) / scaleB;
-    const double c3 = (-(x0-x1)*z3-x3*(z1-z0)+x0*z1-x1*z0) / scaleB;
-    const double d3 = ((x0-x1)*y3-x0*y1-x3*(y0-y1)+x1*y0) / scaleB;
+    const PylithScalar b3 = (-(y1-y0)*z3+y3*(z1-z0)-y0*z1+y1*z0) / scaleB;
+    const PylithScalar c3 = (-(x0-x1)*z3-x3*(z1-z0)+x0*z1-x1*z0) / scaleB;
+    const PylithScalar d3 = ((x0-x1)*y3-x0*y1-x3*(y0-y1)+x1*y0) / scaleB;
 
-    const double b4 = (-y0*(z2-z1)+y1*z2-y2*z1+(y2-y1)*z0) / scaleB;
-    const double c4 = (x0*(z2-z1)-x1*z2+x2*z1+(x1-x2)*z0) / scaleB;
-    const double d4 = (x1*y2+x0*(y1-y2)-x2*y1-(x1-x2)*y0) / scaleB;
+    const PylithScalar b4 = (-y0*(z2-z1)+y1*z2-y2*z1+(y2-y1)*z0) / scaleB;
+    const PylithScalar c4 = (x0*(z2-z1)-x1*z2+x2*z1+(x1-x2)*z0) / scaleB;
+    const PylithScalar d4 = (x1*y2+x0*(y1-y2)-x2*y1-(x1-x2)*y0) / scaleB;
 
     assert(strainCell.size() == 6);
     strainCell[0] = 
@@ -701,7 +703,7 @@
        d2 * dispAdjCell[3] + b1 * dispAdjCell[2] + 
        b4 * dispAdjCell[11] + d1 * dispAdjCell[0]) / 2.0;
 
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     PetscLogFlops(196);
@@ -762,7 +764,7 @@
 void
 pylith::feassemble::ElasticityExplicitTet4::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -781,7 +783,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -803,7 +805,7 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -813,8 +815,8 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
@@ -825,7 +827,7 @@
 				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
 					   sieveMesh->depth())*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -848,7 +850,7 @@
     // Compute geometry information for current cell
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double volume = _volume(coordinatesCell);
+    const PylithScalar volume = _volume(coordinatesCell);
     assert(volume > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -868,11 +870,11 @@
     _resetCellMatrix();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     assert(density.size() == 1);
 
     // Compute Jacobian for inertial terms
-    const double wtVertex = density[0] * volume / (16.0 * dt2);
+    const PylithScalar wtVertex = density[0] * volume / (16.0 * dt2);
     for (int iBasis = 0; iBasis < numBasis; ++iBasis)
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
 	for (int iDim=0; iDim < spaceDim; ++iDim) {
@@ -913,7 +915,7 @@
 void
 pylith::feassemble::ElasticityExplicitTet4::integrateJacobian(
 			    topology::Field<topology::Mesh>* jacobian,
-			    const double t,
+			    const PylithScalar t,
 			    topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -954,8 +956,8 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   // Get sections
@@ -963,7 +965,7 @@
   assert(!jacobianSection.isNull());
   UpdateAddVisitor jacobianVisitor(*jacobianSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -984,7 +986,7 @@
 #endif
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double volume = _volume(coordinatesCell);
+    const PylithScalar volume = _volume(coordinatesCell);
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(geometryEvent);
@@ -1000,7 +1002,7 @@
 #endif
 
     // Compute Jacobian for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     assert(volume > 0.0);
     _cellVector = density[0] * volume / (4.0 * dt2);
     
@@ -1030,35 +1032,35 @@
 
 // ----------------------------------------------------------------------
 // Compute volume of tetrahedral cell.
-double
+PylithScalar
 pylith::feassemble::ElasticityExplicitTet4::_volume(
-			     const double_array& coordinatesCell) const
+			     const scalar_array& coordinatesCell) const
 { // __volume
   assert(12 == coordinatesCell.size());
 
-  const double x0 = coordinatesCell[0];
-  const double y0 = coordinatesCell[1];
-  const double z0 = coordinatesCell[2];
+  const PylithScalar x0 = coordinatesCell[0];
+  const PylithScalar y0 = coordinatesCell[1];
+  const PylithScalar z0 = coordinatesCell[2];
 
-  const double x1 = coordinatesCell[3];
-  const double y1 = coordinatesCell[4];
-  const double z1 = coordinatesCell[5];
+  const PylithScalar x1 = coordinatesCell[3];
+  const PylithScalar y1 = coordinatesCell[4];
+  const PylithScalar z1 = coordinatesCell[5];
 
-  const double x2 = coordinatesCell[6];
-  const double y2 = coordinatesCell[7];
-  const double z2 = coordinatesCell[8];
+  const PylithScalar x2 = coordinatesCell[6];
+  const PylithScalar y2 = coordinatesCell[7];
+  const PylithScalar z2 = coordinatesCell[8];
 
-  const double x3 = coordinatesCell[9];
-  const double y3 = coordinatesCell[10];
-  const double z3 = coordinatesCell[11];
+  const PylithScalar x3 = coordinatesCell[9];
+  const PylithScalar y3 = coordinatesCell[10];
+  const PylithScalar z3 = coordinatesCell[11];
 
-  const double det = 
+  const PylithScalar det = 
     x1*(y2*z3-y3*z2)-y1*(x2*z3-x3*z2)+(x2*y3-x3*y2)*z1 - 
     x0*((y2*z3-y3*z2)-y1*(z3-z2)+(y3-y2)*z1) +
     y0*((x2*z3-x3*z2)-x1*(z3-z2)+(x3-x2)*z1) -
     z0*((x2*y3-x3*y2)-x1*(y3-y2)+(x3-x2)*y1);
     
-  const double volume = det / 6.0;
+  const PylithScalar volume = det / 6.0;
   PetscLogFlops(48);
 
   return volume;  

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -88,13 +88,13 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set normalized viscosity for numerical damping.
    *
    * @param viscosity Normalized viscosity (viscosity / elastic modulus).
    */
-  void normViscosity(const double viscosity);
+  void normViscosity(const PylithScalar viscosity);
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -110,7 +110,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -120,7 +120,7 @@
    * @param fields Solution fields
    */
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -131,7 +131,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -142,7 +142,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
 // PRIVATE METHODS //////////////////////////////////////////////////////
@@ -153,22 +153,22 @@
    * @param coordinatesCell Coordinates of vertices of cell.
    * @returns Volume of cell.
    */
-  double _volume(const double_array& coordinatesCell) const;
+  PylithScalar _volume(const scalar_array& coordinatesCell) const;
 
   /** Compute derivatives of basis functions of tetrahedral cell.
    *
    * @param coordinatesCell Coordinates of vertices of cell.
    * @returns Derivatives of basis functions.
    */
-  const double_array& _basisDeriv(const double_array& coordinatesCell) const;
+  const scalar_array& _basisDeriv(const scalar_array& coordinatesCell) const;
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double_array _basisDerivArray; ///< Array of basis derivatives
+  scalar_array _basisDerivArray; ///< Array of basis derivatives
 
-  double _dtm1; ///< Time step for t-dt1 -> t
-  double _normViscosity; ///< Normalized viscosity for numerical damping.
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _normViscosity; ///< Normalized viscosity for numerical damping.
 
   static const int _spaceDim;
   static const int _cellDim;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -75,7 +75,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityExplicitTri3::timeStep(const double dt)
+pylith::feassemble::ElasticityExplicitTri3::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -90,7 +90,7 @@
 // ----------------------------------------------------------------------
 // Set normalized viscosity for numerical damping.
 void
-pylith::feassemble::ElasticityExplicitTri3::normViscosity(const double viscosity)
+pylith::feassemble::ElasticityExplicitTri3::normViscosity(const PylithScalar viscosity)
 { // normViscosity
   if (viscosity < 0.0) {
     std::ostringstream msg;
@@ -119,7 +119,7 @@
 void
 pylith::feassemble::ElasticityExplicitTri3::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   assert(0 != _quadrature);
@@ -139,7 +139,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   assert(_quadrature->numQuadPts() == _numQuadPts);
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == _numQuadPts);
   assert(_quadrature->numBasis() == _numBasis);
   assert(_quadrature->spaceDim() == _spaceDim);
@@ -163,10 +163,10 @@
 			   "domain not implemented yet.");
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -179,20 +179,20 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -201,7 +201,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
   
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -209,15 +209,15 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -235,7 +235,7 @@
     // Compute geometry information for current cell
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double area = _area(coordinatesCell);
+    const PylithScalar area = _area(coordinatesCell);
     assert(area > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -269,7 +269,7 @@
     _logger->eventBegin(computeEvent);
 #endif
 
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     assert(density.size() == 1);
 
     // Compute body force vector if gravity is being used.
@@ -286,13 +286,14 @@
           lengthScale);
 
       // Compute action for element body forces
-      const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
+      const int err = db->query(&gravVec[0], gravVec.size(),
         &quadPtsGlobal[0], spaceDim, cs);
       if (err)
         throw std::runtime_error("Unable to get gravity vector for point.");
       _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
           gravityScale);
-      const double wtVertex = density[0] * area / 3.0;
+      const PylithScalar wtVertex = density[0] * area / 3.0;
       for (int iBasis=0; iBasis < numBasis; ++iBasis)
         for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
@@ -300,7 +301,7 @@
     } // if
 
     // Compute action for inertial terms
-    const double wtVertex = density[0] * area / 9.0;
+    const PylithScalar wtVertex = density[0] * area / 9.0;
     for (int iBasis = 0; iBasis < numBasis; ++iBasis)
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
         for (int iDim = 0; iDim < spaceDim; ++iDim)
@@ -318,24 +319,24 @@
     dispAdjCell = dispCell + viscosity * velCell;
 
     // Compute B(transpose) * sigma, first computing strains
-    const double x0 = coordinatesCell[0];
-    const double y0 = coordinatesCell[1];
+    const PylithScalar x0 = coordinatesCell[0];
+    const PylithScalar y0 = coordinatesCell[1];
 
-    const double x1 = coordinatesCell[2];
-    const double y1 = coordinatesCell[3];
+    const PylithScalar x1 = coordinatesCell[2];
+    const PylithScalar y1 = coordinatesCell[3];
 
-    const double x2 = coordinatesCell[4];
-    const double y2 = coordinatesCell[5];
+    const PylithScalar x2 = coordinatesCell[4];
+    const PylithScalar y2 = coordinatesCell[5];
 
-    const double scaleB = 2.0 * area;
-    const double b0 = (y1 - y2) / scaleB;
-    const double c0 = (x2 - x1) / scaleB;
+    const PylithScalar scaleB = 2.0 * area;
+    const PylithScalar b0 = (y1 - y2) / scaleB;
+    const PylithScalar c0 = (x2 - x1) / scaleB;
 
-    const double b1 = (y2 - y0) / scaleB;
-    const double c1 = (x0 - x2) / scaleB;
+    const PylithScalar b1 = (y2 - y0) / scaleB;
+    const PylithScalar c1 = (x0 - x2) / scaleB;
 
-    const double b2 = (y0 - y1) / scaleB;
-    const double c2 = (x1 - x0) / scaleB;
+    const PylithScalar b2 = (y0 - y1) / scaleB;
+    const PylithScalar c2 = (x1 - x0) / scaleB;
 
     assert(strainCell.size() == 3);
     strainCell[0] = b2*dispAdjCell[4] + b1*dispAdjCell[2] + b0*dispAdjCell[0];
@@ -346,7 +347,7 @@
 		     c1*dispAdjCell[2] + b0*dispAdjCell[1] + c0*dispAdjCell[0]) / 2.0;
 
 
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     PetscLogFlops(34);
@@ -388,12 +389,12 @@
 void
 pylith::feassemble::ElasticityExplicitTri3::integrateResidualLumped(
         const topology::Field<topology::Mesh>& residual,
-        const double t,
+        const PylithScalar t,
         topology::SolutionFields* const fields)
 { // integrateResidualLumped
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityExplicitTri3::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -434,10 +435,10 @@
          "domain not implemented yet.");
 
   // Allocate vectors for cell values.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -453,20 +454,20 @@
   assert(!sieve.isNull());
 
   // Get sections
-  double_array accCell(numBasis*spaceDim);
+  scalar_array accCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& accSection = 
     fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
   RestrictVisitor accVisitor(*accSection, accCell.size(), &accCell[0]);
 
-  double_array velCell(numBasis*spaceDim);
+  scalar_array velCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     fields->get("velocity(t)").section();
   assert(!velSection.isNull());
   RestrictVisitor velVisitor(*velSection, velCell.size(), &velCell[0]);
 
-  double_array dispCell(numBasis*spaceDim);
-  double_array dispAdjCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array dispAdjCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -475,7 +476,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -483,18 +484,18 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale =
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale =
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
             _normalizer->densityScale());
 
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(_normViscosity > 0.0);
   assert(dt > 0);
-  const double viscosity = dt*_normViscosity;
+  const PylithScalar viscosity = dt*_normViscosity;
 
   // Get parameters used in integration.
-  double_array valuesIJ(numBasis);
+  scalar_array valuesIJ(numBasis);
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -539,7 +540,7 @@
 #endif
 
     // Compute geometry information for current cell
-    const double area = _area(coordinatesCell);
+    const PylithScalar area = _area(coordinatesCell);
     assert(area > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -551,7 +552,7 @@
     _material->retrievePropsAndVars(*c_iter);
 
     // Get density at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
 
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(stateVarsEvent);
@@ -575,13 +576,14 @@
           lengthScale);
 
       // Compute action for element body forces
-      const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
+      const int err = db->query(&gravVec[0], gravVec.size(),
         &quadPtsGlobal[0], spaceDim, cs);
       if (err)
         throw std::runtime_error("Unable to get gravity vector for point.");
       _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
           gravityScale);
-      const double wtVertex = density[0] * area / 3.0;
+      const PylithScalar wtVertex = density[0] * area / 3.0;
       for (int iBasis=0; iBasis < numBasis; ++iBasis)
         for (int iDim=0; iDim < spaceDim; ++iDim)
             _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
@@ -589,7 +591,7 @@
     } // if
 
     // Compute action for inertial terms
-    const double wtVertex = density[0] * area / 3.0;
+    const PylithScalar wtVertex = density[0] * area / 3.0;
     _cellVector -= wtVertex * accCell;
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -603,24 +605,24 @@
     dispAdjCell = dispCell + viscosity * velCell;
 
     // Compute B(transpose) * sigma, first computing strains
-    const double x0 = coordinatesCell[0];
-    const double y0 = coordinatesCell[1];
+    const PylithScalar x0 = coordinatesCell[0];
+    const PylithScalar y0 = coordinatesCell[1];
 
-    const double x1 = coordinatesCell[2];
-    const double y1 = coordinatesCell[3];
+    const PylithScalar x1 = coordinatesCell[2];
+    const PylithScalar y1 = coordinatesCell[3];
 
-    const double x2 = coordinatesCell[4];
-    const double y2 = coordinatesCell[5];
+    const PylithScalar x2 = coordinatesCell[4];
+    const PylithScalar y2 = coordinatesCell[5];
 
-    const double scaleB = 2.0 * area;
-    const double b0 = (y1 - y2) / scaleB;
-    const double c0 = (x2 - x1) / scaleB;
+    const PylithScalar scaleB = 2.0 * area;
+    const PylithScalar b0 = (y1 - y2) / scaleB;
+    const PylithScalar c0 = (x2 - x1) / scaleB;
 
-    const double b1 = (y2 - y0) / scaleB;
-    const double c1 = (x0 - x2) / scaleB;
+    const PylithScalar b1 = (y2 - y0) / scaleB;
+    const PylithScalar c1 = (x0 - x2) / scaleB;
 
-    const double b2 = (y0 - y1) / scaleB;
-    const double c2 = (x1 - x0) / scaleB;
+    const PylithScalar b2 = (y0 - y1) / scaleB;
+    const PylithScalar c2 = (x1 - x0) / scaleB;
 
     assert(strainCell.size() == 3);
     strainCell[0] = b2*dispAdjCell[4] + b1*dispAdjCell[2] + b0*dispAdjCell[0];
@@ -630,7 +632,7 @@
     strainCell[2] = (b2*dispAdjCell[5] + c2*dispAdjCell[4] + b1*dispAdjCell[3] + 
 		     c1*dispAdjCell[2] + b0*dispAdjCell[1] + c0*dispAdjCell[0]) / 2.0;
 
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
 #if defined(DETAILED_EVENT_LOGGING)
     PetscLogFlops(34);
@@ -673,7 +675,7 @@
 void
 pylith::feassemble::ElasticityExplicitTri3::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -692,7 +694,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -714,7 +716,7 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispSection = 
     fields->get("disp(t)").section();
   assert(!dispSection.isNull());
@@ -724,8 +726,8 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
@@ -736,7 +738,7 @@
 				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
 					   sieveMesh->depth())*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -759,7 +761,7 @@
     // Compute geometry information for current cell
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double area = _area(coordinatesCell);
+    const PylithScalar area = _area(coordinatesCell);
     assert(area > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -779,11 +781,11 @@
     _resetCellMatrix();
 
     // Get material physical properties at quadrature points for this cell
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     assert(density.size() == 1);
 
     // Compute Jacobian for inertial terms
-    const double wtVertex = density[0] * area / (9.0 * dt2);
+    const PylithScalar wtVertex = density[0] * area / (9.0 * dt2);
     for (int iBasis = 0; iBasis < numBasis; ++iBasis)
       for (int jBasis = 0; jBasis < numBasis; ++jBasis)
 	for (int iDim=0; iDim < spaceDim; ++iDim) {
@@ -824,7 +826,7 @@
 void
 pylith::feassemble::ElasticityExplicitTri3::integrateJacobian(
 			    topology::Field<topology::Mesh>* jacobian,
-			    const double t,
+			    const PylithScalar t,
 			    topology::SolutionFields* fields)
 { // integrateJacobian
   assert(0 != _quadrature);
@@ -865,8 +867,8 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get parameters used in integration.
-  const double dt = _dt;
-  const double dt2 = dt*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
   assert(dt > 0);
 
   // Get sections
@@ -874,7 +876,7 @@
   assert(!jacobianSection.isNull());
   UpdateAddVisitor jacobianVisitor(*jacobianSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -895,7 +897,7 @@
 #endif
     coordsVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, coordsVisitor);
-    const double area = _area(coordinatesCell);
+    const PylithScalar area = _area(coordinatesCell);
     assert(area > 0.0);
 
 #if defined(DETAILED_EVENT_LOGGING)
@@ -912,7 +914,7 @@
 #endif
 
     // Compute Jacobian for inertial terms
-    const double_array& density = _material->calcDensity();
+    const scalar_array& density = _material->calcDensity();
     _cellVector = density[0] * area / (3.0 * dt2);
     
 #if defined(DETAILED_EVENT_LOGGING)
@@ -941,22 +943,22 @@
 
 // ----------------------------------------------------------------------
 // Compute area of triangular cell.
-double
+PylithScalar
 pylith::feassemble::ElasticityExplicitTri3::_area(
-			     const double_array& coordinatesCell) const
+			     const scalar_array& coordinatesCell) const
 { // __area
   assert(6 == coordinatesCell.size());
 
-  const double x0 = coordinatesCell[0];
-  const double y0 = coordinatesCell[1];
+  const PylithScalar x0 = coordinatesCell[0];
+  const PylithScalar y0 = coordinatesCell[1];
 
-  const double x1 = coordinatesCell[2];
-  const double y1 = coordinatesCell[3];
+  const PylithScalar x1 = coordinatesCell[2];
+  const PylithScalar y1 = coordinatesCell[3];
 
-  const double x2 = coordinatesCell[4];
-  const double y2 = coordinatesCell[5];
+  const PylithScalar x2 = coordinatesCell[4];
+  const PylithScalar y2 = coordinatesCell[5];
 
-  const double area = 0.5*((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0));
+  const PylithScalar area = 0.5*((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0));
   PetscLogFlops(8);
 
   return area;  

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityExplicitTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -88,13 +88,13 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set normalized viscosity for numerical damping.
    *
    * @param viscosity Normalized viscosity (viscosity / elastic modulus).
    */
-  void normViscosity(const double viscosity);
+  void normViscosity(const PylithScalar viscosity);
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -110,7 +110,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -120,7 +120,7 @@
    * @param fields Solution fields
    */
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -131,7 +131,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -142,7 +142,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
 // PRIVATE METHODS //////////////////////////////////////////////////////
@@ -153,22 +153,22 @@
    * @param coordinatesCell Coordinates of vertices of cell.
    * @returns Area of cell.
    */
-  double _area(const double_array& coordinatesCell) const;
+  PylithScalar _area(const scalar_array& coordinatesCell) const;
 
   /** Compute derivatives of basis functions of triangular cell.
    *
    * @param coordinatesCell Coordinates of vertices of cell.
    * @returns Derivatives of basis functions.
    */
-  const double_array& _basisDeriv(const double_array& coordinatesCell) const;
+  const scalar_array& _basisDeriv(const scalar_array& coordinatesCell) const;
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double_array _basisDerivArray; ///< Array of basis derivatives
+  scalar_array _basisDerivArray; ///< Array of basis derivatives
 
-  double _dtm1; ///< Time step for t-dt1 -> t
-  double _normViscosity; ///< Normalized viscosity for numerical damping.
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _normViscosity; ///< Normalized viscosity for numerical damping.
 
   static const int _spaceDim;
   static const int _cellDim;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
 #include "pylith/utils/EventLogger.hh" // USES EventLogger
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -50,7 +50,7 @@
 
 typedef pylith::topology::Field<pylith::topology::Mesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::Mesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
 // Constructor
@@ -77,7 +77,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityImplicit::timeStep(const double dt)
+pylith::feassemble::ElasticityImplicit::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -90,7 +90,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for advancing from time t to time t+dt.
-double
+PylithScalar
 pylith::feassemble::ElasticityImplicit::stableTimeStep(const topology::Mesh& mesh) const
 { // stableTimeStep
   assert(0 != _material);
@@ -113,12 +113,12 @@
 void
 pylith::feassemble::ElasticityImplicit::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityImplicit::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
   
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -137,7 +137,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -170,11 +170,11 @@
     assert(0);
 
   // Allocate vectors for cell values.
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -187,13 +187,13 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTSection = 
     fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
   RestrictVisitor dispTVisitor(*dispTSection, dispTCell.size(), &dispTCell[0]);
 
-  double_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection = 
     fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -203,7 +203,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -211,8 +211,8 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
@@ -245,10 +245,10 @@
     sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
@@ -260,23 +260,24 @@
       assert(0 != cs);
 
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
           lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+        const int err = db->query(&gravVec[0], gravVec.size(),
             &quadPtsGlobal[0], spaceDim, cs);
         if (err)
           throw std::runtime_error("Unable to get gravity vector for point.");
         _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
             gravityScale);
-        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
         for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
-          const double valI = wt * basis[iQ + iBasis];
+          const PylithScalar valI = wt * basis[iQ + iBasis];
           for (int iDim = 0; iDim < spaceDim; ++iDim) {
             _cellVector[iBasis * spaceDim + iDim] += valI * gravVec[iDim];
           } // for
@@ -289,7 +290,7 @@
     // Compute B(transpose) * sigma, first computing strains
     calcTotalStrainFn(&strainCell, basisDeriv, dispTpdtCell, 
 		      numBasis, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell);
 
@@ -312,12 +313,12 @@
 void
 pylith::feassemble::ElasticityImplicit::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   /// Member prototype for _elasticityJacobianXD()
   typedef void (pylith::feassemble::ElasticityImplicit::*elasticityJacobian_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -336,7 +337,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -350,34 +351,27 @@
   // Set variables dependent on dimension of cell
   totalStrain_fn_type calcTotalStrainFn;
   elasticityJacobian_fn_type elasticityJacobianFn;
-  elasticityJacobian_fn_type elasticityPreconFn;
   if (1 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian1D;
-    elasticityPreconFn = 
-      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon1D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D;
   } else if (2 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian2D;
-    elasticityPreconFn = 
-      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon2D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain2D;
   } else if (3 == cellDim) {
     elasticityJacobianFn = 
       &pylith::feassemble::ElasticityImplicit::_elasticityJacobian3D;
-    elasticityPreconFn = 
-      &pylith::feassemble::ElasticityImplicit::_elasticityPrecon3D;
     calcTotalStrainFn = 
       &pylith::feassemble::IntegratorElasticity::_calcTotalStrain3D;
   } else
     assert(0);
 
   // Allocate vector for total strain
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
 
   // Get cell information
@@ -391,13 +385,13 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTSection = 
     fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
   RestrictVisitor dispTVisitor(*dispTSection, dispTCell.size(), &dispTCell[0]);
 
-  double_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection = 
     fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -409,7 +403,7 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
@@ -417,12 +411,15 @@
 					    dispTSection);
   assert(!globalOrder.isNull());
   // We would need to request unique points here if we had an interpolated mesh
-  IndicesVisitor jacobianVisitor(*dispTSection,
-				 *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+  assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+  assert(closureSize >= 0);
+  IndicesVisitor jacobianVisitor(*dispTSection, *globalOrder,
+				 closureSize*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -458,9 +455,9 @@
     sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
@@ -471,7 +468,7 @@
 		      numBasis, numQuadPts);
       
     // Get "elasticity" matrix at quadrature points for this cell
-    const double_array& elasticConsts = 
+    const scalar_array& elasticConsts = 
       _material->calcDerivElastic(strainCell);
 
     CALL_MEMBER_FN(*this, elasticityJacobianFn)(elasticConsts);
@@ -481,12 +478,12 @@
       int lwork = 5*n;
       int idummy = 0;
       int lierr = 0;
-      double *elemMat = new double[n*n];
-      double *svalues = new double[n];
-      double *work    = new double[lwork];
-      double minSV = 0;
-      double maxSV = 0;
-      double sdummy = 0;
+      PylithScalar *elemMat = new PylithScalar[n*n];
+      PylithScalar *svalues = new PylithScalar[n];
+      PylithScalar *work    = new PylithScalar[lwork];
+      PylithScalar minSV = 0;
+      PylithScalar maxSV = 0;
+      PylithScalar sdummy = 0;
 
       const int n2 = n*n;
       for (int i = 0; i < n2; ++i)
@@ -513,17 +510,6 @@
 					jacobianVisitor, *c_iter,
 					&_cellMatrix[0], ADD_VALUES);
     CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
-#if 0
-    // Get laplacian matrix at quadrature points for this cell
-    CALL_MEMBER_FN(*this, elasticityPreconFn)(elasticConsts);
-
-    // Assemble cell contribution into PETSc preconditioner matrix.
-    jacobianVisitor.clear();
-    PetscErrorCode err = updateOperator(preconMat, *sieveMesh->getSieve(),
-					jacobianVisitor, *c_iter,
-					&_cellMatrix[0], ADD_VALUES);
-    CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
-#endif
   } // for
   _needNewJacobian = false;
   _material->resetNeedNewJacobian();

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicit.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -77,7 +77,7 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get stable time step for advancing from time t to time t+dt.
    *
@@ -86,7 +86,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStep(const topology::Mesh& mesh) const;
+  PylithScalar stableTimeStep(const topology::Mesh& mesh) const;
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -110,7 +110,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -121,7 +121,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
   
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
@@ -136,7 +136,7 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
 
 }; // ElasticityImplicit
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
 #include "pylith/utils/EventLogger.hh" // USES EventLogger
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -56,7 +56,7 @@
 
 typedef pylith::topology::Field<pylith::topology::Mesh>::RestrictVisitor RestrictVisitor;
 typedef pylith::topology::Field<pylith::topology::Mesh>::UpdateAddVisitor UpdateAddVisitor;
-typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PylithInt> IndicesVisitor;
 
 // ----------------------------------------------------------------------
 // Constructor
@@ -83,7 +83,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityImplicitCUDA::timeStep(const double dt)
+pylith::feassemble::ElasticityImplicitCUDA::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -96,7 +96,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for advancing from time t to time t+dt.
-double
+PylithScalar
 pylith::feassemble::ElasticityImplicitCUDA::stableTimeStep(const topology::Mesh& mesh) const
 { // stableTimeStep
   assert(0 != _material);
@@ -119,12 +119,12 @@
 void
 pylith::feassemble::ElasticityImplicitCUDA::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityImplicitCUDA::*elasticityResidual_fn_type)
-    (const double_array&);
+    (const scalar_array&);
   
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -143,7 +143,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -176,11 +176,11 @@
     assert(0);
 
   // Allocate vectors for cell values.
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -193,13 +193,13 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTSection = 
     fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
   RestrictVisitor dispTVisitor(*dispTSection, dispTCell.size(), &dispTCell[0]);
 
-  double_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection = 
     fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -209,7 +209,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -217,8 +217,8 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
@@ -251,10 +251,10 @@
     sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
@@ -266,23 +266,24 @@
       assert(0 != cs);
 
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
           lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad = 0; iQuad < numQuadPts; ++iQuad) {
-        const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+        const int err = db->query(&gravVec[0], gravVec.size(),
             &quadPtsGlobal[0], spaceDim, cs);
         if (err)
           throw std::runtime_error("Unable to get gravity vector for point.");
         _normalizer->nondimensionalize(&gravVec[0], gravVec.size(),
             gravityScale);
-        const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+        const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
         for (int iBasis = 0, iQ = iQuad * numBasis; iBasis < numBasis; ++iBasis) {
-          const double valI = wt * basis[iQ + iBasis];
+          const PylithScalar valI = wt * basis[iQ + iBasis];
           for (int iDim = 0; iDim < spaceDim; ++iDim) {
             _cellVector[iBasis * spaceDim + iDim] += valI * gravVec[iDim];
           } // for
@@ -295,7 +296,7 @@
     // Compute B(transpose) * sigma, first computing strains
     calcTotalStrainFn(&strainCell, basisDeriv, dispTpdtCell, 
 		      numBasis, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell);
 
@@ -314,7 +315,7 @@
 } // integrateResidual
 
 void
-pylith::feassemble::ElasticityImplicitCUDA::calculateGeometry(const int spaceDim, const double coords[], float geometry[])
+pylith::feassemble::ElasticityImplicitCUDA::calculateGeometry(const int spaceDim, const PylithScalar coords[], float geometry[])
 {
   // Just use identity for now
   PetscMemzero(geometry, spaceDim*spaceDim*sizeof(float));
@@ -326,12 +327,12 @@
 void
 pylith::feassemble::ElasticityImplicitCUDA::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   /// Member prototype for _elasticityJacobianXD()
   typedef void (pylith::feassemble::ElasticityImplicitCUDA::*elasticityJacobian_fn_type)
-    (const double_array&);
+    (const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -350,7 +351,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -376,8 +377,8 @@
     assert(0);
 
   // Allocate vector for total strain
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
 
   // Get cell information
@@ -391,13 +392,13 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get sections
-  double_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTSection = 
     fields->get("disp(t)").section();
   assert(!dispTSection.isNull());
   RestrictVisitor dispTVisitor(*dispTSection, dispTCell.size(), &dispTCell[0]);
 
-  double_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& dispTIncrSection = 
     fields->get("dispIncr(t->t+dt)").section();
   assert(!dispTIncrSection.isNull());
@@ -409,7 +410,7 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
@@ -417,7 +418,7 @@
 					    dispTSection);
   assert(!globalOrder.isNull());
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -443,9 +444,9 @@
     _quadrature->computeGeometry(coordinatesCell, *c_iter);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Get physical properties and state variables for cell.
     _material->retrievePropsAndVars(*c_iter);
@@ -465,15 +466,19 @@
 		      numBasis, numQuadPts);
       
     // Get "elasticity" matrix at quadrature points for this cell
-    const double_array& elasticConsts = 
+    const scalar_array& elasticConsts = 
       _material->calcDerivElastic(strainCell);
 #endif
   } // for
 
+  // Copy cpu input to gpu
+
   const int elementBatchSize      = 32;
   const int numConcurrentElements = 1;
   launchKernel(spaceDim, numBasis, elementBatchSize, numConcurrentElements, cells->size(), analytic_gpu, geometry_gpu, elemMat_gpu);
 
+  // Copy gpu output to cpu
+
   // Update global matrix
   for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
        c_iter != cellsEnd;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitCUDA.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -77,7 +77,7 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get stable time step for advancing from time t to time t+dt.
    *
@@ -86,7 +86,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStep(const topology::Mesh& mesh) const;
+  PylithScalar stableTimeStep(const topology::Mesh& mesh) const;
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -110,7 +110,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -121,7 +121,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
   
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
@@ -135,13 +135,13 @@
 
   void setupCUDA(const int dim, const int numBasisFuncs, const int numCells);
   void calculateGrid(const int N, const int blockSize, unsigned int& x, unsigned int& y, unsigned int& z);
-  void calculateGeometry(const int spaceDim, const double coords[], float geometry[]);
+  void calculateGeometry(const int spaceDim, const PylithScalar coords[], float geometry[]);
   void cleanupCUDA();
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
 
   float  K[4*3*4*3*3*3];
   float *geometry;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
 #include "pylith/utils/EventLogger.hh" // USES EventLogger
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/macrodefs.h" // USES CALL_MEMBER_FN
 #include "pylith/utils/lapack.h" // USES LAPACKdgesvd
 
@@ -69,7 +69,7 @@
 // ----------------------------------------------------------------------
 // Set time step for advancing from time t to time t+dt.
 void
-pylith::feassemble::ElasticityImplicitLgDeform::timeStep(const double dt)
+pylith::feassemble::ElasticityImplicitLgDeform::timeStep(const PylithScalar dt)
 { // timeStep
   if (_dt != -1.0)
     _dtm1 = _dt;
@@ -82,7 +82,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for advancing from time t to time t+dt.
-double
+PylithScalar
 pylith::feassemble::ElasticityImplicitLgDeform::stableTimeStep(const topology::Mesh& mesh) const
 { // stableTimeStep
   assert(0 != _material);
@@ -105,12 +105,12 @@
 void
 pylith::feassemble::ElasticityImplicitLgDeform::integrateResidual(
 			  const topology::Field<topology::Mesh>& residual,
-			  const double t,
+			  const PylithScalar t,
 			  topology::SolutionFields* const fields)
 { // integrateResidual
   /// Member prototype for _elasticityResidualXD()
   typedef void (pylith::feassemble::ElasticityImplicitLgDeform::*elasticityResidual_fn_type)
-    (const double_array&, const double_array&);
+    (const scalar_array&, const scalar_array&);
   
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -129,7 +129,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -162,13 +162,13 @@
     assert(0);
 
   // Allocate vectors for cell values.
-  double_array dispTCell(numBasis*spaceDim);
-  double_array dispTIncrCell(numBasis*spaceDim);
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array gravVec(spaceDim);
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array gravVec(spaceDim);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -195,7 +195,7 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -203,8 +203,8 @@
 				coordinatesCell.size(), &coordinatesCell[0]);
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double gravityScale = 
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar gravityScale = 
     _normalizer->pressureScale() / (_normalizer->lengthScale() *
 				    _normalizer->densityScale());
 
@@ -237,10 +237,10 @@
     sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
-    const double_array& quadPtsNondim = _quadrature->quadPts();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& quadPtsNondim = _quadrature->quadPts();
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
@@ -252,24 +252,25 @@
       assert(0 != cs);
       
       // Get density at quadrature points for this cell
-      const double_array& density = _material->calcDensity();
+      const scalar_array& density = _material->calcDensity();
 
       quadPtsGlobal = quadPtsNondim;
       _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				  lengthScale);
 
       // Compute action for element body forces
+      spatialdata::spatialdb::SpatialDB* db = _gravityField;
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-	const int err = _gravityField->query(&gravVec[0], gravVec.size(),
+	const int err = db->query(&gravVec[0], gravVec.size(),
 					     &quadPtsGlobal[0], spaceDim, cs);
 	if (err)
 	  throw std::runtime_error("Unable to get gravity vector for point.");
 	_normalizer->nondimensionalize(&gravVec[0], gravVec.size(), 
 				       gravityScale);
-	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
+	const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
 	for (int iBasis=0, iQ=iQuad*numBasis;
 	     iBasis < numBasis; ++iBasis) {
-	  const double valI = wt*basis[iQ+iBasis];
+	  const PylithScalar valI = wt*basis[iQ+iBasis];
 	  for (int iDim=0; iDim < spaceDim; ++iDim) {
 	    _cellVector[iBasis*spaceDim+iDim] += valI*gravVec[iDim];
 	  } // for
@@ -283,7 +284,7 @@
     _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispTpdtCell,
 		     numBasis, numQuadPts, spaceDim);
     calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityResidualFn)(stressCell, dispTpdtCell);
 
@@ -306,12 +307,12 @@
 void
 pylith::feassemble::ElasticityImplicitLgDeform::integrateJacobian(
 					topology::Jacobian* jacobian,
-					const double t,
+					const PylithScalar t,
 					topology::SolutionFields* fields)
 { // integrateJacobian
   /// Member prototype for _elasticityJacobianXD()
   typedef void (pylith::feassemble::ElasticityImplicitLgDeform::*elasticityJacobian_fn_type)
-    (const double_array&, const double_array&, const double_array&);
+    (const scalar_array&, const scalar_array&, const scalar_array&);
 
   assert(0 != _quadrature);
   assert(0 != _material);
@@ -330,7 +331,7 @@
 
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& quadWts = _quadrature->quadWts();
+  const scalar_array& quadWts = _quadrature->quadWts();
   assert(quadWts.size() == numQuadPts);
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
@@ -363,12 +364,12 @@
     assert(0);
 
   // Allocate vector for total strain
-  double_array dispTCell(numBasis*spaceDim);
-  double_array dispTIncrCell(numBasis*spaceDim);
-  double_array dispTpdtCell(numBasis*spaceDim);
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array dispTCell(numBasis*spaceDim);
+  scalar_array dispTIncrCell(numBasis*spaceDim);
+  scalar_array dispTpdtCell(numBasis*spaceDim);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array stressCell(numQuadPts*tensorSize);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
@@ -397,7 +398,7 @@
   assert(0 != jacobianMat);
 
   // Get parameters used in integration.
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
   assert(dt > 0);
 
   const ALE::Obj<SieveMesh::order_type>& globalOrder = 
@@ -405,12 +406,15 @@
 					    dispTSection);
   assert(!globalOrder.isNull());
   // We would need to request unique points here if we had an interpolated mesh
-  IndicesVisitor jacobianVisitor(*dispTSection,
-				 *globalOrder,
-				 (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
-					   sieveMesh->depth())*spaceDim);
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+  assert(!sieve.isNull());
+  const int closureSize = 
+    int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+  assert(closureSize >= 0);
+  IndicesVisitor jacobianVisitor(*dispTSection, *globalOrder, 
+				 closureSize*spaceDim);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -446,9 +450,9 @@
     sieveMesh->restrictClosure(*c_iter, dispTIncrVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basis = _quadrature->basis();
-    const double_array& basisDeriv = _quadrature->basisDeriv();
-    const double_array& jacobianDet = _quadrature->jacobianDet();
+    const scalar_array& basis = _quadrature->basis();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& jacobianDet = _quadrature->jacobianDet();
 
     // Compute current estimate of displacement at time t+dt using
     // solution increment.
@@ -460,11 +464,11 @@
     calcTotalStrainFn(&strainCell, deformCell, numQuadPts);
 
     // Get "elasticity" matrix at quadrature points for this cell
-    const double_array& elasticConsts = 
+    const scalar_array& elasticConsts = 
       _material->calcDerivElastic(strainCell);
 
     // Get Second Priola-Kirchoff stress tensor
-    const double_array& stressCell = _material->calcStress(strainCell, true);
+    const scalar_array& stressCell = _material->calcStress(strainCell, true);
 
     CALL_MEMBER_FN(*this, elasticityJacobianFn)(elasticConsts, stressCell,
 						dispTpdtCell);
@@ -474,12 +478,12 @@
       int lwork = 5*n;
       int idummy = 0;
       int lierr = 0;
-      double *elemMat = new double[n*n];
-      double *svalues = new double[n];
-      double *work    = new double[lwork];
-      double minSV = 0;
-      double maxSV = 0;
-      double sdummy = 0;
+      PylithScalar *elemMat = new PylithScalar[n*n];
+      PylithScalar *svalues = new PylithScalar[n];
+      PylithScalar *work    = new PylithScalar[lwork];
+      PylithScalar minSV = 0;
+      PylithScalar maxSV = 0;
+      PylithScalar sdummy = 0;
 
       const int n2 = n*n;
       for (int i = 0; i < n2; ++i)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -78,7 +78,7 @@
    *
    * @param dt Time step
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get stable time step for advancing from time t to time t+dt.
    *
@@ -87,7 +87,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStep(const topology::Mesh& mesh) const;
+  PylithScalar stableTimeStep(const topology::Mesh& mesh) const;
 
   /** Set flag for setting constraints for total field solution or
    *  incremental field solution.
@@ -111,7 +111,7 @@
    * @param fields Solution fields
    */
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -122,7 +122,7 @@
    * @param fields Solution fields
    */
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
   
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
@@ -137,7 +137,7 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 
-  double _dtm1; ///< Time step for t-dt1 -> t
+  PylithScalar _dtm1; ///< Time step for t-dt1 -> t
 
 }; // ElasticityImplicitLgDeform
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryHex3D::GeometryHex3D(void) :
   CellGeometry(HEXAHEDRON, 3)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,  -1.0,
     +1.0,  -1.0,  -1.0,
     +1.0,  +1.0,  -1.0,
@@ -71,9 +71,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryHex3D::ptsRefToGlobal(double* ptsGlobal,
-						  const double* ptsRef,
-						  const double* vertices,
+pylith::feassemble::GeometryHex3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						  const PylithScalar* ptsRef,
+						  const PylithScalar* vertices,
 						  const int dim,
 						  const int npts) const
 { // ptsRefToGlobal
@@ -83,70 +83,70 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double x4 = vertices[12];
-  const double y4 = vertices[13];
-  const double z4 = vertices[14];
+  const PylithScalar x4 = vertices[12];
+  const PylithScalar y4 = vertices[13];
+  const PylithScalar z4 = vertices[14];
 
-  const double x5 = vertices[15];
-  const double y5 = vertices[16];
-  const double z5 = vertices[17];
+  const PylithScalar x5 = vertices[15];
+  const PylithScalar y5 = vertices[16];
+  const PylithScalar z5 = vertices[17];
 
-  const double x6 = vertices[18];
-  const double y6 = vertices[19];
-  const double z6 = vertices[20];
+  const PylithScalar x6 = vertices[18];
+  const PylithScalar y6 = vertices[19];
+  const PylithScalar z6 = vertices[20];
 
-  const double x7 = vertices[21];
-  const double y7 = vertices[22];
-  const double z7 = vertices[23];
+  const PylithScalar x7 = vertices[21];
+  const PylithScalar y7 = vertices[22];
+  const PylithScalar z7 = vertices[23];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
-  const double h_1 = z1 - z0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
+  const PylithScalar h_1 = z1 - z0;
 
-  const double f_3 = x3 - x0;
-  const double g_3 = y3 - y0;
-  const double h_3 = z3 - z0;
+  const PylithScalar f_3 = x3 - x0;
+  const PylithScalar g_3 = y3 - y0;
+  const PylithScalar h_3 = z3 - z0;
 
-  const double f_4 = x4 - x0;
-  const double g_4 = y4 - y0;
-  const double h_4 = z4 - z0;
+  const PylithScalar f_4 = x4 - x0;
+  const PylithScalar g_4 = y4 - y0;
+  const PylithScalar h_4 = z4 - z0;
 
-  const double f_01 = x2 - x1 - x3 + x0;
-  const double g_01 = y2 - y1 - y3 + y0;
-  const double h_01 = z2 - z1 - z3 + z0;
+  const PylithScalar f_01 = x2 - x1 - x3 + x0;
+  const PylithScalar g_01 = y2 - y1 - y3 + y0;
+  const PylithScalar h_01 = z2 - z1 - z3 + z0;
 
-  const double f_12 = x7 - x3 - x4 + x0;
-  const double g_12 = y7 - y3 - y4 + y0;
-  const double h_12 = z7 - z3 - z4 + z0;
+  const PylithScalar f_12 = x7 - x3 - x4 + x0;
+  const PylithScalar g_12 = y7 - y3 - y4 + y0;
+  const PylithScalar h_12 = z7 - z3 - z4 + z0;
 
-  const double f_02 = x5 - x1 - x4 + x0;
-  const double g_02 = y5 - y1 - y4 + y0;
-  const double h_02 = z5 - z1 - z4 + z0;
+  const PylithScalar f_02 = x5 - x1 - x4 + x0;
+  const PylithScalar g_02 = y5 - y1 - y4 + y0;
+  const PylithScalar h_02 = z5 - z1 - z4 + z0;
 
-  const double f_012 = x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7;
-  const double g_012 = y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7;
-  const double h_012 = z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7;
+  const PylithScalar f_012 = x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7;
+  const PylithScalar g_012 = y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7;
+  const PylithScalar h_012 = z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p2 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p2 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
     assert(0 <= p2 && p2 <= 1.0);
@@ -164,10 +164,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryHex3D::jacobian(double_array* jacobian,
-					    double* det,
-					    const double_array& vertices,
-					    const double_array& location) const
+pylith::feassemble::GeometryHex3D::jacobian(scalar_array* jacobian,
+					    PylithScalar* det,
+					    const scalar_array& vertices,
+					    const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -177,60 +177,60 @@
   assert(cellDim() == location.size());
   assert(spaceDim()*cellDim() == jacobian->size());
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double x4 = vertices[12];
-  const double y4 = vertices[13];
-  const double z4 = vertices[14];
+  const PylithScalar x4 = vertices[12];
+  const PylithScalar y4 = vertices[13];
+  const PylithScalar z4 = vertices[14];
 
-  const double x5 = vertices[15];
-  const double y5 = vertices[16];
-  const double z5 = vertices[17];
+  const PylithScalar x5 = vertices[15];
+  const PylithScalar y5 = vertices[16];
+  const PylithScalar z5 = vertices[17];
 
-  const double x6 = vertices[18];
-  const double y6 = vertices[19];
-  const double z6 = vertices[20];
+  const PylithScalar x6 = vertices[18];
+  const PylithScalar y6 = vertices[19];
+  const PylithScalar z6 = vertices[20];
 
-  const double x7 = vertices[21];
-  const double y7 = vertices[22];
-  const double z7 = vertices[23];
+  const PylithScalar x7 = vertices[21];
+  const PylithScalar y7 = vertices[22];
+  const PylithScalar z7 = vertices[23];
 
-  const double x = 0.5 * (location[0] + 1.0);
-  const double y = 0.5 * (location[1] + 1.0);
-  const double z = 0.5 * (location[2] + 1.0);
+  const PylithScalar x = 0.5 * (location[0] + 1.0);
+  const PylithScalar y = 0.5 * (location[1] + 1.0);
+  const PylithScalar z = 0.5 * (location[2] + 1.0);
   assert(-1.0 <= x && x <= 1.0);
   assert(-1.0 <= y && y <= 1.0);
   assert(-1.0 <= z && z <= 1.0);
 
-  const double f_xy = x2 - x1 - x3 + x0;
-  const double g_xy = y2 - y1 - y3 + y0;
-  const double h_xy = z2 - z1 - z3 + z0;
+  const PylithScalar f_xy = x2 - x1 - x3 + x0;
+  const PylithScalar g_xy = y2 - y1 - y3 + y0;
+  const PylithScalar h_xy = z2 - z1 - z3 + z0;
 
-  const double f_yz = x7 - x3 - x4 + x0;
-  const double g_yz = y7 - y3 - y4 + y0;
-  const double h_yz = z7 - z3 - z4 + z0;
+  const PylithScalar f_yz = x7 - x3 - x4 + x0;
+  const PylithScalar g_yz = y7 - y3 - y4 + y0;
+  const PylithScalar h_yz = z7 - z3 - z4 + z0;
 
-  const double f_xz = x5 - x1 - x4 + x0;
-  const double g_xz = y5 - y1 - y4 + y0;
-  const double h_xz = z5 - z1 - z4 + z0;
+  const PylithScalar f_xz = x5 - x1 - x4 + x0;
+  const PylithScalar g_xz = y5 - y1 - y4 + y0;
+  const PylithScalar h_xz = z5 - z1 - z4 + z0;
 
-  const double f_xyz = x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7;
-  const double g_xyz = y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7;
-  const double h_xyz = z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7;
+  const PylithScalar f_xyz = x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7;
+  const PylithScalar g_xyz = y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7;
+  const PylithScalar h_xyz = z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7;
 
   (*jacobian)[0] = (x1 - x0 + f_xy*y + f_xz*z + f_xyz*y*z) / 2.0;
   (*jacobian)[1] = (x3 - x0 + f_xy*x + f_yz*z + f_xyz*x*z) / 2.0;
@@ -258,10 +258,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryHex3D::jacobian(double* jacobian,
-					    double* det,
-					    const double* vertices,
-					    const double* ptsRef,
+pylith::feassemble::GeometryHex3D::jacobian(PylithScalar* jacobian,
+					    PylithScalar* det,
+					    const PylithScalar* vertices,
+					    const PylithScalar* ptsRef,
 					    const int dim,
 					    const int npts) const
 { // jacobian
@@ -272,84 +272,84 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double x4 = vertices[12];
-  const double y4 = vertices[13];
-  const double z4 = vertices[14];
+  const PylithScalar x4 = vertices[12];
+  const PylithScalar y4 = vertices[13];
+  const PylithScalar z4 = vertices[14];
 
-  const double x5 = vertices[15];
-  const double y5 = vertices[16];
-  const double z5 = vertices[17];
+  const PylithScalar x5 = vertices[15];
+  const PylithScalar y5 = vertices[16];
+  const PylithScalar z5 = vertices[17];
 
-  const double x6 = vertices[18];
-  const double y6 = vertices[19];
-  const double z6 = vertices[20];
+  const PylithScalar x6 = vertices[18];
+  const PylithScalar y6 = vertices[19];
+  const PylithScalar z6 = vertices[20];
 
-  const double x7 = vertices[21];
-  const double y7 = vertices[22];
-  const double z7 = vertices[23];
+  const PylithScalar x7 = vertices[21];
+  const PylithScalar y7 = vertices[22];
+  const PylithScalar z7 = vertices[23];
 
-  const double f_1 = (x1 - x0) / 2.0;
-  const double g_1 = (y1 - y0) / 2.0;
-  const double h_1 = (z1 - z0) / 2.0;
+  const PylithScalar f_1 = (x1 - x0) / 2.0;
+  const PylithScalar g_1 = (y1 - y0) / 2.0;
+  const PylithScalar h_1 = (z1 - z0) / 2.0;
 
-  const double f_3 = (x3 - x0) / 2.0;
-  const double g_3 = (y3 - y0) / 2.0;
-  const double h_3 = (z3 - z0) / 2.0;
+  const PylithScalar f_3 = (x3 - x0) / 2.0;
+  const PylithScalar g_3 = (y3 - y0) / 2.0;
+  const PylithScalar h_3 = (z3 - z0) / 2.0;
   
-  const double f_4 = (x4 - x0) / 2.0;
-  const double g_4 = (y4 - y0) / 2.0;
-  const double h_4 = (z4 - z0) / 2.0;
+  const PylithScalar f_4 = (x4 - x0) / 2.0;
+  const PylithScalar g_4 = (y4 - y0) / 2.0;
+  const PylithScalar h_4 = (z4 - z0) / 2.0;
 
-  const double f_01 = (x2 - x1 - x3 + x0) / 2.0;
-  const double g_01 = (y2 - y1 - y3 + y0) / 2.0;
-  const double h_01 = (z2 - z1 - z3 + z0) / 2.0;
+  const PylithScalar f_01 = (x2 - x1 - x3 + x0) / 2.0;
+  const PylithScalar g_01 = (y2 - y1 - y3 + y0) / 2.0;
+  const PylithScalar h_01 = (z2 - z1 - z3 + z0) / 2.0;
 
-  const double f_12 = (x7 - x3 - x4 + x0) / 2.0;
-  const double g_12 = (y7 - y3 - y4 + y0) / 2.0;
-  const double h_12 = (z7 - z3 - z4 + z0) / 2.0;
+  const PylithScalar f_12 = (x7 - x3 - x4 + x0) / 2.0;
+  const PylithScalar g_12 = (y7 - y3 - y4 + y0) / 2.0;
+  const PylithScalar h_12 = (z7 - z3 - z4 + z0) / 2.0;
 
-  const double f_02 = (x5 - x1 - x4 + x0) / 2.0;
-  const double g_02 = (y5 - y1 - y4 + y0) / 2.0;
-  const double h_02 = (z5 - z1 - z4 + z0) / 2.0;
+  const PylithScalar f_02 = (x5 - x1 - x4 + x0) / 2.0;
+  const PylithScalar g_02 = (y5 - y1 - y4 + y0) / 2.0;
+  const PylithScalar h_02 = (z5 - z1 - z4 + z0) / 2.0;
 
-  const double f_012 = (x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7) / 2.0;
-  const double g_012 = (y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7) / 2.0;
-  const double h_012 = (z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7) / 2.0;
+  const PylithScalar f_012 = (x6 - x0 + x1 - x2 + x3 + x4 - x5 - x7) / 2.0;
+  const PylithScalar g_012 = (y6 - y0 + y1 - y2 + y3 + y4 - y5 - y7) / 2.0;
+  const PylithScalar h_012 = (z6 - z0 + z1 - z2 + z3 + z4 - z5 - z7) / 2.0;
 
   for (int i=0, iR=0, iJ=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p2 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p2 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
     assert(0 <= p2 && p2 <= 1.0);
-    const double j0 = f_1 + f_01*p1 + f_02*p2 + f_012*p1*p2;
-    const double j1 = f_3 + f_01*p0 + f_12*p2 + f_012*p0*p2;
-    const double j2 = f_4 + f_12*p1 + f_02*p0 + f_012*p0*p1;
+    const PylithScalar j0 = f_1 + f_01*p1 + f_02*p2 + f_012*p1*p2;
+    const PylithScalar j1 = f_3 + f_01*p0 + f_12*p2 + f_012*p0*p2;
+    const PylithScalar j2 = f_4 + f_12*p1 + f_02*p0 + f_012*p0*p1;
     
-    const double j3 = g_1 + g_01*p1 + g_02*p2 + g_012*p1*p2;
-    const double j4 = g_3 + g_01*p0 + g_12*p2 + g_012*p0*p2;
-    const double j5 = g_4 + g_12*p1 + g_02*p0 + g_012*p0*p1;
+    const PylithScalar j3 = g_1 + g_01*p1 + g_02*p2 + g_012*p1*p2;
+    const PylithScalar j4 = g_3 + g_01*p0 + g_12*p2 + g_012*p0*p2;
+    const PylithScalar j5 = g_4 + g_12*p1 + g_02*p0 + g_012*p0*p1;
     
-    const double j6 = h_1 + h_01*p1 + h_02*p2 + h_012*p1*p2;
-    const double j7 = h_3 + h_01*p0 + h_12*p2 + h_012*p0*p2;
-    const double j8 = h_4 + h_12*p1 + h_02*p0 + h_012*p0*p1;
+    const PylithScalar j6 = h_1 + h_01*p1 + h_02*p2 + h_012*p1*p2;
+    const PylithScalar j7 = h_3 + h_01*p0 + h_12*p2 + h_012*p0*p2;
+    const PylithScalar j8 = h_4 + h_12*p1 + h_02*p0 + h_012*p0*p1;
 
     jacobian[iJ++] = j0;
     jacobian[iJ++] = j1;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryHex3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,9 +80,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -93,10 +93,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -107,10 +107,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "GeometryPoint1D.hh" // USES GeometryPoint
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "petsc.h" // USES PetscLogFlops
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryLine1D::GeometryLine1D(void) :
   CellGeometry(LINE, 1)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,
     +1.0,
   };
@@ -65,9 +65,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryLine1D::ptsRefToGlobal(double* ptsGlobal,
-						   const double* ptsRef,
-						   const double* vertices,
+pylith::feassemble::GeometryLine1D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						   const PylithScalar* ptsRef,
+						   const PylithScalar* vertices,
 						   const int dim,
 						   const int npts) const
 { // ptsRefToGlobal
@@ -77,11 +77,11 @@
   assert(1 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double x1 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar x1 = vertices[1];
 
   for (int i=0; i < npts; ++i) {
-    const double p0 = 0.5*(1.0+ptsRef[i]);
+    const PylithScalar p0 = 0.5*(1.0+ptsRef[i]);
     ptsGlobal[i] = x0 + (x1-x0) * p0;
   } // for
 
@@ -91,10 +91,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine1D::jacobian(double_array* jacobian,
-					     double* det,
-					     const double_array& vertices,
-					     const double_array& location) const
+pylith::feassemble::GeometryLine1D::jacobian(scalar_array* jacobian,
+					     PylithScalar* det,
+					     const scalar_array& vertices,
+					     const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -103,8 +103,8 @@
 	  ((numCorners()+1)*spaceDim() == vertices.size()) ); // quadratic edge
   assert(spaceDim()*cellDim() == jacobian->size());
 
-  const double x0 = vertices[0];
-  const double x1 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar x1 = vertices[1];
 
   (*jacobian)[0] = (x1 - x0)/2.0;
   *det = (*jacobian)[0];
@@ -113,10 +113,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine1D::jacobian(double* jacobian,
-					     double* det,
-					     const double* vertices,
-					     const double* location,
+pylith::feassemble::GeometryLine1D::jacobian(PylithScalar* jacobian,
+					     PylithScalar* det,
+					     const PylithScalar* vertices,
+					     const PylithScalar* location,
 					     const int dim,
 					     const int npts) const
 { // jacobian
@@ -127,10 +127,10 @@
   assert(1 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double x1 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar x1 = vertices[1];
 
-  const double j = (x1 - x0)/2.0;
+  const PylithScalar j = (x1 - x0)/2.0;
   for (int i=0; i < npts; ++i) {
     jacobian[i] = j;
     det[i] = j;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "GeometryPoint2D.hh" // USES GeometryPoint
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "petsc.h" // USES PetscLogFlops
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryLine2D::GeometryLine2D(void) :
   CellGeometry(LINE, 2)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,
     +1.0,
   };
@@ -65,9 +65,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryLine2D::ptsRefToGlobal(double* ptsGlobal,
-						   const double* ptsRef,
-						   const double* vertices,
+pylith::feassemble::GeometryLine2D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						   const PylithScalar* ptsRef,
+						   const PylithScalar* vertices,
 						   const int dim,
 						   const int npts) const
 { // ptsRefToGlobal
@@ -77,17 +77,17 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
 
   for (int i=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[i]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[i]);
     ptsGlobal[iG++] = x0 + f_1 * p0;
     ptsGlobal[iG++] = y0 + g_1 * p0;
   } // for
@@ -98,10 +98,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine2D::jacobian(double_array* jacobian,
-					     double* det,
-					     const double_array& vertices,
-					     const double_array& location) const
+pylith::feassemble::GeometryLine2D::jacobian(scalar_array* jacobian,
+					     PylithScalar* det,
+					     const scalar_array& vertices,
+					     const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -110,11 +110,11 @@
 	  ((numCorners()+1)*spaceDim() == vertices.size()) ); // quadratic
   assert(spaceDim()*cellDim() == jacobian->size());
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
   (*jacobian)[0] = (x1 - x0)/2.0;
   (*jacobian)[1] = (y1 - y0)/2.0;
@@ -127,10 +127,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine2D::jacobian(double* jacobian,
-					     double* det,
-					     const double* vertices,
-					     const double* location,
+pylith::feassemble::GeometryLine2D::jacobian(PylithScalar* jacobian,
+					     PylithScalar* det,
+					     const PylithScalar* vertices,
+					     const PylithScalar* location,
 					     const int dim,
 					     const int npts) const
 { // jacobian
@@ -141,15 +141,15 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double j1 = (x1 - x0) / 2.0;
-  const double j2 = (y1 - y0) / 2.0;
-  const double jdet = sqrt(j1*j1 + j2*j2);
+  const PylithScalar j1 = (x1 - x0) / 2.0;
+  const PylithScalar j2 = (y1 - y0) / 2.0;
+  const PylithScalar jdet = sqrt(j1*j1 + j2*j2);
 
   for (int i=0, iJ=0; i < npts; ++i) {
     jacobian[iJ++] = j1;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryLine3D::GeometryLine3D(void) :
   CellGeometry(LINE, 3)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,
     +1.0,
   };
@@ -65,9 +65,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryLine3D::ptsRefToGlobal(double* ptsGlobal,
-						   const double* ptsRef,
-						   const double* vertices,
+pylith::feassemble::GeometryLine3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						   const PylithScalar* ptsRef,
+						   const PylithScalar* vertices,
 						   const int dim,
 						   const int npts) const
 { // ptsRefToGlobal
@@ -77,20 +77,20 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
-  const double h_1 = z1 - z0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
+  const PylithScalar h_1 = z1 - z0;
 
   for (int i=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[i]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[i]);
     ptsGlobal[iG++] = x0 + f_1 * p0;
     ptsGlobal[iG++] = y0 + g_1 * p0;
     ptsGlobal[iG++] = z0 + h_1 * p0;
@@ -102,10 +102,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine3D::jacobian(double_array* jacobian,
-					   double* det,
-					   const double_array& vertices,
-					   const double_array& location) const
+pylith::feassemble::GeometryLine3D::jacobian(scalar_array* jacobian,
+					   PylithScalar* det,
+					   const scalar_array& vertices,
+					   const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -114,13 +114,13 @@
 	  ((numCorners()+1)*spaceDim() == vertices.size()) ); // quadratic edge
   assert(spaceDim()*cellDim() == jacobian->size());
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
   (*jacobian)[0] = (x1 - x0)/2.0;
   (*jacobian)[1] = (y1 - y0)/2.0;
@@ -134,10 +134,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryLine3D::jacobian(double* jacobian,
-					     double* det,
-					     const double* vertices,
-					     const double* location,
+pylith::feassemble::GeometryLine3D::jacobian(PylithScalar* jacobian,
+					     PylithScalar* det,
+					     const PylithScalar* vertices,
+					     const PylithScalar* location,
 					     const int dim,
 					     const int npts) const
 { // jacobian
@@ -148,18 +148,18 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double j1 = (x1 - x0) / 2.0;
-  const double j2 = (y1 - y0) / 2.0;
-  const double j3 = (z1 - z0) / 2.0;
-  const double jdet = sqrt(j1*j1 + j2*j2 + j3*j3);
+  const PylithScalar j1 = (x1 - x0) / 2.0;
+  const PylithScalar j2 = (y1 - y0) / 2.0;
+  const PylithScalar j3 = (z1 - z0) / 2.0;
+  const PylithScalar jdet = sqrt(j1*j1 + j2*j2 + j3*j3);
 
   for (int i=0, iJ=0; i < npts; ++i) {
     jacobian[iJ++] = j1;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryLine3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "GeometryPoint1D.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -29,7 +29,7 @@
 pylith::feassemble::GeometryPoint1D::GeometryPoint1D(void) :
   CellGeometry(POINT, 1)
 { // constructor
-  const double vertices[] = { 0.0 };
+  const PylithScalar vertices[] = { 0.0 };
   _setVertices(vertices, 1, 1);
 } // constructor
 
@@ -58,9 +58,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryPoint1D::ptsRefToGlobal(double* ptsGlobal,
-						    const double* ptsRef,
-						    const double* vertices,
+pylith::feassemble::GeometryPoint1D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						    const PylithScalar* ptsRef,
+						    const PylithScalar* vertices,
 						    const int dim,
 						    const int npts) const
 { // ptsRefToGlobal
@@ -77,10 +77,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint1D::jacobian(double_array* jacobian,
-					      double* det,
-					      const double_array& vertices,
-					      const double_array& location) const
+pylith::feassemble::GeometryPoint1D::jacobian(scalar_array* jacobian,
+					      PylithScalar* det,
+					      const scalar_array& vertices,
+					      const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -94,10 +94,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint1D::jacobian(double* jacobian,
-					      double* det,
-					      const double* vertices,
-					      const double* ptsRef,
+pylith::feassemble::GeometryPoint1D::jacobian(PylithScalar* jacobian,
+					      PylithScalar* det,
+					      const PylithScalar* vertices,
+					      const PylithScalar* ptsRef,
 					      const int dim,
 					      const int npts) const
 { // jacobian

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "GeometryPoint2D.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -29,7 +29,7 @@
 pylith::feassemble::GeometryPoint2D::GeometryPoint2D(void) :
   CellGeometry(POINT, 2)
 { // constructor
-  const double vertices[] = { 0.0 };
+  const PylithScalar vertices[] = { 0.0 };
   _setVertices(vertices, 1, 1);
 } // constructor
 
@@ -58,9 +58,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryPoint2D::ptsRefToGlobal(double* ptsGlobal,
-						    const double* ptsRef,
-						    const double* vertices,
+pylith::feassemble::GeometryPoint2D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						    const PylithScalar* ptsRef,
+						    const PylithScalar* vertices,
 						    const int dim,
 						    const int npts) const
 { // ptsRefToGlobal
@@ -78,10 +78,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint2D::jacobian(double_array* jacobian,
-					  double* det,
-					  const double_array& vertices,
-					  const double_array& location) const
+pylith::feassemble::GeometryPoint2D::jacobian(scalar_array* jacobian,
+					  PylithScalar* det,
+					  const scalar_array& vertices,
+					  const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -95,10 +95,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint2D::jacobian(double* jacobian,
-					      double* det,
-					      const double* vertices,
-					      const double* location,
+pylith::feassemble::GeometryPoint2D::jacobian(PylithScalar* jacobian,
+					      PylithScalar* det,
+					      const PylithScalar* vertices,
+					      const PylithScalar* location,
 					      const int dim,
 					      const int npts) const
 { // jacobian

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "GeometryPoint3D.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -29,7 +29,7 @@
 pylith::feassemble::GeometryPoint3D::GeometryPoint3D(void) :
   CellGeometry(POINT, 3)
 { // constructor
-  const double vertices[] = { 0.0 };
+  const PylithScalar vertices[] = { 0.0 };
   _setVertices(vertices, 1, 1);
 } // constructor
 
@@ -58,9 +58,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryPoint3D::ptsRefToGlobal(double* ptsGlobal,
-						    const double* ptsRef,
-						    const double* vertices,
+pylith::feassemble::GeometryPoint3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						    const PylithScalar* ptsRef,
+						    const PylithScalar* vertices,
 						    const int dim,
 						    const int npts) const
 { // ptsRefToGlobal
@@ -78,10 +78,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint3D::jacobian(double_array* jacobian,
-					    double* det,
-					    const double_array& vertices,
-					    const double_array& location) const
+pylith::feassemble::GeometryPoint3D::jacobian(scalar_array* jacobian,
+					    PylithScalar* det,
+					    const scalar_array& vertices,
+					    const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -95,10 +95,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryPoint3D::jacobian(double* jacobian,
-					      double* det,
-					      const double* vertices,
-					      const double* location,
+pylith::feassemble::GeometryPoint3D::jacobian(PylithScalar* jacobian,
+					      PylithScalar* det,
+					      const PylithScalar* vertices,
+					      const PylithScalar* location,
 					      const int dim,
 					      const int npts) const
 { // jacobian

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryPoint3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,9 +64,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -77,10 +77,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -91,10 +91,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryQuad2D::GeometryQuad2D(void) :
   CellGeometry(QUADRILATERAL, 2)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,
     +1.0,  -1.0,
     +1.0,  +1.0,
@@ -67,9 +67,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryQuad2D::ptsRefToGlobal(double* ptsGlobal,
-						   const double* ptsRef,
-						   const double* vertices,
+pylith::feassemble::GeometryQuad2D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						   const PylithScalar* ptsRef,
+						   const PylithScalar* vertices,
 						   const int dim,
 						   const int npts) const
 { // ptsRefToGlobal
@@ -79,30 +79,30 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
-  const double x3 = vertices[6];
-  const double y3 = vertices[7];
+  const PylithScalar x3 = vertices[6];
+  const PylithScalar y3 = vertices[7];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
 
-  const double f_3 = x3 - x0;
-  const double g_3 = y3 - y0;
+  const PylithScalar f_3 = x3 - x0;
+  const PylithScalar g_3 = y3 - y0;
 
-  const double f_01 = x2 - x1 - x3 + x0;
-  const double g_01 = y2 - y1 - y3 + y0;
+  const PylithScalar f_01 = x2 - x1 - x3 + x0;
+  const PylithScalar g_01 = y2 - y1 - y3 + y0;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     ptsGlobal[iG++] = x0 + f_1 * p0 + f_3 * p1 + f_01 * p0 * p1;
     ptsGlobal[iG++] = y0 + g_1 * p0 + g_3 * p1 + g_01 * p0 * p1;
   } // for
@@ -113,10 +113,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryQuad2D::jacobian(double_array* jacobian,
-					  double* det,
-					  const double_array& vertices,
-					  const double_array& location) const
+pylith::feassemble::GeometryQuad2D::jacobian(scalar_array* jacobian,
+					  PylithScalar* det,
+					  const scalar_array& vertices,
+					  const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -126,25 +126,25 @@
   assert(cellDim() == location.size());
   assert(spaceDim()*cellDim() == jacobian->size());
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
-  const double x3 = vertices[6];
-  const double y3 = vertices[7];
+  const PylithScalar x3 = vertices[6];
+  const PylithScalar y3 = vertices[7];
 
-  const double x = 0.5 * (location[0] + 1.0);
-  const double y = 0.5 * (location[1] + 1.0);
+  const PylithScalar x = 0.5 * (location[0] + 1.0);
+  const PylithScalar y = 0.5 * (location[1] + 1.0);
   assert(0 <= x && x <= 1.0);
   assert(0 <= y && y <= 1.0);
 
-  const double f_xy = x2 - x1 - x3 + x0;
-  const double g_xy = y2 - y1 - y3 + y0;
+  const PylithScalar f_xy = x2 - x1 - x3 + x0;
+  const PylithScalar g_xy = y2 - y1 - y3 + y0;
 
   (*jacobian)[0] = (x1 - x0 + f_xy*y) / 2.0;
   (*jacobian)[1] = (x3 - x0 + f_xy*x) / 2.0;
@@ -161,10 +161,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryQuad2D::jacobian(double* jacobian,
-					     double* det,
-					     const double* vertices,
-					     const double* ptsRef,
+pylith::feassemble::GeometryQuad2D::jacobian(PylithScalar* jacobian,
+					     PylithScalar* det,
+					     const PylithScalar* vertices,
+					     const PylithScalar* ptsRef,
 					     const int dim,
 					     const int npts) const
 { // jacobian
@@ -175,36 +175,36 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
     
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
-  const double x3 = vertices[6];
-  const double y3 = vertices[7];
+  const PylithScalar x3 = vertices[6];
+  const PylithScalar y3 = vertices[7];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
 
-  const double f_3 = x3 - x0;
-  const double g_3 = y3 - y0;
+  const PylithScalar f_3 = x3 - x0;
+  const PylithScalar g_3 = y3 - y0;
 
-  const double f_01 = x2 - x1 - x3 + x0;
-  const double g_01 = y2 - y1 - y3 + y0;
+  const PylithScalar f_01 = x2 - x1 - x3 + x0;
+  const PylithScalar g_01 = y2 - y1 - y3 + y0;
 
   for (int i=0, iR=0, iJ=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
-    const double j00 = (f_1 + f_01 * p1) / 2.0; 
-    const double j01 = (f_3 + f_01 * p0) / 2.0; 
-    const double j10 = (g_1 + g_01 * p1) / 2.0;
-    const double j11 = (g_3 + g_01 * p0) / 2.0; 
+    const PylithScalar j00 = (f_1 + f_01 * p1) / 2.0; 
+    const PylithScalar j01 = (f_3 + f_01 * p0) / 2.0; 
+    const PylithScalar j10 = (g_1 + g_01 * p1) / 2.0;
+    const PylithScalar j11 = (g_3 + g_01 * p0) / 2.0; 
 
     jacobian[iJ++] = j00;
     jacobian[iJ++] = j01;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -82,9 +82,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -95,10 +95,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -109,10 +109,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryQuad3D::GeometryQuad3D(void) :
   CellGeometry(QUADRILATERAL, 3)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,
     +1.0,  -1.0,
     +1.0,  +1.0,
@@ -67,9 +67,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryQuad3D::ptsRefToGlobal(double* ptsGlobal,
-						   const double* ptsRef,
-						   const double* vertices,
+pylith::feassemble::GeometryQuad3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						   const PylithScalar* ptsRef,
+						   const PylithScalar* vertices,
 						   const int dim,
 						   const int npts) const
 { // ptsRefToGlobal
@@ -79,37 +79,37 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
-  const double h_1 = z1 - z0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
+  const PylithScalar h_1 = z1 - z0;
 
-  const double f_3 = x3 - x0;
-  const double g_3 = y3 - y0;
-  const double h_3 = z3 - z0;
+  const PylithScalar f_3 = x3 - x0;
+  const PylithScalar g_3 = y3 - y0;
+  const PylithScalar h_3 = z3 - z0;
 
-  const double f_01 = x2 - x1 - x3 + x0;
-  const double g_01 = y2 - y1 - y3 + y0;
-  const double h_01 = z2 - z1 - z3 + z0;
+  const PylithScalar f_01 = x2 - x1 - x3 + x0;
+  const PylithScalar g_01 = y2 - y1 - y3 + y0;
+  const PylithScalar h_01 = z2 - z1 - z3 + z0;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
     ptsGlobal[iG++] = x0 + f_1 * p0 + f_3 * p1 + f_01 * p0 * p1;
@@ -123,10 +123,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryQuad3D::jacobian(double_array* jacobian,
-					  double* det,
-					  const double_array& vertices,
-					  const double_array& location) const
+pylith::feassemble::GeometryQuad3D::jacobian(scalar_array* jacobian,
+					  PylithScalar* det,
+					  const scalar_array& vertices,
+					  const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -136,30 +136,30 @@
   assert(cellDim() == location.size());
   assert(spaceDim()*cellDim() == jacobian->size());
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double x = 0.5 * (location[0] + 1.0);
-  const double y = 0.5 * (location[1] + 1.0);
+  const PylithScalar x = 0.5 * (location[0] + 1.0);
+  const PylithScalar y = 0.5 * (location[1] + 1.0);
   assert(0 <= x && x <= 1.0);
   assert(0 <= y && y <= 1.0);
 
-  const double f_xy = x2 - x1 - x3 + x0;
-  const double g_xy = y2 - y1 - y3 + y0;
-  const double h_xy = z2 - z1 - z3 + z0;
+  const PylithScalar f_xy = x2 - x1 - x3 + x0;
+  const PylithScalar g_xy = y2 - y1 - y3 + y0;
+  const PylithScalar h_xy = z2 - z1 - z3 + z0;
 
   (*jacobian)[0] = (x1 - x0 + f_xy*y) / 2.0;
   (*jacobian)[1] = (x3 - x0 + f_xy*x) / 2.0;
@@ -170,16 +170,16 @@
   (*jacobian)[4] = (z1 - z0 + h_xy*y) / 2.0;
   (*jacobian)[5] = (z3 - z0 + h_xy*x) / 2.0;
 
-  const double jj00 = 
+  const PylithScalar jj00 = 
     (*jacobian)[0]*(*jacobian)[0] +
     (*jacobian)[2]*(*jacobian)[2] +
     (*jacobian)[4]*(*jacobian)[4];
-  const double jj10 =
+  const PylithScalar jj10 =
     (*jacobian)[0]*(*jacobian)[1] +
     (*jacobian)[2]*(*jacobian)[3] +
     (*jacobian)[4]*(*jacobian)[5];
-  const double jj01 = jj10;
-  const double jj11 = 
+  const PylithScalar jj01 = jj10;
+  const PylithScalar jj11 = 
     (*jacobian)[1]*(*jacobian)[1] +
     (*jacobian)[3]*(*jacobian)[3] +
     (*jacobian)[5]*(*jacobian)[5];
@@ -191,10 +191,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryQuad3D::jacobian(double* jacobian,
-					     double* det,
-					     const double* vertices,
-					     const double* ptsRef,
+pylith::feassemble::GeometryQuad3D::jacobian(PylithScalar* jacobian,
+					     PylithScalar* det,
+					     const PylithScalar* vertices,
+					     const PylithScalar* ptsRef,
 					     const int dim,
 					     const int npts) const
 { // jacobian
@@ -205,45 +205,45 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double f_1 = (x1 - x0) / 2.0;
-  const double g_1 = (y1 - y0) / 2.0;
-  const double h_1 = (z1 - z0) / 2.0;
+  const PylithScalar f_1 = (x1 - x0) / 2.0;
+  const PylithScalar g_1 = (y1 - y0) / 2.0;
+  const PylithScalar h_1 = (z1 - z0) / 2.0;
 
-  const double f_3 = (x3 - x0) / 2.0;
-  const double g_3 = (y3 - y0) / 2.0;
-  const double h_3 = (z3 - z0) / 2.0;
+  const PylithScalar f_3 = (x3 - x0) / 2.0;
+  const PylithScalar g_3 = (y3 - y0) / 2.0;
+  const PylithScalar h_3 = (z3 - z0) / 2.0;
 
-  const double f_01 = (x2 - x1 - x3 + x0) / 2.0;
-  const double g_01 = (y2 - y1 - y3 + y0) / 2.0;
-  const double h_01 = (z2 - z1 - z3 + z0) / 2.0;
+  const PylithScalar f_01 = (x2 - x1 - x3 + x0) / 2.0;
+  const PylithScalar g_01 = (y2 - y1 - y3 + y0) / 2.0;
+  const PylithScalar h_01 = (z2 - z1 - z3 + z0) / 2.0;
 
   for (int i=0, iR=0, iJ=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
-    const double j0 = f_1 + f_01 * p1; 
-    const double j1 = f_3 + f_01 * p0; 
-    const double j2 = g_1 + g_01 * p1;
-    const double j3 = g_3 + g_01 * p0; 
-    const double j4 = h_1 + h_01 * p1;
-    const double j5 = h_3 + h_01 * p0;
+    const PylithScalar j0 = f_1 + f_01 * p1; 
+    const PylithScalar j1 = f_3 + f_01 * p0; 
+    const PylithScalar j2 = g_1 + g_01 * p1;
+    const PylithScalar j3 = g_3 + g_01 * p0; 
+    const PylithScalar j4 = h_1 + h_01 * p1;
+    const PylithScalar j5 = h_3 + h_01 * p0;
     jacobian[iJ++] = j0;
     jacobian[iJ++] = j1;
     jacobian[iJ++] = j2;
@@ -251,10 +251,10 @@
     jacobian[iJ++] = j4;
     jacobian[iJ++] = j5;
 
-    const double jj00 = j0*j0 + j2*j2 + j4*j4;
-    const double jj10 = j0*j1 + j2*j3 + j4*j5;
-    const double jj01 = jj10;
-    const double jj11 = j1*j1 + j3*j3 + j5*j5;
+    const PylithScalar jj00 = j0*j0 + j2*j2 + j4*j4;
+    const PylithScalar jj10 = j0*j1 + j2*j3 + j4*j5;
+    const PylithScalar jj01 = jj10;
+    const PylithScalar jj11 = j1*j1 + j3*j3 + j5*j5;
     det[i] = sqrt(jj00*jj11 - jj01*jj10);
   } // for
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryQuad3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,9 +80,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -93,10 +93,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -107,10 +107,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryTet3D::GeometryTet3D(void) :
   CellGeometry(TETRAHEDRON, 3)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,  -1.0,
     +1.0,  -1.0,  -1.0,
     -1.0,  +1.0,  -1.0,
@@ -67,9 +67,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryTet3D::ptsRefToGlobal(double* ptsGlobal,
-						  const double* ptsRef,
-						  const double* vertices,
+pylith::feassemble::GeometryTet3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						  const PylithScalar* ptsRef,
+						  const PylithScalar* vertices,
 						  const int dim,
 						  const int npts) const
 { // ptsRefToGlobal
@@ -79,38 +79,38 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
-  const double h_1 = z1 - z0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
+  const PylithScalar h_1 = z1 - z0;
 
-  const double f_2 = x2 - x0;
-  const double g_2 = y2 - y0;
-  const double h_2 = z2 - z0;
+  const PylithScalar f_2 = x2 - x0;
+  const PylithScalar g_2 = y2 - y0;
+  const PylithScalar h_2 = z2 - z0;
 
-  const double f_3 = x3 - x0;
-  const double g_3 = y3 - y0;
-  const double h_3 = z3 - z0;
+  const PylithScalar f_3 = x3 - x0;
+  const PylithScalar g_3 = y3 - y0;
+  const PylithScalar h_3 = z3 - z0;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p2 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p2 = 0.5 * (1.0 + ptsRef[iR++]);
     assert(0 <= p0 && p0 <= 1.0);
     assert(0 <= p1 && p1 <= 1.0);
     assert(0 <= p2 && p2 <= 1.0);
@@ -126,10 +126,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTet3D::jacobian(double_array* jacobian,
-					    double* det,
-					    const double_array& vertices,
-					    const double_array& location) const
+pylith::feassemble::GeometryTet3D::jacobian(scalar_array* jacobian,
+					    PylithScalar* det,
+					    const scalar_array& vertices,
+					    const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
   assert(0 != det);
@@ -137,21 +137,21 @@
   assert(numCorners()*spaceDim() == vertices.size());
   assert(spaceDim()*cellDim() == jacobian->size());
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
   (*jacobian)[0] = (x1 - x0) / 2.0;
   (*jacobian)[1] = (x2 - x0) / 2.0;
@@ -177,10 +177,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTet3D::jacobian(double* jacobian,
-					    double* det,
-					    const double* vertices,
-					    const double* ptsRef,
+pylith::feassemble::GeometryTet3D::jacobian(PylithScalar* jacobian,
+					    PylithScalar* det,
+					    const PylithScalar* vertices,
+					    const PylithScalar* ptsRef,
 					    const int dim,
 					    const int npts) const
 { // jacobian
@@ -191,35 +191,35 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double x3 = vertices[9];
-  const double y3 = vertices[10];
-  const double z3 = vertices[11];
+  const PylithScalar x3 = vertices[9];
+  const PylithScalar y3 = vertices[10];
+  const PylithScalar z3 = vertices[11];
 
-  const double j0 = (x1 - x0) / 2.0;
-  const double j1 = (x2 - x0) / 2.0;
-  const double j2 = (x3 - x0) / 2.0;
+  const PylithScalar j0 = (x1 - x0) / 2.0;
+  const PylithScalar j1 = (x2 - x0) / 2.0;
+  const PylithScalar j2 = (x3 - x0) / 2.0;
 
-  const double j3 = (y1 - y0) / 2.0;
-  const double j4 = (y2 - y0) / 2.0;
-  const double j5 = (y3 - y0) / 2.0;
+  const PylithScalar j3 = (y1 - y0) / 2.0;
+  const PylithScalar j4 = (y2 - y0) / 2.0;
+  const PylithScalar j5 = (y3 - y0) / 2.0;
 
-  const double j6 = (z1 - z0) / 2.0;
-  const double j7 = (z2 - z0) / 2.0;
-  const double j8 = (z3 - z0) / 2.0;
+  const PylithScalar j6 = (z1 - z0) / 2.0;
+  const PylithScalar j7 = (z2 - z0) / 2.0;
+  const PylithScalar j8 = (z3 - z0) / 2.0;
 
-  const double jdet = 
+  const PylithScalar jdet = 
     j0*(j4*j8 - j5*j7) -
     j1*(j3*j8 - j5*j6) +
     j2*(j3*j7 - j4*j6);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTet3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,9 +75,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -88,10 +88,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -102,10 +102,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryTri2D::GeometryTri2D(void) :
   CellGeometry(TRIANGLE, 2)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,
     +1.0,  -1.0,
     -1.0,  +1.0,
@@ -66,9 +66,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryTri2D::ptsRefToGlobal(double* ptsGlobal,
-						  const double* ptsRef,
-						  const double* vertices,
+pylith::feassemble::GeometryTri2D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						  const PylithScalar* ptsRef,
+						  const PylithScalar* vertices,
 						  const int dim,
 						  const int npts) const
 { // ptsRefToGlobal
@@ -78,24 +78,24 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
 
-  const double f_2 = x2 - x0;
-  const double g_2 = y2 - y0;
+  const PylithScalar f_2 = x2 - x0;
+  const PylithScalar g_2 = y2 - y0;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     ptsGlobal[iG++] = x0 + f_1 * p0 + f_2 * p1;
     ptsGlobal[iG++] = y0 + g_1 * p0 + g_2 * p1;
   } // for
@@ -106,24 +106,24 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTri2D::jacobian(double_array* jacobian,
-					  double* det,
-					  const double_array& vertices,
-					  const double_array& location) const
+pylith::feassemble::GeometryTri2D::jacobian(scalar_array* jacobian,
+					  PylithScalar* det,
+					  const scalar_array& vertices,
+					  const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
 
   assert(numCorners()*spaceDim() == vertices.size());
   assert(spaceDim()*cellDim() == jacobian->size());
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
   (*jacobian)[0] = (x1 - x0) / 2.0;
   (*jacobian)[1] = (x2 - x0) / 2.0;
@@ -140,10 +140,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTri2D::jacobian(double* jacobian,
-					    double* det,
-					    const double* vertices,
-					    const double* location,
+pylith::feassemble::GeometryTri2D::jacobian(PylithScalar* jacobian,
+					    PylithScalar* det,
+					    const PylithScalar* vertices,
+					    const PylithScalar* location,
 					    const int dim,
 					    const int npts) const
 { // jacobian
@@ -154,21 +154,21 @@
   assert(2 == dim);
   assert(spaceDim() == dim);
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
 
-  const double x1 = vertices[2];
-  const double y1 = vertices[3];
+  const PylithScalar x1 = vertices[2];
+  const PylithScalar y1 = vertices[3];
 
-  const double x2 = vertices[4];
-  const double y2 = vertices[5];
+  const PylithScalar x2 = vertices[4];
+  const PylithScalar y2 = vertices[5];
 
 
-  const double j00 = (x1 - x0) / 2.0;
-  const double j01 = (x2 - x0) / 2.0;
-  const double j10 = (y1 - y0) / 2.0;
-  const double j11 = (y2 - y0) / 2.0;
-  const double jdet = j00*j11 - j10*j01;
+  const PylithScalar j00 = (x1 - x0) / 2.0;
+  const PylithScalar j01 = (x2 - x0) / 2.0;
+  const PylithScalar j10 = (y1 - y0) / 2.0;
+  const PylithScalar j11 = (y2 - y0) / 2.0;
+  const PylithScalar jdet = j00*j11 - j10*j01;
 
   for (int i=0, iJ=0; i < npts; ++i) {
     jacobian[iJ++] = j00;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -81,9 +81,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -94,10 +94,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -108,10 +108,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "petsc.h" // USES PetscLogFlops
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cassert> // USES assert()
 
@@ -33,7 +33,7 @@
 pylith::feassemble::GeometryTri3D::GeometryTri3D(void) :
   CellGeometry(TRIANGLE, 3)
 { // constructor
-  const double vertices[] = {
+  const PylithScalar vertices[] = {
     -1.0,  -1.0,
     +1.0,  -1.0,
     -1.0,  +1.0,
@@ -66,9 +66,9 @@
 // ----------------------------------------------------------------------
 // Transform coordinates in reference cell to global coordinates.
 void
-pylith::feassemble::GeometryTri3D::ptsRefToGlobal(double* ptsGlobal,
-						  const double* ptsRef,
-						  const double* vertices,
+pylith::feassemble::GeometryTri3D::ptsRefToGlobal(PylithScalar* ptsGlobal,
+						  const PylithScalar* ptsRef,
+						  const PylithScalar* vertices,
 						  const int dim,
 						  const int npts) const
 { // ptsRefToGlobal
@@ -78,29 +78,29 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
 
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double f_1 = x1 - x0;
-  const double g_1 = y1 - y0;
-  const double h_1 = z1 - z0;
+  const PylithScalar f_1 = x1 - x0;
+  const PylithScalar g_1 = y1 - y0;
+  const PylithScalar h_1 = z1 - z0;
 
-  const double f_2 = x2 - x0;
-  const double g_2 = y2 - y0;
-  const double h_2 = z2 - z0;
+  const PylithScalar f_2 = x2 - x0;
+  const PylithScalar g_2 = y2 - y0;
+  const PylithScalar h_2 = z2 - z0;
 
   for (int i=0, iR=0, iG=0; i < npts; ++i) {
-    const double p0 = 0.5 * (1.0 + ptsRef[iR++]);
-    const double p1 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p0 = 0.5 * (1.0 + ptsRef[iR++]);
+    const PylithScalar p1 = 0.5 * (1.0 + ptsRef[iR++]);
     ptsGlobal[iG++] = x0 + f_1 * p0 + f_2 * p1;
     ptsGlobal[iG++] = y0 + g_1 * p0 + g_2 * p1;
     ptsGlobal[iG++] = z0 + h_1 * p0 + h_2 * p1;
@@ -112,27 +112,27 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTri3D::jacobian(double_array* jacobian,
-					    double* det,
-					    const double_array& vertices,
-					    const double_array& location) const
+pylith::feassemble::GeometryTri3D::jacobian(scalar_array* jacobian,
+					    PylithScalar* det,
+					    const scalar_array& vertices,
+					    const scalar_array& location) const
 { // jacobian
   assert(0 != jacobian);
 
   assert(numCorners()*spaceDim() == vertices.size());
   assert(spaceDim()*cellDim() == jacobian->size());
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
   (*jacobian)[0] = (x1 - x0) / 2.0;
   (*jacobian)[1] = (x2 - x0) / 2.0;
@@ -143,16 +143,16 @@
   (*jacobian)[4] = (z1 - z0) / 2.0;
   (*jacobian)[5] = (z2 - z0) / 2.0;
 
-  const double jj00 = 
+  const PylithScalar jj00 = 
     (*jacobian)[0]*(*jacobian)[0] +
     (*jacobian)[2]*(*jacobian)[2] +
     (*jacobian)[4]*(*jacobian)[4];
-  const double jj10 =
+  const PylithScalar jj10 =
     (*jacobian)[0]*(*jacobian)[1] +
     (*jacobian)[2]*(*jacobian)[3] +
     (*jacobian)[4]*(*jacobian)[5];
-  const double jj01 = jj10;
-  const double jj11 = 
+  const PylithScalar jj01 = jj10;
+  const PylithScalar jj11 = 
     (*jacobian)[1]*(*jacobian)[1] +
     (*jacobian)[3]*(*jacobian)[3] +
     (*jacobian)[5]*(*jacobian)[5];
@@ -163,10 +163,10 @@
 // ----------------------------------------------------------------------
 // Compute Jacobian at location in cell.
 void
-pylith::feassemble::GeometryTri3D::jacobian(double* jacobian,
-					    double* det,
-					    const double* vertices,
-					    const double* location,
+pylith::feassemble::GeometryTri3D::jacobian(PylithScalar* jacobian,
+					    PylithScalar* det,
+					    const PylithScalar* vertices,
+					    const PylithScalar* location,
 					    const int dim,
 					    const int npts) const
 { // jacobian
@@ -177,32 +177,32 @@
   assert(3 == dim);
   assert(spaceDim() == dim);
   
-  const double x0 = vertices[0];
-  const double y0 = vertices[1];
-  const double z0 = vertices[2];
+  const PylithScalar x0 = vertices[0];
+  const PylithScalar y0 = vertices[1];
+  const PylithScalar z0 = vertices[2];
 
-  const double x1 = vertices[3];
-  const double y1 = vertices[4];
-  const double z1 = vertices[5];
+  const PylithScalar x1 = vertices[3];
+  const PylithScalar y1 = vertices[4];
+  const PylithScalar z1 = vertices[5];
 
-  const double x2 = vertices[6];
-  const double y2 = vertices[7];
-  const double z2 = vertices[8];
+  const PylithScalar x2 = vertices[6];
+  const PylithScalar y2 = vertices[7];
+  const PylithScalar z2 = vertices[8];
 
-  const double j00 = (x1 - x0) / 2.0;
-  const double j01 = (x2 - x0) / 2.0;
+  const PylithScalar j00 = (x1 - x0) / 2.0;
+  const PylithScalar j01 = (x2 - x0) / 2.0;
 
-  const double j10 = (y1 - y0) / 2.0;
-  const double j11 = (y2 - y0) / 2.0;
+  const PylithScalar j10 = (y1 - y0) / 2.0;
+  const PylithScalar j11 = (y2 - y0) / 2.0;
 
-  const double j20 = (z1 - z0) / 2.0;
-  const double j21 = (z2 - z0) / 2.0;
+  const PylithScalar j20 = (z1 - z0) / 2.0;
+  const PylithScalar j21 = (z2 - z0) / 2.0;
 
-  const double jj00 = j00*j00 + j10*j10 + j20*j20;
-  const double jj10 = j00*j01 + j10*j11 + j20*j21;
-  const double jj01 = jj10;
-  const double jj11 = j01*j01 + j11*j11 + j21*j21;
-  const double jdet = sqrt(jj00*jj11 - jj01*jj10);
+  const PylithScalar jj00 = j00*j00 + j10*j10 + j20*j20;
+  const PylithScalar jj10 = j00*j01 + j10*j11 + j20*j21;
+  const PylithScalar jj01 = jj10;
+  const PylithScalar jj11 = j01*j01 + j11*j11 + j21*j21;
+  const PylithScalar jdet = sqrt(jj00*jj11 - jj01*jj10);
 
   for (int i=0, iJ=0; i < npts; ++i) {
     jacobian[iJ++] = j00;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/GeometryTri3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -81,9 +81,9 @@
    * @param dim Dimension of global coordinate system.
    * @param npts Number of points to transform.
    */
-  void ptsRefToGlobal(double* ptsGlobal,
-		      const double* ptsRef,
-		      const double* vertices,
+  void ptsRefToGlobal(PylithScalar* ptsGlobal,
+		      const PylithScalar* ptsRef,
+		      const PylithScalar* vertices,
 		      const int dim,
 		      const int npts =1) const;
 
@@ -94,10 +94,10 @@
    * @param vertices Coordinates of vertices of cell.
    * @param location Location in reference cell at which to compute Jacobian.
    */
-  void jacobian(double_array* jacobian,
-		double* det,
-		const double_array& vertices,
-		const double_array& location) const;
+  void jacobian(scalar_array* jacobian,
+		PylithScalar* det,
+		const scalar_array& vertices,
+		const scalar_array& location) const;
 
   /** Compute Jacobian at location in cell.
    *
@@ -108,10 +108,10 @@
    * @param dim Dimension of coordinate system.
    * @param npts Number of points to transform.
    */
-  void jacobian(double* jacobian,
-		double* det,
-		const double* vertices,
-		const double* ptsRef,
+  void jacobian(PylithScalar* jacobian,
+		PylithScalar* det,
+		const PylithScalar* vertices,
+		const PylithScalar* ptsRef,
 		const int dim,
 		const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -109,7 +109,7 @@
 // ----------------------------------------------------------------------
 // Get stable time step for advancing from time t to time t+dt.
 template<typename quadrature_type>
-double
+PylithScalar
 pylith::feassemble::Integrator<quadrature_type>::stableTimeStep(const topology::Mesh& mesh)
 { // stableTimeStep
   // Assume any time step will work.
@@ -172,7 +172,7 @@
   const int spaceDim = _quadrature->spaceDim();
 
   _cellVector = 0.0;
-  double value = 0.0;
+  PylithScalar value = 0.0;
   for (int iBasis=0; iBasis < numBasis; ++iBasis)
     for (int iDim=0; iDim < spaceDim; ++iDim) {
       value = 0.0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
 #include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // Integrator -----------------------------------------------------------
 /** @brief Abstract base class for integration of finite-element
@@ -96,7 +96,7 @@
    * @param dt Time step
    */
   virtual
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get stable time step for advancing from time t to time t+dt.
    *
@@ -106,7 +106,7 @@
    * @returns Time step
    */
   virtual
-  double stableTimeStep(const topology::Mesh& mesh);
+  PylithScalar stableTimeStep(const topology::Mesh& mesh);
 
   /** Check whether Jacobian needs to be recomputed.
    *
@@ -152,7 +152,7 @@
    */
   virtual 
   void integrateResidual(const topology::Field<topology::Mesh>& residual,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to residual term (r) for operator.
@@ -163,7 +163,7 @@
    */
   virtual
   void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
-       const double t,
+       const PylithScalar t,
        topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -175,7 +175,7 @@
    */
   virtual
   void integrateJacobian(topology::Jacobian* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -187,7 +187,7 @@
    */
   virtual
   void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
-			 const double t,
+			 const PylithScalar t,
 			 topology::SolutionFields* const fields);
 
   /** Integrate contributions to Jacobian matrix (A) associated with
@@ -209,7 +209,7 @@
    * @param mesh Finite-element mesh
    */
   virtual
-  void updateStateVars(const double t,
+  void updateStateVars(const PylithScalar t,
 		       topology::SolutionFields* const fields);
 
   /** Constrain solution space.
@@ -220,7 +220,7 @@
    */
   virtual
   void constrainSolnSpace(topology::SolutionFields* const fields,
-			  const double t,
+			  const PylithScalar t,
 			  const topology::Jacobian& jacobian);
 
   /** Adjust solution from solver with lumped Jacobian to match Lagrange
@@ -269,7 +269,7 @@
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
-  double _dt; ///< Time step for t -> t+dt
+  PylithScalar _dt; ///< Time step for t -> t+dt
 
   quadrature_type* _quadrature; ///< Quadrature for integrating finite-element
 
@@ -279,10 +279,10 @@
   utils::EventLogger* _logger; ///< Event logger.
 
   /// Vector local to cell containing result of integration action
-  double_array _cellVector;
+  scalar_array _cellVector;
 
   /// Matrix local to cell containing result of integration
-  double_array _cellMatrix;
+  scalar_array _cellMatrix;
 
   /// True if we need to recompute Jacobian for operator, false otherwise.
   /// Default is false;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Integrator.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 template<typename quadrature_type>
 inline
 void
-pylith::feassemble::Integrator<quadrature_type>::timeStep(const double dt) {
+pylith::feassemble::Integrator<quadrature_type>::timeStep(const PylithScalar dt) {
   _dt = dt;
 } // timeStep
 
@@ -72,7 +72,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::integrateResidual(
 			     const topology::Field<topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     topology::SolutionFields* const fields) {
 } // integrateResidual
 
@@ -82,7 +82,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::integrateResidualLumped(
            const topology::Field<topology::Mesh>& residual,
-           const double t,
+           const PylithScalar t,
            topology::SolutionFields* const fields) {
   integrateResidual(residual, t, fields);
 } // integrateResidual
@@ -94,7 +94,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::integrateJacobian(
 				     topology::Jacobian* jacobian,
-				     const double t,
+				     const PylithScalar t,
 				     topology::SolutionFields* const fields) {
   _needNewJacobian = false;
 } // integrateJacobian
@@ -106,7 +106,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::integrateJacobian(
 				     topology::Field<topology::Mesh>* jacobian,
-				     const double t,
+				     const PylithScalar t,
 				     topology::SolutionFields* const fields) {
   _needNewJacobian = false;
 } // integrateJacobian
@@ -127,7 +127,7 @@
 inline
 void
 pylith::feassemble::Integrator<quadrature_type>::updateStateVars(
-				     const double t,
+				     const PylithScalar t,
 				     topology::SolutionFields* const fields) {
 } // updateState
 
@@ -137,7 +137,7 @@
 void
 pylith::feassemble::Integrator<quadrature_type>::constrainSolnSpace(
 			       topology::SolutionFields* const fields,
-			       const double t,
+			       const PylithScalar t,
 			       const topology::Jacobian& jacobian) {
 } // constrainSolnSpace
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cstring> // USES memcpy()
 #include <strings.h> // USES strcasecmp()
@@ -154,7 +154,7 @@
 // Update state variables as needed.
 void
 pylith::feassemble::IntegratorElasticity::updateStateVars(
-				      const double t,
+				      const PylithScalar t,
 				      topology::SolutionFields* const fields)
 { // updateState
   assert(0 != _quadrature);
@@ -189,7 +189,7 @@
   } // else
 
   // Allocate arrays for cell data.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
 
   // Get cell information
@@ -203,14 +203,14 @@
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
 
   // Get fields
-  double_array dispCell(numBasis*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
   const topology::Field<topology::Mesh>& disp = fields->get("disp(t)");
   const ALE::Obj<RealSection>& dispSection = disp.section();
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -239,7 +239,7 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
     // Compute strains
     calcTotalStrainFn(&strainCell, basisDeriv, dispCell, 
@@ -400,6 +400,7 @@
   
   // Return tensor section to satisfy member function definition. Code
   // should never get here.
+  throw std::logic_error("Internal error.");
   topology::Field<topology::Mesh>& buffer = 
     _outputFields->get("buffer (tensor)");    
 
@@ -511,10 +512,10 @@
   } // else
   
   // Allocate arrays for cell data.
-  double_array dispCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array stressCell(numQuadPts*tensorSize);
   stressCell = 0.0;
 
   // Get cell information
@@ -534,7 +535,7 @@
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
     
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -563,7 +564,7 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
     
     // Compute strains
     calcTotalStrainFn(&strainCell, basisDeriv, dispCell, 
@@ -595,9 +596,9 @@
   const int tensorSize = _material->tensorSize();
   
   // Allocate arrays for cell data.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array stressCell(numQuadPts*tensorSize);
   stressCell = 0.0;
 
   // Get cell information
@@ -629,26 +630,26 @@
 // Integrate elasticity term in residual for 1-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityResidual1D(
-				     const double_array& stress)
+				     const scalar_array& stress)
 { // _elasticityResidual1D
   const int spaceDim = 1;
   const int cellDim = 1;
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
 
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
   assert(quadWts.size() == numQuadPts);
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQuad];
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double N1 = wt*basisDeriv[iQuad*numBasis+iBasis  ];
+      const PylithScalar N1 = wt*basisDeriv[iQuad*numBasis+iBasis  ];
       _cellVector[iBasis*spaceDim  ] -= N1*s11;
     } // for
   } // for
@@ -659,7 +660,7 @@
 // Integrate elasticity term in residual for 2-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityResidual2D(
-				     const double_array& stress)
+				     const scalar_array& stress)
 { // _elasticityResidual2D
   const int cellDim = 2;
   const int spaceDim = 2;
@@ -667,9 +668,9 @@
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
@@ -677,16 +678,16 @@
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQs = iQuad*stressSize;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQs  ];
-    const double s22 = stress[iQs+1];
-    const double s12 = stress[iQs+2];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQs  ];
+    const PylithScalar s22 = stress[iQs+1];
+    const PylithScalar s12 = stress[iQs+2];
     for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
 	 iBasis < numBasis;
 	 ++iBasis) {
       const int iBlock = iBasis*spaceDim;
-      const double N1 = wt*basisDeriv[iQ+iBlock  ];
-      const double N2 = wt*basisDeriv[iQ+iBlock+1];
+      const PylithScalar N1 = wt*basisDeriv[iQ+iBlock  ];
+      const PylithScalar N2 = wt*basisDeriv[iQ+iBlock+1];
 
       _cellVector[iBlock  ] -= N1*s11 + N2*s12;
       _cellVector[iBlock+1] -= N1*s12 + N2*s22;
@@ -699,7 +700,7 @@
 // Integrate elasticity term in residual for 3-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityResidual3D(
-				     const double_array& stress)
+				     const scalar_array& stress)
 { // _elasticityResidual3D
   const int spaceDim = 3;
   const int cellDim = 3;
@@ -707,9 +708,9 @@
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
@@ -717,21 +718,21 @@
   
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQs = iQuad * stressSize;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQs  ];
-    const double s22 = stress[iQs+1];
-    const double s33 = stress[iQs+2];
-    const double s12 = stress[iQs+3];
-    const double s23 = stress[iQs+4];
-    const double s13 = stress[iQs+5];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQs  ];
+    const PylithScalar s22 = stress[iQs+1];
+    const PylithScalar s33 = stress[iQs+2];
+    const PylithScalar s12 = stress[iQs+3];
+    const PylithScalar s23 = stress[iQs+4];
+    const PylithScalar s13 = stress[iQs+5];
     
     for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
         iBasis < numBasis;
         ++iBasis) {
       const int iBlock = iBasis*spaceDim;
-      const double N1 = wt*basisDeriv[iQ+iBlock+0];
-      const double N2 = wt*basisDeriv[iQ+iBlock+1];
-      const double N3 = wt*basisDeriv[iQ+iBlock+2];
+      const PylithScalar N1 = wt*basisDeriv[iQ+iBlock+0];
+      const PylithScalar N2 = wt*basisDeriv[iQ+iBlock+1];
+      const PylithScalar N3 = wt*basisDeriv[iQ+iBlock+2];
 
       _cellVector[iBlock  ] -= N1*s11 + N2*s12 + N3*s13;
       _cellVector[iBlock+1] -= N1*s12 + N2*s22 + N3*s23;
@@ -745,28 +746,28 @@
 // Integrate elasticity term in Jacobian for 1-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityJacobian1D(
-			       const double_array& elasticConsts)
+			       const scalar_array& elasticConsts)
 { // _elasticityJacobian1D
   const int cellDim = 1;
   const int spaceDim = 1;
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
   assert(quadWts.size() == numQuadPts);
   
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double C1111 = elasticConsts[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar C1111 = elasticConsts[iQuad];
     for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-      const double valI = wt*basisDeriv[iQ+iBasis]*C1111;
+      const PylithScalar valI = wt*basisDeriv[iQ+iBasis]*C1111;
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	const double valIJ = valI * basisDeriv[iQ+jBasis];
+	const PylithScalar valIJ = valI * basisDeriv[iQ+jBasis];
 	const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
 	const int jBlock = jBasis*spaceDim;
 	_cellMatrix[iBlock+jBlock] += valIJ;
@@ -777,42 +778,10 @@
 } // _elasticityJacobian1D
 
 // ----------------------------------------------------------------------
-// Integrate laplacian term in Jacobian preconditioner for 1-D cells.
-void
-pylith::feassemble::IntegratorElasticity::_elasticityPrecon1D(
-			       const double_array& elasticConsts)
-{ // _elasticityPrecon1D
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
-  
-  assert(1 == cellDim);
-  assert(quadWts.size() == numQuadPts);
-  
-  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-      const double valI = wt*basisDeriv[iQ+iBasis];
-      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-        const double valIJ = valI * basisDeriv[iQ+jBasis];
-        const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
-        const int jBlock = jBasis*spaceDim;
-        _cellMatrix[iBlock+jBlock] += valIJ;
-      } // for
-    } // for
-  } // for
-  PetscLogFlops(numQuadPts*(1+numBasis*(1+numBasis*2)));
-} // _elasticityPrecon1D
-
-// ----------------------------------------------------------------------
 // Integrate elasticity term in Jacobian for 2-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityJacobian2D(
-			       const double_array& elasticConsts)
+			       const scalar_array& elasticConsts)
 { // _elasticityJacobian2D
   const int spaceDim = 2;
   const int cellDim = 2;
@@ -820,49 +789,49 @@
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
   assert(quadWts.size() == numQuadPts);
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
     // tau_ij = C_ijkl * e_kl
     //        = C_ijlk * 0.5 (u_k,l + u_l,k)
     //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
     // divide C_ijkl by 2 if k != l
-    const double C1111 = elasticConsts[iQuad*numConsts+0];
-    const double C1122 = elasticConsts[iQuad*numConsts+1];
-    const double C1112 = elasticConsts[iQuad*numConsts+2]/2.0;
-    const double C2211 = elasticConsts[iQuad*numConsts+3];
-    const double C2222 = elasticConsts[iQuad*numConsts+4];
-    const double C2212 = elasticConsts[iQuad*numConsts+5]/2.0;
-    const double C1211 = elasticConsts[iQuad*numConsts+6];
-    const double C1222 = elasticConsts[iQuad*numConsts+7];
-    const double C1212 = elasticConsts[iQuad*numConsts+8]/2.0;
+    const PylithScalar C1111 = elasticConsts[iQuad*numConsts+0];
+    const PylithScalar C1122 = elasticConsts[iQuad*numConsts+1];
+    const PylithScalar C1112 = elasticConsts[iQuad*numConsts+2]/2.0;
+    const PylithScalar C2211 = elasticConsts[iQuad*numConsts+3];
+    const PylithScalar C2222 = elasticConsts[iQuad*numConsts+4];
+    const PylithScalar C2212 = elasticConsts[iQuad*numConsts+5]/2.0;
+    const PylithScalar C1211 = elasticConsts[iQuad*numConsts+6];
+    const PylithScalar C1222 = elasticConsts[iQuad*numConsts+7];
+    const PylithScalar C1212 = elasticConsts[iQuad*numConsts+8]/2.0;
     for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
 	 iBasis < numBasis;
 	 ++iBasis) {
-      const double Ni1 = wt*basisDeriv[iQ+iBasis*spaceDim  ];
-      const double Ni2 = wt*basisDeriv[iQ+iBasis*spaceDim+1];
+      const PylithScalar Ni1 = wt*basisDeriv[iQ+iBasis*spaceDim  ];
+      const PylithScalar Ni2 = wt*basisDeriv[iQ+iBasis*spaceDim+1];
       const int iBlock = (iBasis*spaceDim  ) * (numBasis*spaceDim);
       const int iBlock1 = (iBasis*spaceDim+1) * (numBasis*spaceDim);
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	const double Nj1 = basisDeriv[iQ+jBasis*spaceDim  ];
-	const double Nj2 = basisDeriv[iQ+jBasis*spaceDim+1];
-	const double ki0j0 = 
+	const PylithScalar Nj1 = basisDeriv[iQ+jBasis*spaceDim  ];
+	const PylithScalar Nj2 = basisDeriv[iQ+jBasis*spaceDim+1];
+	const PylithScalar ki0j0 = 
 	  C1111 * Ni1 * Nj1 + C1211 * Ni2 * Nj1 +
 	  C1112 * Ni1 * Nj2 + C1212 * Ni2 * Nj2;
-	const double ki0j1 =
+	const PylithScalar ki0j1 =
 	  C1122 * Ni1 * Nj2 + C1222 * Ni2 * Nj2 +
 	  C1112 * Ni1 * Nj1 + C1212 * Ni2 * Nj1;
-	const double ki1j0 =
+	const PylithScalar ki1j0 =
 	  C2211 * Ni2 * Nj1 + C1211 * Ni1 * Nj1 +
 	  C2212 * Ni2 * Nj2 + C1212 * Ni1 * Nj2;
-	const double ki1j1 =
+	const PylithScalar ki1j1 =
 	  C2222 * Ni2 * Nj2 + C1222 * Ni1 * Nj2 +
 	  C2212 * Ni2 * Nj1 + C1212 * Ni1 * Nj1;
 	const int jBlock = (jBasis*spaceDim  );
@@ -878,52 +847,10 @@
 } // _elasticityJacobian2D
 
 // ----------------------------------------------------------------------
-// Integrate laplacian term in Jacobian preconditioner for 2-D cells.
-void
-pylith::feassemble::IntegratorElasticity::_elasticityPrecon2D(
-			       const double_array& elasticConsts)
-{ // _elasticityPrecon2D
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
-
-  assert(2 == cellDim);
-  assert(quadWts.size() == numQuadPts);
-
-  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    // Delta_ij = C_ijkl * e_kl
-    //        = C_ijlk * 0.5 (u_k,l + u_l,k)
-    //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
-    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
-	 iBasis < numBasis;
-	 ++iBasis) {
-      const double Ni1  = wt*basisDeriv[iQ+iBasis*spaceDim  ];
-      const double Ni2  = wt*basisDeriv[iQ+iBasis*spaceDim+1];
-      const int iBlock  = (iBasis*spaceDim  ) * (numBasis*spaceDim);
-      const int iBlock1 = (iBasis*spaceDim+1) * (numBasis*spaceDim);
-      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-        const double Nj1  = basisDeriv[iQ+jBasis*spaceDim  ];
-        const double Nj2  = basisDeriv[iQ+jBasis*spaceDim+1];
-        const int jBlock  = (jBasis*spaceDim  );
-        const int jBlock1 = (jBasis*spaceDim+1);
-        _cellMatrix[iBlock +jBlock ] += Ni1*Nj1;
-        _cellMatrix[iBlock1+jBlock1] += Ni2*Nj2;
-      } // for
-    } // for
-  } // for
-  PetscLogFlops(numQuadPts*(1+numBasis*(2+numBasis*(4))));
-} // _elasticityPrecon2D
-
-// ----------------------------------------------------------------------
 // Integrate elasticity term in Jacobian for 3-D cells.
 void
 pylith::feassemble::IntegratorElasticity::_elasticityJacobian3D(
-			       const double_array& elasticConsts)
+			       const scalar_array& elasticConsts)
 { // _elasticityJacobian3D
   const int spaceDim = 3;
   const int cellDim = 3;
@@ -931,9 +858,9 @@
 
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(_quadrature->spaceDim() == spaceDim);
   assert(_quadrature->cellDim() == cellDim);
@@ -941,90 +868,90 @@
 
   // Compute Jacobian for consistent tangent matrix
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
     // tau_ij = C_ijkl * e_kl
     //        = C_ijlk * 0.5 (u_k,l + u_l,k)
     //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
     // divide C_ijkl by 2 if k != l
-    const double C1111 = elasticConsts[iQuad*numConsts+ 0];
-    const double C1122 = elasticConsts[iQuad*numConsts+ 1];
-    const double C1133 = elasticConsts[iQuad*numConsts+ 2];
-    const double C1112 = elasticConsts[iQuad*numConsts+ 3] / 2.0;
-    const double C1123 = elasticConsts[iQuad*numConsts+ 4] / 2.0;
-    const double C1113 = elasticConsts[iQuad*numConsts+ 5] / 2.0;
-    const double C2211 = elasticConsts[iQuad*numConsts+ 6];
-    const double C2222 = elasticConsts[iQuad*numConsts+ 7];
-    const double C2233 = elasticConsts[iQuad*numConsts+ 8];
-    const double C2212 = elasticConsts[iQuad*numConsts+ 9] / 2.0;
-    const double C2223 = elasticConsts[iQuad*numConsts+10] / 2.0;
-    const double C2213 = elasticConsts[iQuad*numConsts+11] / 2.0;
-    const double C3311 = elasticConsts[iQuad*numConsts+12];
-    const double C3322 = elasticConsts[iQuad*numConsts+13];
-    const double C3333 = elasticConsts[iQuad*numConsts+14];
-    const double C3312 = elasticConsts[iQuad*numConsts+15] / 2.0;
-    const double C3323 = elasticConsts[iQuad*numConsts+16] / 2.0;
-    const double C3313 = elasticConsts[iQuad*numConsts+17] / 2.0;
-    const double C1211 = elasticConsts[iQuad*numConsts+18];
-    const double C1222 = elasticConsts[iQuad*numConsts+19];
-    const double C1233 = elasticConsts[iQuad*numConsts+20];
-    const double C1212 = elasticConsts[iQuad*numConsts+21] / 2.0;
-    const double C1223 = elasticConsts[iQuad*numConsts+22] / 2.0;
-    const double C1213 = elasticConsts[iQuad*numConsts+23] / 2.0;
-    const double C2311 = elasticConsts[iQuad*numConsts+24];
-    const double C2322 = elasticConsts[iQuad*numConsts+25];
-    const double C2333 = elasticConsts[iQuad*numConsts+26];
-    const double C2312 = elasticConsts[iQuad*numConsts+27] / 2.0;
-    const double C2323 = elasticConsts[iQuad*numConsts+28] / 2.0;
-    const double C2313 = elasticConsts[iQuad*numConsts+29] / 2.0;
-    const double C1311 = elasticConsts[iQuad*numConsts+30];
-    const double C1322 = elasticConsts[iQuad*numConsts+31];
-    const double C1333 = elasticConsts[iQuad*numConsts+32];
-    const double C1312 = elasticConsts[iQuad*numConsts+33] / 2.0;
-    const double C1323 = elasticConsts[iQuad*numConsts+34] / 2.0;
-    const double C1313 = elasticConsts[iQuad*numConsts+35] / 2.0;
+    const PylithScalar C1111 = elasticConsts[iQuad*numConsts+ 0];
+    const PylithScalar C1122 = elasticConsts[iQuad*numConsts+ 1];
+    const PylithScalar C1133 = elasticConsts[iQuad*numConsts+ 2];
+    const PylithScalar C1112 = elasticConsts[iQuad*numConsts+ 3] / 2.0;
+    const PylithScalar C1123 = elasticConsts[iQuad*numConsts+ 4] / 2.0;
+    const PylithScalar C1113 = elasticConsts[iQuad*numConsts+ 5] / 2.0;
+    const PylithScalar C2211 = elasticConsts[iQuad*numConsts+ 6];
+    const PylithScalar C2222 = elasticConsts[iQuad*numConsts+ 7];
+    const PylithScalar C2233 = elasticConsts[iQuad*numConsts+ 8];
+    const PylithScalar C2212 = elasticConsts[iQuad*numConsts+ 9] / 2.0;
+    const PylithScalar C2223 = elasticConsts[iQuad*numConsts+10] / 2.0;
+    const PylithScalar C2213 = elasticConsts[iQuad*numConsts+11] / 2.0;
+    const PylithScalar C3311 = elasticConsts[iQuad*numConsts+12];
+    const PylithScalar C3322 = elasticConsts[iQuad*numConsts+13];
+    const PylithScalar C3333 = elasticConsts[iQuad*numConsts+14];
+    const PylithScalar C3312 = elasticConsts[iQuad*numConsts+15] / 2.0;
+    const PylithScalar C3323 = elasticConsts[iQuad*numConsts+16] / 2.0;
+    const PylithScalar C3313 = elasticConsts[iQuad*numConsts+17] / 2.0;
+    const PylithScalar C1211 = elasticConsts[iQuad*numConsts+18];
+    const PylithScalar C1222 = elasticConsts[iQuad*numConsts+19];
+    const PylithScalar C1233 = elasticConsts[iQuad*numConsts+20];
+    const PylithScalar C1212 = elasticConsts[iQuad*numConsts+21] / 2.0;
+    const PylithScalar C1223 = elasticConsts[iQuad*numConsts+22] / 2.0;
+    const PylithScalar C1213 = elasticConsts[iQuad*numConsts+23] / 2.0;
+    const PylithScalar C2311 = elasticConsts[iQuad*numConsts+24];
+    const PylithScalar C2322 = elasticConsts[iQuad*numConsts+25];
+    const PylithScalar C2333 = elasticConsts[iQuad*numConsts+26];
+    const PylithScalar C2312 = elasticConsts[iQuad*numConsts+27] / 2.0;
+    const PylithScalar C2323 = elasticConsts[iQuad*numConsts+28] / 2.0;
+    const PylithScalar C2313 = elasticConsts[iQuad*numConsts+29] / 2.0;
+    const PylithScalar C1311 = elasticConsts[iQuad*numConsts+30];
+    const PylithScalar C1322 = elasticConsts[iQuad*numConsts+31];
+    const PylithScalar C1333 = elasticConsts[iQuad*numConsts+32];
+    const PylithScalar C1312 = elasticConsts[iQuad*numConsts+33] / 2.0;
+    const PylithScalar C1323 = elasticConsts[iQuad*numConsts+34] / 2.0;
+    const PylithScalar C1313 = elasticConsts[iQuad*numConsts+35] / 2.0;
     for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
 	 iBasis < numBasis;
 	 ++iBasis) {
-      const double Ni1 = wt*basisDeriv[iQ+iBasis*spaceDim+0];
-      const double Ni2 = wt*basisDeriv[iQ+iBasis*spaceDim+1];
-      const double Ni3 = wt*basisDeriv[iQ+iBasis*spaceDim+2];
+      const PylithScalar Ni1 = wt*basisDeriv[iQ+iBasis*spaceDim+0];
+      const PylithScalar Ni2 = wt*basisDeriv[iQ+iBasis*spaceDim+1];
+      const PylithScalar Ni3 = wt*basisDeriv[iQ+iBasis*spaceDim+2];
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	const double Nj1 = basisDeriv[iQ+jBasis*spaceDim+0];
-	const double Nj2 = basisDeriv[iQ+jBasis*spaceDim+1];
-	const double Nj3 = basisDeriv[iQ+jBasis*spaceDim+2];
-	const double ki0j0 = 
+	const PylithScalar Nj1 = basisDeriv[iQ+jBasis*spaceDim+0];
+	const PylithScalar Nj2 = basisDeriv[iQ+jBasis*spaceDim+1];
+	const PylithScalar Nj3 = basisDeriv[iQ+jBasis*spaceDim+2];
+	const PylithScalar ki0j0 = 
 	  C1111 * Ni1 * Nj1 + C1211 * Ni2 * Nj1 + C1311 * Ni3 * Nj1 +
 	  C1112 * Ni1 * Nj2 + C1212 * Ni2 * Nj2 + C1312 * Ni3 * Nj2 +
 	  C1113 * Ni1 * Nj3 + C1213 * Ni2 * Nj3 + C1313 * Ni3 * Nj3;
-	const double ki0j1 =
+	const PylithScalar ki0j1 =
 	  C1122 * Ni1 * Nj2 + C1222 * Ni2 * Nj2 + C1322 * Ni3 * Nj2 +
 	  C1112 * Ni1 * Nj1 + C1212 * Ni2 * Nj1 + C1312 * Ni3 * Nj1 +
 	  C1123 * Ni1 * Nj3 + C1223 * Ni2 * Nj3 + C1323 * Ni3 * Nj3;
-	const double ki0j2 =
+	const PylithScalar ki0j2 =
 	  C1133 * Ni1 * Nj3 + C1233 * Ni2 * Nj3 + C1333 * Ni3 * Nj3 +
 	  C1123 * Ni1 * Nj2 + C1223 * Ni2 * Nj2 + C1323 * Ni3 * Nj2 +
 	  C1113 * Ni1 * Nj1 + C1213 * Ni2 * Nj1 + C1313 * Ni3 * Nj1;
-	const double ki1j0 =
+	const PylithScalar ki1j0 =
 	  C2211 * Ni2 * Nj1 + C1211 * Ni1 * Nj1 + C2311 * Ni3 * Nj1 +
 	  C2212 * Ni2 * Nj2 + C1212 * Ni1 * Nj2 + C2312 * Ni3 * Nj2 +
 	  C2213 * Ni2 * Nj3 + C1213 * Ni1 * Nj3 + C2313 * Ni3 * Nj3;
-	const double ki1j1 =
+	const PylithScalar ki1j1 =
 	  C2222 * Ni2 * Nj2 + C1222 * Ni1 * Nj2 + C2322 * Ni3 * Nj2 +
 	  C2212 * Ni2 * Nj1 + C1212 * Ni1 * Nj1 + C2312 * Ni3 * Nj1 +
 	  C2223 * Ni2 * Nj3 + C1223 * Ni1 * Nj3 + C2323 * Ni3 * Nj3;
-	const double ki1j2 =
+	const PylithScalar ki1j2 =
 	  C2233 * Ni2 * Nj3 + C1233 * Ni1 * Nj3 + C2333 * Ni3 * Nj3 +
 	  C2223 * Ni2 * Nj2 + C1223 * Ni1 * Nj2 + C2323 * Ni3 * Nj2 +
 	  C2213 * Ni2 * Nj1 + C1213 * Ni1 * Nj1 + C2313 * Ni3 * Nj1;
-	const double ki2j0 =
+	const PylithScalar ki2j0 =
 	  C3311 * Ni3 * Nj1 + C2311 * Ni2 * Nj1 + C1311 * Ni1 * Nj1 +
 	  C3312 * Ni3 * Nj2 + C2312 * Ni2 * Nj2 + C1312 * Ni1 * Nj2 +
 	  C3313 * Ni3 * Nj3 + C2313 * Ni2 * Nj3 + C1313 * Ni1 * Nj3; 
-	const double ki2j1 =
+	const PylithScalar ki2j1 =
 	  C3322 * Ni3 * Nj2 + C2322 * Ni2 * Nj2 + C1322 * Ni1 * Nj2 +
 	  C3312 * Ni3 * Nj1 + C2312 * Ni2 * Nj1 + C1312 * Ni1 * Nj1 +
 	  C3323 * Ni3 * Nj3 + C2323 * Ni2 * Nj3 + C1323 * Ni1 * Nj3; 
-	const double ki2j2 =
+	const PylithScalar ki2j2 =
 	  C3333 * Ni3 * Nj3 + C2333 * Ni2 * Nj3 + C1333 * Ni1 * Nj3 +
 	  C3323 * Ni3 * Nj2 + C2323 * Ni2 * Nj2 + C1323 * Ni1 * Nj2 +
 	  C3313 * Ni3 * Nj1 + C2313 * Ni2 * Nj1 + C1313 * Ni1 * Nj1;
@@ -1050,56 +977,11 @@
 } // _elasticityJacobian3D
 
 // ----------------------------------------------------------------------
-// Integrate laplacian term in Jacobian preconditioner for 3-D cells.
 void
-pylith::feassemble::IntegratorElasticity::_elasticityPrecon3D(
-			       const double_array& elasticConsts)
-{ // _elasticityPrecon3D
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
-  
-  assert(3 == cellDim);
-  assert(quadWts.size() == numQuadPts);
-
-  // Compute Jacobian for consistent tangent matrix
-  for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    for (int iBasis=0, iQ=iQuad*numBasis*spaceDim;
-	 iBasis < numBasis;
-	 ++iBasis) {
-      const double Ni1 = wt*basisDeriv[iQ+iBasis*spaceDim+0];
-      const double Ni2 = wt*basisDeriv[iQ+iBasis*spaceDim+1];
-      const double Ni3 = wt*basisDeriv[iQ+iBasis*spaceDim+2];
-      for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-        const double Nj1 = basisDeriv[iQ+jBasis*spaceDim+0];
-        const double Nj2 = basisDeriv[iQ+jBasis*spaceDim+1];
-        const double Nj3 = basisDeriv[iQ+jBasis*spaceDim+2];
-        const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
-        const int iBlock1 = (iBasis*spaceDim+1) * (numBasis*spaceDim);
-        const int iBlock2 = (iBasis*spaceDim+2) * (numBasis*spaceDim);
-        const int jBlock = jBasis*spaceDim;
-        const int jBlock1 = jBasis*spaceDim+1;
-        const int jBlock2 = jBasis*spaceDim+2;
-        _cellMatrix[iBlock +jBlock ] += Ni1*Nj1;
-        _cellMatrix[iBlock1+jBlock1] += Ni2*Nj2;
-        _cellMatrix[iBlock2+jBlock2] += Ni3*Nj3;
-      } // for
-    } // for
-  } // for
-  PetscLogFlops(numQuadPts*(1+numBasis*(3+numBasis*(6))));
-} // _elasticityPrecon3D
-
-// ----------------------------------------------------------------------
-void
 pylith::feassemble::IntegratorElasticity::_calcTotalStrain1D(
-					    double_array* strain,
-					    const double_array& basisDeriv,
-					    const double_array& disp,
+					    scalar_array* strain,
+					    const scalar_array& basisDeriv,
+					    const scalar_array& disp,
 					    const int numBasis,
 					    const int numQuadPts)
 { // calcTotalStrain1D
@@ -1120,9 +1002,9 @@
 // ----------------------------------------------------------------------
 void
 pylith::feassemble::IntegratorElasticity::_calcTotalStrain2D(
-					    double_array* strain,
-					    const double_array& basisDeriv,
-					    const double_array& disp,
+					    scalar_array* strain,
+					    const scalar_array& basisDeriv,
+					    const scalar_array& disp,
 					    const int numBasis,
 					    const int numQuadPts)
 { // calcTotalStrain2D
@@ -1150,9 +1032,9 @@
 // ----------------------------------------------------------------------
 void
 pylith::feassemble::IntegratorElasticity::_calcTotalStrain3D(
-					    double_array* strain,
-					    const double_array& basisDeriv,
-					    const double_array& disp,
+					    scalar_array* strain,
+					    const scalar_array& basisDeriv,
+					    const scalar_array& disp,
 					    const int numBasis,
 					    const int numQuadPts)
 { // calcTotalStrain3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticity.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 #include "pylith/topology/Mesh.hh" // ISA Integrator<Mesh>
 #include "Integrator.hh" // ISA Integrator
 
-#include "pylith/utils/arrayfwd.hh" // USES std::vector, double_array
+#include "pylith/utils/arrayfwd.hh" // USES std::vector, scalar_array
 
 // IntegratorElasticity -------------------------------------------------
 /** @brief General elasticity operations for implicit and explicit
@@ -49,9 +49,9 @@
 // PUBLIC TYPEDEFS //////////////////////////////////////////////////////
 public :
 
-  typedef void (*totalStrain_fn_type)(double_array*,
-				      const double_array&,
-				      const double_array&,
+  typedef void (*totalStrain_fn_type)(scalar_array*,
+				      const scalar_array&,
+				      const scalar_array&,
 				      const int,
 				      const int);
   
@@ -101,7 +101,7 @@
    * @param fields Solution fields
    * @param mesh Finite-element mesh
    */
-  void updateStateVars(const double t,
+  void updateStateVars(const PylithScalar t,
 		       topology::SolutionFields* const fields);
 
   /** Verify configuration is acceptable.
@@ -165,56 +165,38 @@
    *
    * @param stress Stress tensor for cell at quadrature points.
    */
-  void _elasticityResidual1D(const double_array& stress);
+  void _elasticityResidual1D(const scalar_array& stress);
 
   /** Integrate elasticity term in residual for 2-D cells.
    *
    * @param stress Stress tensor for cell at quadrature points.
    */
-  void _elasticityResidual2D(const double_array& stress);
+  void _elasticityResidual2D(const scalar_array& stress);
 
   /** Integrate elasticity term in residual for 3-D cells.
    *
    * @param stress Stress tensor for cell at quadrature points.
    */
-  void _elasticityResidual3D(const double_array& stress);
+  void _elasticityResidual3D(const scalar_array& stress);
 
   /** Integrate elasticity term in Jacobian for 1-D cells.
    *
    * @param elasticConsts Matrix of elasticity constants at quadrature points.
    */
-  void _elasticityJacobian1D(const double_array& elasticConsts);
+  void _elasticityJacobian1D(const scalar_array& elasticConsts);
 
   /** Integrate elasticity term in Jacobian for 2-D cells.
    *
    * @param elasticConsts Matrix of elasticity constants at quadrature points.
    */
-  void _elasticityJacobian2D(const double_array& elasticConsts);
+  void _elasticityJacobian2D(const scalar_array& elasticConsts);
 
   /** Integrate elasticity term in Jacobian for 3-D cells.
    *
    * @param elasticConsts Matrix of elasticity constants at quadrature points.
    */
-  void _elasticityJacobian3D(const double_array& elasticConsts);
+  void _elasticityJacobian3D(const scalar_array& elasticConsts);
 
-  /** Integrate laplacian term in Jacobian preconditioner for 1-D cells.
-   *
-   * @param elasticConsts Matrix of elasticity constants at quadrature points.
-   */
-  void _elasticityPrecon1D(const double_array& elasticConsts);
-
-  /** Integrate laplacian term in Jacobian preconditioner for 2-D cells.
-   *
-   * @param elasticConsts Matrix of elasticity constants at quadrature points.
-   */
-  void _elasticityPrecon2D(const double_array& elasticConsts);
-
-  /** Integrate laplacian term in Jacobian preconditioner for 3-D cells.
-   *
-   * @param elasticConsts Matrix of elasticity constants at quadrature points.
-   */
-  void _elasticityPrecon3D(const double_array& elasticConsts);
-
   /** Compute total strain in at quadrature points of a cell.
    *
    * @param strain Strain tensor at quadrature points.
@@ -225,9 +207,9 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain1D(double_array* strain,
-			  const double_array& basisDeriv,
-			  const double_array& disp,
+  void _calcTotalStrain1D(scalar_array* strain,
+			  const scalar_array& basisDeriv,
+			  const scalar_array& disp,
 			  const int numBasis,
 			  const int numQuadPts);
 
@@ -240,9 +222,9 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain2D(double_array* strain,
-			  const double_array& basisDeriv,
-			  const double_array& disp,
+  void _calcTotalStrain2D(scalar_array* strain,
+			  const scalar_array& basisDeriv,
+			  const scalar_array& disp,
 			  const int numBasis,
 			  const int numQuadPts);
 
@@ -255,9 +237,9 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain3D(double_array* strain,
-			  const double_array& basisDeriv,
-			  const double_array& disp,
+  void _calcTotalStrain3D(scalar_array* strain,
+			  const scalar_array& basisDeriv,
+			  const scalar_array& disp,
 			  const int numBasis,
 			  const int numQuadPts);
 
@@ -278,7 +260,7 @@
 
   typedef pylith::topology::Field<pylith::topology::Mesh>::RestrictVisitor RestrictVisitor;
   typedef pylith::topology::Field<pylith::topology::Mesh>::UpdateAddVisitor UpdateAddVisitor;
-  typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+  typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PylithInt> IndicesVisitor;
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cstring> // USES memcpy()
 #include <strings.h> // USES strcasecmp()
@@ -65,7 +65,7 @@
 // Update state variables as needed.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::updateStateVars(
-				      const double t,
+				      const PylithScalar t,
 				      topology::SolutionFields* const fields)
 { // updateStateVars
   assert(0 != _quadrature);
@@ -99,9 +99,9 @@
   } // else
 
   // Allocate arrays for cell data.
-  double_array dispCell(numBasis*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
   deformCell = 0.0;
   strainCell = 0.0;
 
@@ -121,7 +121,7 @@
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
 
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -146,7 +146,7 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
     // Compute deformation tensor.
     _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
@@ -196,10 +196,10 @@
   } // else
   
   // Allocate arrays for cell data.
-  double_array dispCell(numBasis*spaceDim);
-  double_array deformCell(numQuadPts*spaceDim*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array dispCell(numBasis*spaceDim);
+  scalar_array deformCell(numQuadPts*spaceDim*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
+  scalar_array stressCell(numQuadPts*tensorSize);
 
   // Get cell information
   const ALE::Obj<SieveMesh>& sieveMesh = field->mesh().sieveMesh();
@@ -217,7 +217,7 @@
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
     
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -245,7 +245,7 @@
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
 
     // Get cell geometry information that depends on cell
-    const double_array& basisDeriv = _quadrature->basisDeriv();
+    const scalar_array& basisDeriv = _quadrature->basisDeriv();
     
     // Compute deformation tensor.
     _calcDeformation(&deformCell, basisDeriv, coordinatesCell, dispCell,
@@ -280,9 +280,9 @@
   const int tensorSize = _material->tensorSize();
   
   // Allocate arrays for cell data.
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array strainCell(numQuadPts*tensorSize);
   strainCell = 0.0;
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array stressCell(numQuadPts*tensorSize);
   stressCell = 0.0;
 
   // Get cell information
@@ -314,28 +314,28 @@
 // Integrate elasticity term in residual for 1-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual1D(
-				     const double_array& stress,
-				     const double_array& disp)
+				     const scalar_array& stress,
+				     const scalar_array& disp)
 { // _elasticityResidual1D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
 
   assert(1 == cellDim);
   assert(quadWts.size() == numQuadPts);
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQuad];
-    double l11 = 0.0;
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQuad];
+    PylithScalar l11 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis)
       l11 += basisDeriv[iQuad*numBasis+kBasis  ] * disp[kBasis  ]; 
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double N1 = wt * (1.0 + l11) * basisDeriv[iQuad*numBasis+iBasis  ];
+      const PylithScalar N1 = wt * (1.0 + l11) * basisDeriv[iQuad*numBasis+iBasis  ];
       _cellVector[iBasis*spaceDim  ] -= N1*s11;
     } // for
   } // for
@@ -346,16 +346,16 @@
 // Integrate elasticity term in residual for 2-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual2D(
-				     const double_array& stress,
-				     const double_array& disp)
+				     const scalar_array& stress,
+				     const scalar_array& disp)
 { // _elasticityResidual2D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(2 == cellDim);
   assert(quadWts.size() == numQuadPts);
@@ -363,15 +363,15 @@
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQ = iQuad*numBasis*spaceDim;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQuad*stressSize+0];
-    const double s22 = stress[iQuad*stressSize+1];
-    const double s12 = stress[iQuad*stressSize+2];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQuad*stressSize+0];
+    const PylithScalar s22 = stress[iQuad*stressSize+1];
+    const PylithScalar s12 = stress[iQuad*stressSize+2];
 
-    double l11 = 0.0;
-    double l12 = 0.0;
-    double l21 = 0.0;
-    double l22 = 0.0;
+    PylithScalar l11 = 0.0;
+    PylithScalar l12 = 0.0;
+    PylithScalar l21 = 0.0;
+    PylithScalar l22 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis) {
       const int kB = kBasis*spaceDim;
       l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
@@ -384,8 +384,8 @@
 	 iBasis < numBasis;
 	 ++iBasis) {
       const int iB = iBasis*spaceDim;
-      const double Nip = basisDeriv[iQ+iB  ];
-      const double Niq = basisDeriv[iQ+iB+1];
+      const PylithScalar Nip = basisDeriv[iQ+iB  ];
+      const PylithScalar Niq = basisDeriv[iQ+iB+1];
 
       // Generated using Maxima (see jacobian2d_lgdeform.wxm)
       _cellVector[iB  ] -= 
@@ -406,16 +406,16 @@
 // Integrate elasticity term in residual for 3-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityResidual3D(
-				     const double_array& stress,
-				     const double_array& disp)
+				     const scalar_array& stress,
+				     const scalar_array& disp)
 { // _elasticityResidual3D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(3 == cellDim);
   assert(quadWts.size() == numQuadPts);
@@ -423,23 +423,23 @@
   
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQ = iQuad*numBasis*spaceDim;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double s11 = stress[iQuad*stressSize+0];
-    const double s22 = stress[iQuad*stressSize+1];
-    const double s33 = stress[iQuad*stressSize+2];
-    const double s12 = stress[iQuad*stressSize+3];
-    const double s23 = stress[iQuad*stressSize+4];
-    const double s13 = stress[iQuad*stressSize+5];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar s11 = stress[iQuad*stressSize+0];
+    const PylithScalar s22 = stress[iQuad*stressSize+1];
+    const PylithScalar s33 = stress[iQuad*stressSize+2];
+    const PylithScalar s12 = stress[iQuad*stressSize+3];
+    const PylithScalar s23 = stress[iQuad*stressSize+4];
+    const PylithScalar s13 = stress[iQuad*stressSize+5];
     
-    double l11 = 0.0;
-    double l12 = 0.0;
-    double l13 = 0.0;
-    double l21 = 0.0;
-    double l22 = 0.0;
-    double l23 = 0.0;
-    double l31 = 0.0;
-    double l32 = 0.0;
-    double l33 = 0.0;
+    PylithScalar l11 = 0.0;
+    PylithScalar l12 = 0.0;
+    PylithScalar l13 = 0.0;
+    PylithScalar l21 = 0.0;
+    PylithScalar l22 = 0.0;
+    PylithScalar l23 = 0.0;
+    PylithScalar l31 = 0.0;
+    PylithScalar l32 = 0.0;
+    PylithScalar l33 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis) {
       const int kB = kBasis*spaceDim;
       l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
@@ -457,9 +457,9 @@
 	 iBasis < numBasis;
 	 ++iBasis) {
       const int iB = iBasis*spaceDim;
-      const double Nip = basisDeriv[iQ+iB  ];
-      const double Niq = basisDeriv[iQ+iB+1];
-      const double Nir = basisDeriv[iQ+iB+2];
+      const PylithScalar Nip = basisDeriv[iQ+iB  ];
+      const PylithScalar Niq = basisDeriv[iQ+iB+1];
+      const PylithScalar Nir = basisDeriv[iQ+iB+2];
 
       // Generated using Maxima (see jacobian3d_lgdeform.wxm)
       _cellVector[iB  ] -= 
@@ -494,27 +494,27 @@
 // Integrate elasticity term in Jacobian for 1-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian1D(
-				       const double_array& elasticConsts,
-				       const double_array& stress,
-				       const double_array& disp)
+				       const scalar_array& elasticConsts,
+				       const scalar_array& stress,
+				       const scalar_array& disp)
 { // _elasticityJacobian1D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   
   assert(1 == cellDim);
   assert(quadWts.size() == numQuadPts);
   
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
-    const double C1111 = elasticConsts[iQuad];
-    const double s11 = stress[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar C1111 = elasticConsts[iQuad];
+    const PylithScalar s11 = stress[iQuad];
 
-    double l11 = 0.0;
+    PylithScalar l11 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis)
       l11 += basisDeriv[iQuad*numBasis+kBasis  ] * disp[kBasis  ]; 
 
@@ -524,11 +524,11 @@
     // valInl = Ni,1
     // valJnl = Nj,1
     for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
-      const double valI = wt*basisDeriv[iQ+iBasis]*(1.0+l11)*(1.0+l11)*C1111;
-      const double valInl = wt*s11*basisDeriv[iQ+iBasis];
+      const PylithScalar valI = wt*basisDeriv[iQ+iBasis]*(1.0+l11)*(1.0+l11)*C1111;
+      const PylithScalar valInl = wt*s11*basisDeriv[iQ+iBasis];
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
-	const double valIJ = valI * basisDeriv[iQ+jBasis];
-	const double valIJnl = valInl * basisDeriv[iQ+jBasis];
+	const PylithScalar valIJ = valI * basisDeriv[iQ+jBasis];
+	const PylithScalar valIJnl = valInl * basisDeriv[iQ+jBasis];
 	const int iBlock = iBasis*spaceDim * (numBasis*spaceDim);
 	const int jBlock = jBasis*spaceDim;
 	_cellMatrix[iBlock+jBlock] += valIJ + valIJnl;
@@ -542,17 +542,17 @@
 // Integrate elasticity term in Jacobian for 2-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian2D(
-				       const double_array& elasticConsts,
-				       const double_array& stress,
-				       const double_array& disp)
+				       const scalar_array& elasticConsts,
+				       const scalar_array& stress,
+				       const scalar_array& disp)
 { // _elasticityJacobian2D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   const int tensorSize = _material->tensorSize();
   
   assert(2 == cellDim);
@@ -561,31 +561,31 @@
 
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQ = iQuad*numBasis*spaceDim;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
     // tau_ij = C_ijkl * e_kl
     //        = C_ijlk * 0.5 (u_k,l + u_l,k)
     //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
     // divide C_ijkl by 2 if k != l
     const int iC = iQuad*numConsts;
-    const double C1111 = elasticConsts[iC+0];
-    const double C1122 = elasticConsts[iC+1];
-    const double C1112 = elasticConsts[iC+2] / 2.0; // 2*mu -> mu
-    const double C2211 = elasticConsts[iC+3];
-    const double C2222 = elasticConsts[iC+4];
-    const double C2212 = elasticConsts[iC+5] / 2.0;
-    const double C1211 = elasticConsts[iC+6];
-    const double C1222 = elasticConsts[iC+7];
-    const double C1212 = elasticConsts[iC+8] / 2.0;
+    const PylithScalar C1111 = elasticConsts[iC+0];
+    const PylithScalar C1122 = elasticConsts[iC+1];
+    const PylithScalar C1112 = elasticConsts[iC+2] / 2.0; // 2*mu -> mu
+    const PylithScalar C2211 = elasticConsts[iC+3];
+    const PylithScalar C2222 = elasticConsts[iC+4];
+    const PylithScalar C2212 = elasticConsts[iC+5] / 2.0;
+    const PylithScalar C1211 = elasticConsts[iC+6];
+    const PylithScalar C1222 = elasticConsts[iC+7];
+    const PylithScalar C1212 = elasticConsts[iC+8] / 2.0;
 
     const int iS = iQuad*tensorSize;
-    const double s11 = stress[iS+0];
-    const double s22 = stress[iS+1];
-    const double s12 = stress[iS+2];
+    const PylithScalar s11 = stress[iS+0];
+    const PylithScalar s22 = stress[iS+1];
+    const PylithScalar s12 = stress[iS+2];
 
-    double l11 = 0.0;
-    double l12 = 0.0;
-    double l21 = 0.0;
-    double l22 = 0.0;
+    PylithScalar l11 = 0.0;
+    PylithScalar l12 = 0.0;
+    PylithScalar l21 = 0.0;
+    PylithScalar l22 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis) {
       const int kB = kBasis*spaceDim;
       l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
@@ -598,20 +598,20 @@
 	 iBasis < numBasis;
 	 ++iBasis) {
       const int iB = iBasis*spaceDim;
-      const double Nip = wt*basisDeriv[iQ+iB  ];
-      const double Niq = wt*basisDeriv[iQ+iB+1];
+      const PylithScalar Nip = wt*basisDeriv[iQ+iB  ];
+      const PylithScalar Niq = wt*basisDeriv[iQ+iB+1];
       const int iBlock = (iB) * (numBasis*spaceDim);
       const int iBlock1 = (iB+1) * (numBasis*spaceDim);
 
-      const double valInl0 = Nip*s11 + Niq*s12;
-      const double valInl1 = Nip*s12 + Niq*s22;
+      const PylithScalar valInl0 = Nip*s11 + Niq*s12;
+      const PylithScalar valInl1 = Nip*s12 + Niq*s22;
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
 	const int jB = jBasis*spaceDim;
-	const double Njp = basisDeriv[iQ+jB  ];
-	const double Njq = basisDeriv[iQ+jB+1];
+	const PylithScalar Njp = basisDeriv[iQ+jB  ];
+	const PylithScalar Njq = basisDeriv[iQ+jB+1];
 
 	// Generated using Maxima (see jacobian2d_lgdeform.wxm)
-	const double Ki0j0 = 
+	const PylithScalar Ki0j0 = 
 	  l12*Niq*(l12*Njq*C2222 + 
 		   ((l11+1)*Njq+l12*Njp)*C2212 + 
 		   (l11+1)*Njp*C2211) + 
@@ -621,7 +621,7 @@
 	  (l11+1)*Nip*(l12*Njq*C1122 + 
 		       ((l11+1)*Njq+l12*Njp)*C1112 + 
 		       (l11+1)*Njp*C1111);
-	const double Ki0j1 =
+	const PylithScalar Ki0j1 =
 	  l12*Niq*((l22+1.0)*Njq*C2222 + 
 		   (l21*Njq+(l22+1.0)*Njp)*C2212 + 
 		   l21*Njp*C2211) + 
@@ -631,7 +631,7 @@
 	  (l11+1.0)*Nip*((l22+1.0)*Njq*C1122 + 
 		       (l21*Njq+(l22+1.0)*Njp)*C1112 + 
 		       l21*Njp*C1111);
-	const double Ki1j0 =
+	const PylithScalar Ki1j0 =
 	  (l22+1.0)*Niq*(l12*Njq*C2222 + 
 		       ((l11+1.0)*Njq+l12*Njp)*C2212 + 
 		       (l11+1.0)*Njp*C2211) + 
@@ -641,7 +641,7 @@
 	  l21*Nip*(l12*Njq*C1122 + 
 		   ((l11+1.0)*Njq+l12*Njp)*C1112 + 
 		   (l11+1.0)*Njp*C1111);
-	const double Ki1j1 =
+	const PylithScalar Ki1j1 =
 	  (l22+1.0)*Niq*((l22+1.0)*Njq*C2222 + 
 		       (l21*Njq+(l22+1.0)*Njp)*C2212 + 
 		       l21*Njp*C2211) + 
@@ -651,7 +651,7 @@
 	  l21*Nip*((l22+1.0)*Njq*C1122 + 
 		   (l21*Njq+(l22+1.0)*Njp)*C1112 + 
 		   l21*Njp*C1111);
-	const double Knl = 
+	const PylithScalar Knl = 
 	  (Nip*s11 + Niq*s12)*Njp + (Nip*s12 + Niq*s22)*Njq;
 
 	const int jBlock = (jB);
@@ -670,17 +670,17 @@
 // Integrate elasticity term in Jacobian for 3-D cells.
 void
 pylith::feassemble::IntegratorElasticityLgDeform::_elasticityJacobian3D(
-				       const double_array& elasticConsts,
-				       const double_array& stress,
-				       const double_array& disp)
+				       const scalar_array& elasticConsts,
+				       const scalar_array& stress,
+				       const scalar_array& disp)
 { // _elasticityJacobian3D
   const int numQuadPts = _quadrature->numQuadPts();
   const int numBasis = _quadrature->numBasis();
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
-  const double_array& quadWts = _quadrature->quadWts();
-  const double_array& jacobianDet = _quadrature->jacobianDet();
-  const double_array& basisDeriv = _quadrature->basisDeriv();
+  const scalar_array& quadWts = _quadrature->quadWts();
+  const scalar_array& jacobianDet = _quadrature->jacobianDet();
+  const scalar_array& basisDeriv = _quadrature->basisDeriv();
   const int tensorSize = _material->tensorSize();
 
   assert(3 == cellDim);
@@ -691,66 +691,66 @@
   // Compute Jacobian for consistent tangent matrix
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
     const int iQ = iQuad*numBasis*spaceDim;
-    const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+    const PylithScalar wt = quadWts[iQuad] * jacobianDet[iQuad];
     // tau_ij = C_ijkl * e_kl
     //        = C_ijlk * 0.5 (u_k,l + u_l,k)
     //        = 0.5 * C_ijkl * (u_k,l + u_l,k)
     // divide C_ijkl by 2 if k != l
     const int iC = iQuad*numConsts;
-    const double C1111 = elasticConsts[iC+ 0];
-    const double C1122 = elasticConsts[iC+ 1];
-    const double C1133 = elasticConsts[iC+ 2];
-    const double C1112 = elasticConsts[iC+ 3] / 2.0;
-    const double C1123 = elasticConsts[iC+ 4] / 2.0;
-    const double C1113 = elasticConsts[iC+ 5] / 2.0;
-    const double C2211 = elasticConsts[iC+ 6];
-    const double C2222 = elasticConsts[iC+ 7];
-    const double C2233 = elasticConsts[iC+ 8];
-    const double C2212 = elasticConsts[iC+ 9] / 2.0;
-    const double C2223 = elasticConsts[iC+10] / 2.0;
-    const double C2213 = elasticConsts[iC+11] / 2.0;
-    const double C3311 = elasticConsts[iC+12];
-    const double C3322 = elasticConsts[iC+13];
-    const double C3333 = elasticConsts[iC+14];
-    const double C3312 = elasticConsts[iC+15] / 2.0;
-    const double C3323 = elasticConsts[iC+16] / 2.0;
-    const double C3313 = elasticConsts[iC+17] / 2.0;
-    const double C1211 = elasticConsts[iC+18];
-    const double C1222 = elasticConsts[iC+19];
-    const double C1233 = elasticConsts[iC+20];
-    const double C1212 = elasticConsts[iC+21] / 2.0;
-    const double C1223 = elasticConsts[iC+22] / 2.0;
-    const double C1213 = elasticConsts[iC+23] / 2.0;
-    const double C2311 = elasticConsts[iC+24];
-    const double C2322 = elasticConsts[iC+25];
-    const double C2333 = elasticConsts[iC+26];
-    const double C2312 = elasticConsts[iC+27] / 2.0;
-    const double C2323 = elasticConsts[iC+28] / 2.0;
-    const double C2313 = elasticConsts[iC+29] / 2.0;
-    const double C1311 = elasticConsts[iC+30];
-    const double C1322 = elasticConsts[iC+31];
-    const double C1333 = elasticConsts[iC+32];
-    const double C1312 = elasticConsts[iC+33] / 2.0;
-    const double C1323 = elasticConsts[iC+34] / 2.0;
-    const double C1313 = elasticConsts[iC+35] / 2.0;
+    const PylithScalar C1111 = elasticConsts[iC+ 0];
+    const PylithScalar C1122 = elasticConsts[iC+ 1];
+    const PylithScalar C1133 = elasticConsts[iC+ 2];
+    const PylithScalar C1112 = elasticConsts[iC+ 3] / 2.0;
+    const PylithScalar C1123 = elasticConsts[iC+ 4] / 2.0;
+    const PylithScalar C1113 = elasticConsts[iC+ 5] / 2.0;
+    const PylithScalar C2211 = elasticConsts[iC+ 6];
+    const PylithScalar C2222 = elasticConsts[iC+ 7];
+    const PylithScalar C2233 = elasticConsts[iC+ 8];
+    const PylithScalar C2212 = elasticConsts[iC+ 9] / 2.0;
+    const PylithScalar C2223 = elasticConsts[iC+10] / 2.0;
+    const PylithScalar C2213 = elasticConsts[iC+11] / 2.0;
+    const PylithScalar C3311 = elasticConsts[iC+12];
+    const PylithScalar C3322 = elasticConsts[iC+13];
+    const PylithScalar C3333 = elasticConsts[iC+14];
+    const PylithScalar C3312 = elasticConsts[iC+15] / 2.0;
+    const PylithScalar C3323 = elasticConsts[iC+16] / 2.0;
+    const PylithScalar C3313 = elasticConsts[iC+17] / 2.0;
+    const PylithScalar C1211 = elasticConsts[iC+18];
+    const PylithScalar C1222 = elasticConsts[iC+19];
+    const PylithScalar C1233 = elasticConsts[iC+20];
+    const PylithScalar C1212 = elasticConsts[iC+21] / 2.0;
+    const PylithScalar C1223 = elasticConsts[iC+22] / 2.0;
+    const PylithScalar C1213 = elasticConsts[iC+23] / 2.0;
+    const PylithScalar C2311 = elasticConsts[iC+24];
+    const PylithScalar C2322 = elasticConsts[iC+25];
+    const PylithScalar C2333 = elasticConsts[iC+26];
+    const PylithScalar C2312 = elasticConsts[iC+27] / 2.0;
+    const PylithScalar C2323 = elasticConsts[iC+28] / 2.0;
+    const PylithScalar C2313 = elasticConsts[iC+29] / 2.0;
+    const PylithScalar C1311 = elasticConsts[iC+30];
+    const PylithScalar C1322 = elasticConsts[iC+31];
+    const PylithScalar C1333 = elasticConsts[iC+32];
+    const PylithScalar C1312 = elasticConsts[iC+33] / 2.0;
+    const PylithScalar C1323 = elasticConsts[iC+34] / 2.0;
+    const PylithScalar C1313 = elasticConsts[iC+35] / 2.0;
 
     const int iS = iQuad*tensorSize;
-    const double s11 = stress[iS+0];
-    const double s22 = stress[iS+1];
-    const double s33 = stress[iS+2];
-    const double s12 = stress[iS+3];
-    const double s23 = stress[iS+4];
-    const double s13 = stress[iS+5];
+    const PylithScalar s11 = stress[iS+0];
+    const PylithScalar s22 = stress[iS+1];
+    const PylithScalar s33 = stress[iS+2];
+    const PylithScalar s12 = stress[iS+3];
+    const PylithScalar s23 = stress[iS+4];
+    const PylithScalar s13 = stress[iS+5];
 
-    double l11 = 0.0;
-    double l12 = 0.0;
-    double l13 = 0.0;
-    double l21 = 0.0;
-    double l22 = 0.0;
-    double l23 = 0.0;
-    double l31 = 0.0;
-    double l32 = 0.0;
-    double l33 = 0.0;
+    PylithScalar l11 = 0.0;
+    PylithScalar l12 = 0.0;
+    PylithScalar l13 = 0.0;
+    PylithScalar l21 = 0.0;
+    PylithScalar l22 = 0.0;
+    PylithScalar l23 = 0.0;
+    PylithScalar l31 = 0.0;
+    PylithScalar l32 = 0.0;
+    PylithScalar l33 = 0.0;
     for (int kBasis=0; kBasis < numBasis; ++kBasis) {
       const int kB = kBasis*spaceDim;
       l11 += basisDeriv[iQ+kB  ] * disp[kB  ];
@@ -768,17 +768,17 @@
 	 iBasis < numBasis;
 	 ++iBasis) {
       const int iB = iBasis*spaceDim;
-      const double Nip = wt*basisDeriv[iQ+iB+0];
-      const double Niq = wt*basisDeriv[iQ+iB+1];
-      const double Nir = wt*basisDeriv[iQ+iB+2];
+      const PylithScalar Nip = wt*basisDeriv[iQ+iB+0];
+      const PylithScalar Niq = wt*basisDeriv[iQ+iB+1];
+      const PylithScalar Nir = wt*basisDeriv[iQ+iB+2];
       for (int jBasis=0; jBasis < numBasis; ++jBasis) {
 	const int jB = jBasis*spaceDim;
-	const double Njp = basisDeriv[iQ+jB+0];
-	const double Njq = basisDeriv[iQ+jB+1];
-	const double Njr = basisDeriv[iQ+jB+2];
+	const PylithScalar Njp = basisDeriv[iQ+jB+0];
+	const PylithScalar Njq = basisDeriv[iQ+jB+1];
+	const PylithScalar Njr = basisDeriv[iQ+jB+2];
 
 	// Generated using Maxima (see jacobian3d_lgdeform.wxm)
-	const double Ki0j0 = 
+	const PylithScalar Ki0j0 = 
 	  l13*Nir*(l13*Njr*C3333 + 
 		   (l12*Njr+l13*Njq)*C3323 + 
 		   ((l11+1)*Njr+l13*Njp)*C3313 + 
@@ -816,7 +816,7 @@
 		       ((l11+1)*Njq+l12*Njp)*C1112 + 
 		       (l11+1)*Njp*C1111);
 
-	const double Ki0j1 =
+	const PylithScalar Ki0j1 =
 	  l13*Nir*(l23*Njr*C3333 + 
 		   ((l22+1)*Njr+l23*Njq)*C3323 + 
 		   (l21*Njr+l23*Njp)*C3313 + 
@@ -854,7 +854,7 @@
 		       (l21*Njq+(l22+1)*Njp)*C1112 + 
 		       l21*Njp*C1111);
 
-	const double Ki0j2 =
+	const PylithScalar Ki0j2 =
 	  l13*Nir*((l33+1)*Njr*C3333 + 
 		   (l32*Njr+(l33+1)*Njq)*C3323 + 
 		   (l31*Njr+(l33+1)*Njp)*C3313 + 
@@ -892,7 +892,7 @@
 		       (l31*Njq+l32*Njp)*C1112 + 
 		       l31*Njp*C1111);
 
-	const double Ki1j0 =
+	const PylithScalar Ki1j0 =
 	  l23*Nir*(l13*Njr*C3333 + 
 		   (l12*Njr+l13*Njq)*C3323 + 
 		   ((l11+1)*Njr+l13*Njp)*C3313 + 
@@ -930,7 +930,7 @@
 		   ((l11+1)*Njq+l12*Njp)*C1112 + 
 		   (l11+1)*Njp*C1111);
 
-	const double Ki1j1 =
+	const PylithScalar Ki1j1 =
 	  l23*Nir*(l23*Njr*C3333 + 
 		   ((l22+1)*Njr+l23*Njq)*C3323 + 
 		   (l21*Njr+l23*Njp)*C3313 + 
@@ -968,7 +968,7 @@
 		   (l21*Njq+(l22+1)*Njp)*C1112 + 
 		   l21*Njp*C1111);
 
-	const double Ki1j2 =
+	const PylithScalar Ki1j2 =
 	  l23*Nir*((l33+1)*Njr*C3333 + 
 		   (l32*Njr+(l33+1)*Njq)*C3323 + 
 		   (l31*Njr+(l33+1)*Njp)*C3313 + 
@@ -1006,7 +1006,7 @@
 		   (l31*Njq+l32*Njp)*C1112 + 
 		   l31*Njp*C1111);
 
-	const double Ki2j0 =
+	const PylithScalar Ki2j0 =
 	  (l33+1)*Nir*(l13*Njr*C3333 + 
 		       (l12*Njr+l13*Njq)*C3323 + 
 		       ((l11+1)*Njr+l13*Njp)*C3313 + 
@@ -1044,7 +1044,7 @@
 		   ((l11+1)*Njq+l12*Njp)*C1112 + 
 		   (l11+1)*Njp*C1111);
 
-	const double Ki2j1 =
+	const PylithScalar Ki2j1 =
 	  (l33+1)*Nir*(l23*Njr*C3333 + 
 		       ((l22+1)*Njr+l23*Njq)*C3323 + 
 		       (l21*Njr+l23*Njp)*C3313 + 
@@ -1082,7 +1082,7 @@
 		   (l21*Njq+(l22+1)*Njp)*C1112 + 
 		   l21*Njp*C1111);
 
-	const double Ki2j2 =
+	const PylithScalar Ki2j2 =
 	  (l33+1)*Nir*((l33+1)*Njr*C3333 + 
 		       (l32*Njr+(l33+1)*Njq)*C3323 + 
 		       (l31*Njr+(l33+1)*Njp)*C3313 + 
@@ -1120,7 +1120,7 @@
 		   (l31*Njq+l32*Njp)*C1112 + 
 		   l31*Njp*C1111);
 
-	const double Knl = 
+	const PylithScalar Knl = 
 	  Nir*(Njr*s33+Njq*s23+Njp*s13) + 
 	  Niq*(Njr*s23+Njq*s22+Njp*s12) + 
 	  Nip*(Njr*s13+Njq*s12+Njp*s11);
@@ -1150,8 +1150,8 @@
 // Calculate Green-Lagrange strain tensor at quadrature points of a 1-D cell.
 void 
 pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain1D(
-					      double_array* strain,
-					      const double_array& deform,
+					      scalar_array* strain,
+					      const scalar_array& deform,
 					      const int numQuadPts)
 { // _calcTotalStrain1D
   // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
@@ -1174,8 +1174,8 @@
 // Calculate Green-Lagrange strain tensor at quadrature points of a 2-D cell.
 void 
 pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain2D(
-					      double_array* strain,
-					      const double_array& deform,
+					      scalar_array* strain,
+					      const scalar_array& deform,
 					      const int numQuadPts)
 { // _calcTotalStrain2D
   // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
@@ -1209,8 +1209,8 @@
 // Calculate Green-Lagrange strain tensor at quadrature points of a 3-D cell.
 void 
 pylith::feassemble::IntegratorElasticityLgDeform::_calcTotalStrain3D(
-					      double_array* strain,
-					      const double_array& deform,
+					      scalar_array* strain,
+					      const scalar_array& deform,
 					      const int numQuadPts)
 { // _calcTotalStrain3D
   // Green-Lagrange strain tensor = 1/2 ( X^T X - I )
@@ -1259,10 +1259,10 @@
 // Calculate deformation tensor.
 void 
 pylith::feassemble::IntegratorElasticityLgDeform::_calcDeformation(
-					      double_array* deform,
-					      const double_array& basisDeriv,
-					      const double_array& vertices,
-					      const double_array& disp,
+					      scalar_array* deform,
+					      const scalar_array& basisDeriv,
+					      const scalar_array& vertices,
+					      const scalar_array& disp,
 					      const int numBasis,
 					      const int numQuadPts,
 					      const int dim)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,8 +43,8 @@
 // PUBLIC TYPEDEFS //////////////////////////////////////////////////////
 public :
 
-  typedef void (*totalStrain_fn_type)(double_array*,
-				      const double_array&,
+  typedef void (*totalStrain_fn_type)(scalar_array*,
+				      const scalar_array&,
 				      const int);
   
 
@@ -70,7 +70,7 @@
    * @param fields Solution fields
    * @param mesh Finite-element mesh
    */
-  void updateStateVars(const double t,
+  void updateStateVars(const PylithScalar t,
 		       topology::SolutionFields* const fields);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////
@@ -99,24 +99,24 @@
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityResidual1D(const double_array& stress,
-			     const double_array& disp);
+  void _elasticityResidual1D(const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Integrate elasticity term in residual for 2-D cells.
    *
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityResidual2D(const double_array& stress,
-			     const double_array& disp);
+  void _elasticityResidual2D(const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Integrate elasticity term in residual for 3-D cells.
    *
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityResidual3D(const double_array& stress,
-			     const double_array& disp);
+  void _elasticityResidual3D(const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Integrate elasticity term in Jacobian for 1-D cells.
    *
@@ -124,9 +124,9 @@
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityJacobian1D(const double_array& elasticConsts,
-			     const double_array& stress,
-			     const double_array& disp);
+  void _elasticityJacobian1D(const scalar_array& elasticConsts,
+			     const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Integrate elasticity term in Jacobian for 2-D cells.
    *
@@ -134,9 +134,9 @@
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityJacobian2D(const double_array& elasticConsts,
-			     const double_array& stress,
-			     const double_array& disp);
+  void _elasticityJacobian2D(const scalar_array& elasticConsts,
+			     const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Integrate elasticity term in Jacobian for 3-D cells.
    *
@@ -144,9 +144,9 @@
    * @param stress Stress tensor for cell at quadrature points.
    * @param disp Displacement field at cell's DOF.
    */
-  void _elasticityJacobian3D(const double_array& elasticConsts,
-			     const double_array& stress,
-			     const double_array& disp);
+  void _elasticityJacobian3D(const scalar_array& elasticConsts,
+			     const scalar_array& stress,
+			     const scalar_array& disp);
 
   /** Calculate Green-Lagrange strain tensor at quadrature points of a
    *  1-D cell.
@@ -156,8 +156,8 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain1D(double_array* strain,
-			  const double_array& deform,
+  void _calcTotalStrain1D(scalar_array* strain,
+			  const scalar_array& deform,
 			  const int numQuadPts);
 
   /** Calculate Green-Lagrange strain tensor at quadrature points of a
@@ -168,8 +168,8 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain2D(double_array* strain,
-			  const double_array& deform,
+  void _calcTotalStrain2D(scalar_array* strain,
+			  const scalar_array& deform,
 			  const int numQuadPts);
 
   /** Calculate Green-Lagrange strain tensor at quadrature points of a
@@ -180,8 +180,8 @@
    * @param numQuadPts Number of quadrature points.
    */
   static
-  void _calcTotalStrain3D(double_array* strain,
-			  const double_array& deform,
+  void _calcTotalStrain3D(scalar_array* strain,
+			  const scalar_array& deform,
 			  const int numQuadPts);
 
   /** Calculate deformation tensor.
@@ -195,10 +195,10 @@
    * @param dim Dimension of cell.
    */
   static
-  void _calcDeformation(double_array* deform,
-			const double_array& basisDeriv,
-			const double_array& vertices,
-			const double_array& disp,
+  void _calcDeformation(scalar_array* deform,
+			const scalar_array& basisDeriv,
+			const scalar_array& vertices,
+			const scalar_array& disp,
 			const int numBasis,
 			const int numQuadPts,
 			const int dim);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -230,7 +230,7 @@
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh = mesh.sieveMesh();
   assert(!sieveMesh.isNull());
 
-  double_array coordinatesCell(numBasis*_spaceDim);
+  scalar_array coordinatesCell(numBasis*_spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -242,10 +242,10 @@
     jacobianDetField->section();
   const ALE::Obj<RealSection>& basisDerivSection = basisDerivField->section();
 
-  const double_array& quadPts = _engine->quadPts();
-  const double_array& jacobian = _engine->jacobian();
-  const double_array& jacobianDet = _engine->jacobianDet();
-  const double_array& basisDeriv = _engine->basisDeriv();
+  const scalar_array& quadPts = _engine->quadPts();
+  const scalar_array& jacobian = _engine->jacobian();
+  const scalar_array& jacobianDet = _engine->jacobianDet();
+  const scalar_array& basisDeriv = _engine->basisDeriv();
 
   for(typename label_sequence::iterator c_iter = cellsBegin;
       c_iter != cellsEnd;
@@ -272,29 +272,29 @@
 
   typedef typename mesh_type::RealSection RealSection;
 
-  const double_array& quadPts = _engine->quadPts();
-  const double_array& jacobian = _engine->jacobian();
-  const double_array& jacobianDet = _engine->jacobianDet();
-  const double_array& basisDeriv = _engine->basisDeriv();
+  const scalar_array& quadPts = _engine->quadPts();
+  const scalar_array& jacobian = _engine->jacobian();
+  const scalar_array& jacobianDet = _engine->jacobianDet();
+  const scalar_array& basisDeriv = _engine->basisDeriv();
 
   const ALE::Obj<RealSection>& quadPtsSection =
     _geometryFields->get("quadrature points").section();
-  quadPtsSection->restrictPoint(cell, const_cast<double*>(&quadPts[0]),
+  quadPtsSection->restrictPoint(cell, const_cast<PylithScalar*>(&quadPts[0]),
 				quadPts.size());
 
   const ALE::Obj<RealSection>& jacobianSection =
     _geometryFields->get("jacobian").section();
-  jacobianSection->restrictPoint(cell, const_cast<double*>(&jacobian[0]),
+  jacobianSection->restrictPoint(cell, const_cast<PylithScalar*>(&jacobian[0]),
 				 jacobian.size());
 
   const ALE::Obj<RealSection>& jacobianDetSection = 
     _geometryFields->get("determinant(jacobian)").section();
-  jacobianDetSection->restrictPoint(cell, const_cast<double*>(&jacobianDet[0]),
+  jacobianDetSection->restrictPoint(cell, const_cast<PylithScalar*>(&jacobianDet[0]),
 				    jacobianDet.size());
 
   const ALE::Obj<RealSection>& basisDerivSection =
     _geometryFields->get("determinant basisfunctions").section();
-  basisDerivSection->restrictPoint(cell, const_cast<double*>(&basisDeriv[0]),
+  basisDerivSection->restrictPoint(cell, const_cast<PylithScalar*>(&basisDeriv[0]),
 				   basisDeriv.size());
 } // retrieveGeometry
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 #include "pylith/topology/topologyfwd.hh" // forward declarations
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // Quadrature -----------------------------------------------------------
 /** @brief Abstract base class for integrating over finite-elements
@@ -89,26 +89,26 @@
    *
    * @returns Array of coordinates of quadrature points in cell
    */
-  const double_array& quadPts(void) const;
+  const scalar_array& quadPts(void) const;
 
   /** Get derivatives of basis fns evaluated at quadrature points.
    *
    * @returns Array of derivatives of basis fns evaluated at
    * quadrature points
    */
-  const double_array& basisDeriv(void) const;
+  const scalar_array& basisDeriv(void) const;
 
   /** Get Jacobians evaluated at quadrature points.
    *
    * @returns Array of Jacobian inverses evaluated at quadrature points.
    */
-  const double_array& jacobian(void) const;
+  const scalar_array& jacobian(void) const;
 
   /** Get determinants of Jacobian evaluated at quadrature points.
    *
    * @returns Array of determinants of Jacobian evaluated at quadrature pts
    */
-  const double_array& jacobianDet(void) const;
+  const scalar_array& jacobianDet(void) const;
 
   /** Get precomputed geometry fields.
    *
@@ -140,7 +140,7 @@
    * @param coordinatesCell Coordinates of vertices in cell.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PRIVATE MEMBERS //////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,7 +42,7 @@
 // Get coordinates of quadrature points in cell (NOT reference cell).
 template<typename mesh_type>
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::Quadrature<mesh_type>::quadPts(void) const {
   assert(0 != _engine);
   return _engine->quadPts();
@@ -51,7 +51,7 @@
 // Get derivatives of basis fns evaluated at quadrature points.
 template<typename mesh_type>
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::Quadrature<mesh_type>::basisDeriv(void) const {
   assert(0 != _engine);
   return _engine->basisDeriv();
@@ -60,7 +60,7 @@
 // Get Jacobians evaluated at quadrature points.
 template<typename mesh_type>
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::Quadrature<mesh_type>::jacobian(void) const {
   assert(0 != _engine);
   return _engine->jacobian();
@@ -69,7 +69,7 @@
 // Get determinants of Jacobian evaluated at quadrature points.
 template<typename mesh_type>
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::Quadrature<mesh_type>::jacobianDet(void) const {
   assert(0 != _engine);
   return _engine->jacobianDet();
@@ -87,7 +87,7 @@
 template<typename mesh_type>
 inline
 void
-pylith::feassemble::Quadrature<mesh_type>::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature<mesh_type>::computeGeometry(const scalar_array& coordinatesCell,
 							   const int cell) {
   assert(0 != _engine);
   _engine->computeGeometry(coordinatesCell, cell);  

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature0D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature0D::computeGeometry(const scalar_array& coordinatesCell,
 						  const int cell)
 { // computeGeometry
   const int cellDim = 0;
@@ -64,7 +64,7 @@
   assert(_quadRefCell.numBasis() == numBasis);
   assert(coordinatesCell.size() == numBasis*spaceDim);
 
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
 
   zero();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature0D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,7 +58,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature1D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature1D::computeGeometry(const scalar_array& coordinatesCell,
 						  const int cell)
 { // computeGeometry
   const int cellDim = 1;
@@ -61,9 +61,9 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
 
   assert(_quadRefCell.cellDim() == cellDim);
@@ -94,7 +94,7 @@
 
     // Compute determinant of Jacobian at quadrature point
     // |J| = j00
-    const double det = _jacobian[iQuadPt];
+    const PylithScalar det = _jacobian[iQuadPt];
     _checkJacobianDet(det, cell);
     _jacobianDet[iQuadPt] = _jacobian[iQuadPt];
 #else

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PRIVATE METHODS //////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature1Din2D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature1Din2D::computeGeometry(const scalar_array& coordinatesCell,
 						      const int cell)
 { // computeGeometry
   const int cellDim = 1;
@@ -61,9 +61,9 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
 
   assert(_quadRefCell.cellDim() == cellDim);
@@ -81,7 +81,7 @@
     // x = sum[i=0,n-1] (Ni * xi)
     // y = sum[i=0,n-1] (Ni * yi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double valueBasis = basis[iQ+iBasis];
+      const PylithScalar valueBasis = basis[iQ+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_quadPts[iQuadPt*spaceDim+iDim] +=
 	  valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
@@ -99,7 +99,7 @@
     // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
     // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double deriv = basisDerivRef[iQ+iBasis];
+      const PylithScalar deriv = basisDerivRef[iQ+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_jacobian[iQuadPt*spaceDim+iDim] += 
 	  deriv * coordinatesCell[iBasis*spaceDim+iDim];
@@ -107,7 +107,7 @@
     
     // Compute determinant of Jacobian at quadrature point
     // |J| = sqrt(transpose(J) J)
-    double det = 0.0;
+    PylithScalar det = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       det += _jacobian[iQuadPt*spaceDim+iDim] * 
 	_jacobian[iQuadPt*spaceDim+iDim];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature1Din3D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature1Din3D::computeGeometry(const scalar_array& coordinatesCell,
 						      const int cell)
 { // computeGeometry
   const int cellDim = 1;
@@ -61,9 +61,9 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
 
   assert(_quadRefCell.cellDim() == cellDim);
@@ -82,7 +82,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double valueBasis = basis[iQ+iBasis];
+      const PylithScalar valueBasis = basis[iQ+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_quadPts[iQuadPt*spaceDim+iDim] += 
 	  valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
@@ -102,7 +102,7 @@
     // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
     // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double deriv = basisDerivRef[iQ+iBasis];
+      const PylithScalar deriv = basisDerivRef[iQ+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_jacobian[iQuadPt*spaceDim+iDim] += 
 	  deriv * coordinatesCell[iBasis*spaceDim+iDim];
@@ -110,7 +110,7 @@
 
     // Compute determinant of Jacobian at quadrature point
     // |J| = sqrt(transpose(J) J)
-    double det = 0.0;
+    PylithScalar det = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       det += _jacobian[iQuadPt*spaceDim+iDim] * 
 	_jacobian[iQuadPt*spaceDim+iDim];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature1Din3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature2D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature2D::computeGeometry(const scalar_array& coordinatesCell,
 						  const int cell)
 { // computeGeometry
   const int spaceDim = 2;
@@ -61,9 +61,9 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
 
   assert(_quadRefCell.cellDim() == cellDim);
@@ -79,7 +79,7 @@
     // x = sum[i=0,n-1] (Ni * xi)
     // y = sum[i=0,n-1] (Ni * yi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double valueBasis = basis[iQuadPt*numBasis+iBasis];
+      const PylithScalar valueBasis = basis[iQuadPt*numBasis+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_quadPts[iQuadPt*spaceDim+iDim] += 
 	  valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
@@ -100,7 +100,7 @@
     // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis)
       for (int iCol=0; iCol < cellDim; ++iCol) {
-	const double deriv = 
+	const PylithScalar deriv = 
 	  basisDerivRef[iQuadPt*numBasis*spaceDim+iBasis*cellDim+iCol];
 	for (int iRow=0; iRow < spaceDim; ++iRow)
 	  _jacobian[iQuadPt*cellDim*spaceDim+iRow*cellDim+iCol] +=
@@ -114,7 +114,7 @@
     const int i01 = iJ + 0*spaceDim + 1;
     const int i10 = iJ + 1*spaceDim + 0;
     const int i11 = iJ + 1*spaceDim + 1;
-    const double det = 
+    const PylithScalar det = 
       _jacobian[i00]*_jacobian[i11] - 
       _jacobian[i01]*_jacobian[i10];
     _checkJacobianDet(det, cell);
@@ -131,7 +131,7 @@
 		      &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim], 
 		      spaceDim, 1);
     _checkJacobianDet(_jacobianDet[iQuadPt], cell);
-    const double det = _jacobianDet[iQuadPt];
+    const PylithScalar det = _jacobianDet[iQuadPt];
 #endif
 
     // Compute inverse of Jacobian at quadrature point

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature2Din3D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature2Din3D::computeGeometry(const scalar_array& coordinatesCell,
 						      const int cell)
 { // computeGeometry
   const int cellDim = 2;
@@ -63,11 +63,11 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
-  const double minJacobian = _quadRefCell.minJacobian();
+  const PylithScalar minJacobian = _quadRefCell.minJacobian();
 
   assert(_quadRefCell.cellDim() == cellDim);
   assert(_quadRefCell.spaceDim() == spaceDim);
@@ -83,7 +83,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double valueBasis = basis[iQuadPt*numBasis+iBasis];
+      const PylithScalar valueBasis = basis[iQuadPt*numBasis+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_quadPts[iQuadPt*spaceDim+iDim] += 
 	  valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
@@ -107,7 +107,7 @@
     // dz/dq = sum[i=0,n-1] (dNi/dq * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis)
       for (int iCol=0; iCol < cellDim; ++iCol) {
-	const double deriv = 
+	const PylithScalar deriv = 
 	  basisDerivRef[iQuadPt*numBasis*cellDim+iBasis*cellDim+iCol];
 	for (int iRow=0; iRow < spaceDim; ++iRow)
 	  _jacobian[iQuadPt*cellDim*spaceDim+iRow*cellDim+iCol] +=
@@ -124,20 +124,20 @@
     const int i20 = iJ + 2*cellDim + 0;
     const int i21 = iJ + 2*cellDim + 1;
     // JJ = transpose(J) J 
-    const double jj00 = 
+    const PylithScalar jj00 = 
       _jacobian[i00]*_jacobian[i00] +
       _jacobian[i10]*_jacobian[i10] +
       _jacobian[i20]*_jacobian[i20];
-    const double jj10 =
+    const PylithScalar jj10 =
       _jacobian[i00]*_jacobian[i01] +
       _jacobian[i10]*_jacobian[i11] +
       _jacobian[i20]*_jacobian[i21];
-    const double jj01 = jj10;
-    const double jj11 = 
+    const PylithScalar jj01 = jj10;
+    const PylithScalar jj11 = 
       _jacobian[i01]*_jacobian[i01] +
       _jacobian[i11]*_jacobian[i11] +
       _jacobian[i21]*_jacobian[i21];
-    const double det = sqrt(jj00*jj11 - jj01*jj10);
+    const PylithScalar det = sqrt(jj00*jj11 - jj01*jj10);
     _checkJacobianDet(det, cell);
     _jacobianDet[iQuadPt] = det;
 #else
@@ -157,13 +157,13 @@
 #endif
     
     // Compute inverse of Jacobian at quadrature point
-    const double d01 = 
+    const PylithScalar d01 = 
       _jacobian[i00]*_jacobian[i11] - 
       _jacobian[i10]*_jacobian[i01];
-    const double d12 = 
+    const PylithScalar d12 = 
       _jacobian[i10]*_jacobian[i21] - 
       _jacobian[i20]*_jacobian[i11];
-    const double d02 = 
+    const PylithScalar d02 = 
       _jacobian[i00]*_jacobian[i21] - 
       _jacobian[i20]*_jacobian[i01];
     if (fabs(d01) > minJacobian) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature2Din3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
 // ----------------------------------------------------------------------
 // Compute geometric quantities for a cell at quadrature points.
 void
-pylith::feassemble::Quadrature3D::computeGeometry(const double_array& coordinatesCell,
+pylith::feassemble::Quadrature3D::computeGeometry(const scalar_array& coordinatesCell,
 						  const int cell)
 { // computeGeometry
   const int spaceDim = 3;
@@ -63,9 +63,9 @@
   const int numQuadPts = _quadRefCell.numQuadPts();
   const int numBasis = _quadRefCell.numBasis();
 
-  const double_array& basis = _quadRefCell.basis();
-  const double_array& quadPtsRef = _quadRefCell.quadPtsRef();
-  const double_array& basisDerivRef = _quadRefCell.basisDerivRef();
+  const scalar_array& basis = _quadRefCell.basis();
+  const scalar_array& quadPtsRef = _quadRefCell.quadPtsRef();
+  const scalar_array& basisDerivRef = _quadRefCell.basisDerivRef();
   const CellGeometry& geometry = _quadRefCell.refGeometry();
 
   assert(numBasis*spaceDim == coordinatesCell.size());
@@ -80,7 +80,7 @@
     // y = sum[i=0,n-1] (Ni * yi)
     // z = sum[i=0,n-1] (Ni * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis) {
-      const double valueBasis = basis[iQuadPt*numBasis+iBasis];
+      const PylithScalar valueBasis = basis[iQuadPt*numBasis+iBasis];
       for (int iDim=0; iDim < spaceDim; ++iDim)
 	_quadPts[iQuadPt*spaceDim+iDim] += 
 	  valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
@@ -107,7 +107,7 @@
     // dz/dr = sum[i=0,n-1] (dNi/dr * zi)
     for (int iBasis=0; iBasis < numBasis; ++iBasis)
       for (int iCol=0; iCol < cellDim; ++iCol) {
-	const double deriv = 
+	const PylithScalar deriv = 
 	  basisDerivRef[iQuadPt*numBasis*spaceDim+iBasis*cellDim+iCol];
 	for (int iRow=0; iRow < spaceDim; ++iRow)
 	  _jacobian[iQuadPt*cellDim*spaceDim+iRow*cellDim+iCol] += 
@@ -128,7 +128,7 @@
     const int i20 = iJ + 2*spaceDim + 0;
     const int i21 = iJ + 2*spaceDim + 1;
     const int i22 = iJ + 2*spaceDim + 2;
-    const double det = 
+    const PylithScalar det = 
       _jacobian[i00]*(_jacobian[i11]*_jacobian[i22] -
 		      _jacobian[i12]*_jacobian[i21]) -
       _jacobian[i01]*(_jacobian[i10]*_jacobian[i22] -
@@ -154,7 +154,7 @@
 		      &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
 		      spaceDim, 1);
     _checkJacobianDet(_jacobianDet[iQuadPt], cell);
-    const double det = _jacobianDet[iQuadPt];
+    const PylithScalar det = _jacobianDet[iQuadPt];
 #endif
     
     // Compute inverse of Jacobian at quadrature point

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/Quadrature3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    * @param coordinatesCell Coordinates of cell's vertices.
    * @param cell Finite-element cell
    */
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell);
 
 // PROTECTED METHODS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -99,10 +99,10 @@
 // ----------------------------------------------------------------------
 // Check determinant of Jacobian against minimum allowable value
 void
-pylith::feassemble::QuadratureEngine::_checkJacobianDet(const double det,
+pylith::feassemble::QuadratureEngine::_checkJacobianDet(const PylithScalar det,
 							const int cell) const
 { // _checkJacobianDet
-  const double minJacobian = _quadRefCell.minJacobian();
+  const PylithScalar minJacobian = _quadRefCell.minJacobian();
   if (det < minJacobian) {
     std::ostringstream msg;
     msg << "Determinant of Jacobian (" << det << ") for cell " << cell

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 
 // Include directives ---------------------------------------------------
 #include "feassemblefwd.hh" // forward declaration
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 // Quadrature0D ---------------------------------------------------------
 /// Abstract base class for quadrature computation engine.
@@ -63,26 +63,26 @@
    *
    * @returns Array of coordinates of quadrature points in cell
    */
-  const double_array& quadPts(void) const;
+  const scalar_array& quadPts(void) const;
 
   /** Get derivatives of basis fns evaluated at quadrature points.
    *
    * @returns Array of derivatives of basis fns evaluated at
    * quadrature points
    */
-  const double_array& basisDeriv(void) const;
+  const scalar_array& basisDeriv(void) const;
 
   /** Get Jacobians evaluated at quadrature points.
    *
    * @returns Array of Jacobian inverses evaluated at quadrature points.
    */
-  const double_array& jacobian(void) const;
+  const scalar_array& jacobian(void) const;
 
   /** Get determinants of Jacobian evaluated at quadrature points.
    *
    * @returns Array of determinants of Jacobian evaluated at quadrature pts
    */
-  const double_array& jacobianDet(void) const;
+  const scalar_array& jacobianDet(void) const;
 
   /// Allocate cell buffers.
   void initialize(void);
@@ -96,7 +96,7 @@
    * @param cell Finite-element cell
    */
   virtual
-  void computeGeometry(const double_array& coordinatesCell,
+  void computeGeometry(const scalar_array& coordinatesCell,
 		       const int cell) = 0;
 
 // PROTECTED METHODS ////////////////////////////////////////////////////
@@ -113,18 +113,18 @@
    * @param det Value of determinant of Jacobian
    * @param cell Label of finite-element cell
    */
-  void _checkJacobianDet(const double det,
+  void _checkJacobianDet(const PylithScalar det,
 			 const int cell) const;
 
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
   /** Buffers for cell data */
-  double_array _quadPts; ///< Coordinates of quad pts.
-  double_array _jacobian; ///< Jacobian at quad pts;
-  double_array _jacobianDet; ///< |J| at quad pts.
-  double_array _jacobianInv; /// Inverse of Jacobian at quad pts.
-  double_array _basisDeriv; ///< Deriv. of basis fns at quad pts.
+  scalar_array _quadPts; ///< Coordinates of quad pts.
+  scalar_array _jacobian; ///< Jacobian at quad pts;
+  scalar_array _jacobianDet; ///< |J| at quad pts.
+  scalar_array _jacobianInv; /// Inverse of Jacobian at quad pts.
+  scalar_array _basisDeriv; ///< Deriv. of basis fns at quad pts.
 
   const QuadratureRefCell& _quadRefCell;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureEngine.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,28 +22,28 @@
 
 // Get coordinates of quadrature points in cell (NOT reference cell).
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureEngine::quadPts(void) const {
   return _quadPts;
 }
 
 // Get derivatives of basis fns evaluated at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureEngine::basisDeriv(void) const {
   return _basisDeriv;
 }
 
 // Get Jacobians evaluated at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureEngine::jacobian(void) const {
   return _jacobian;
 }
 
 // Get determinants of Jacobian evaluated at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureEngine::jacobianDet(void) const {
   return _jacobianDet;
 }

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,17 +76,17 @@
 // Set basis functions and their derivatives and coordinates and
 //   weights of the quadrature points.
 void
-pylith::feassemble::QuadratureRefCell::initialize(const double* basis,
+pylith::feassemble::QuadratureRefCell::initialize(const PylithScalar* basis,
 						  const int numQuadPts1,
 						  const int numBasis1,
-						  const double* basisDerivRef,
+						  const PylithScalar* basisDerivRef,
 						  const int numQuadPts2,
 						  const int numBasis2,
 						  const int cellDim2,
-						  const double* quadPtsRef,
+						  const PylithScalar* quadPtsRef,
 						  const int numQuadPts3,
 						  const int cellDim3,
-						  const double* quadWts,
+						  const PylithScalar* quadWts,
 						  const int numQuadPts4,
 						  const int spaceDim)
 { // initialize

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 // Include directives ---------------------------------------------------
 #include "feassemblefwd.hh" // forward declarations
 
-#include "pylith/utils/array.hh" // HASA double_array
+#include "pylith/utils/array.hh" // HASA scalar_array
 
 // Quadrature -----------------------------------------------------------
 /** @brief Object with basic quadrature information for the reference
@@ -100,17 +100,17 @@
    *
    * @param spaceDim Number of dimensions in coordinates of cell vertices
    */
-  void initialize(const double* basis,
+  void initialize(const PylithScalar* basis,
 		  const int numQuadPts1,
 		  const int numBasis1,
-		  const double* basisDerivRef,
+		  const PylithScalar* basisDerivRef,
 		  const int numQuadPts2,
 		  const int numBasis2,
 		  const int cellDim2,
-		  const double* quadPtsRef,
+		  const PylithScalar* quadPtsRef,
 		  const int numQuadPts3,
 		  const int cellDim3,
-		  const double* quadWts,
+		  const PylithScalar* quadWts,
 		  const int numQuadPts4,
 		  const int spaceDim);
 
@@ -130,37 +130,37 @@
    *
    * @param tolerance Minimum allowable value for Jacobian
    */
-  void minJacobian(const double min);
+  void minJacobian(const PylithScalar min);
 
   /** Get minimum allowable determinant of Jacobian.
    *
    * @returns Minimum allowable value for Jacobian
    */
-  double minJacobian(void) const;
+  PylithScalar minJacobian(void) const;
 
   /** Get coordinates of quadrature points in reference cell.
    *
    * @returns Array of coordinates of quadrature points in reference cell.
    */
-  const double_array& quadPtsRef(void) const;
+  const scalar_array& quadPtsRef(void) const;
 
   /** Get weights of quadrature points.
    *
    * @returns Weights of quadrature points
    */
-  const double_array& quadWts(void) const;
+  const scalar_array& quadWts(void) const;
 
   /** Get basis fns evaluated at quadrature points.
    *
    * @returns Array of basis fns evaluated at quadrature points
    */
-  const double_array& basis(void) const;
+  const scalar_array& basis(void) const;
 
   /** Get derivates of basis fns evaluated at quadrature points.
    *
    * @returns Array of derivates of basis fns evaluated at quadrature points
    */
-  const double_array& basisDerivRef(void) const;
+  const scalar_array& basisDerivRef(void) const;
 
   /** Get number of dimensions in reference cell.
    *
@@ -198,7 +198,7 @@
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
-  double _minJacobian; ///< Minium allowable Jacobian determinant
+  PylithScalar _minJacobian; ///< Minium allowable Jacobian determinant
   
   /** Array of coordinates of quadrature points in reference cell.
    *
@@ -210,7 +210,7 @@
    * size = numQuadPts * cellDim
    * index = iQuadPts*cellDim + iDim
    */
-  double_array _quadPtsRef;
+  scalar_array _quadPtsRef;
 
   /** Array of weights of quadrature points.
    *
@@ -218,7 +218,7 @@
    * size = numQuadPts
    * index = iQuadPt
    */
-  double_array _quadWts;
+  scalar_array _quadWts;
 
   /** Array of basis functions evaluated at the quadrature points.
    *
@@ -228,7 +228,7 @@
    * size = numQuadPts * numBasis
    * index = iQuadPt*numBasis + iBasis
    */
-  double_array _basis;
+  scalar_array _basis;
 
   /** Array of basis function derivatives evaluated at the quadrature
    * points, where derivatives are with respect to cell's local
@@ -240,7 +240,7 @@
    * size = numQuadPts * numBasis * cellDim
    * index = iQuadPt*numBasis*cellDim + iBasis*cellDim + iDim
    */
-  double_array _basisDerivRef;
+  scalar_array _basisDerivRef;
 
   int _cellDim; ///< Number of dimensions in reference cell
   int _numBasis; ///< Number of basis functions (and vertices) for cell

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/feassemble/QuadratureRefCell.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 // Get minimum allowable Jacobian.
 inline
-double
+PylithScalar
 pylith::feassemble::QuadratureRefCell::minJacobian(void) const {
   return _minJacobian;
 }
@@ -30,34 +30,34 @@
 // Set minimum allowable Jacobian.
 inline
 void
-pylith::feassemble::QuadratureRefCell::minJacobian(const double min) {
+pylith::feassemble::QuadratureRefCell::minJacobian(const PylithScalar min) {
   _minJacobian = min;
 }
 
 // Get coordinates of quadrature points in reference cell.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureRefCell::quadPtsRef(void) const {
   return _quadPtsRef;
 }
 
 // Get weights of quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureRefCell::quadWts(void) const {
   return _quadWts;
 }
 
 // Get basis fns evaluated at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureRefCell::basis(void) const {
   return _basis;
 }
 
 // Get derivates of basis fns evaluated at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::feassemble::QuadratureRefCell::basisDerivRef(void) const {
   return _basisDerivRef;
 }

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/FieldsNew.hh" // USES FieldsNew
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/utils/array.hh" // USES double_array, std::vector
+#include "pylith/utils/array.hh" // USES scalar_array, std::vector
 
 #include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -97,8 +97,7 @@
 void
 pylith::friction::FrictionModel::initialize(
 			const topology::SubMesh& faultMesh,
-			feassemble::Quadrature<topology::SubMesh>* quadrature,
-			const topology::Field<topology::SubMesh>& area)
+			feassemble::Quadrature<topology::SubMesh>* quadrature)
 { // initialize
   assert(0 != _dbProperties);
 
@@ -120,9 +119,9 @@
   const int spaceDim = cs->spaceDim();
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
-  double_array coordsVertex(spaceDim);
+  scalar_array coordsVertex(spaceDim);
   const ALE::Obj<RealSection>& coordinates =
     faultSieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -143,12 +142,12 @@
   const ALE::Obj<SubRealUniformSection>& fieldsSection = 
     _fieldsPropsStateVars->section();
   assert(!fieldsSection.isNull());
-  double_array fieldsVertex(fieldsFiberDim);
+  scalar_array fieldsVertex(fieldsFiberDim);
 
   // Create arrays for querying.
   const int numDBProperties = _metadata.numDBProperties();
-  double_array propertiesDBQuery(numDBProperties);
-  double_array propertiesVertex(_propsFiberDim);
+  scalar_array propertiesDBQuery(numDBProperties);
+  scalar_array propertiesVertex(_propsFiberDim);
 
   // Setup database for querying for physical properties
   assert(_dbProperties);
@@ -197,8 +196,8 @@
 
     // Create arrays for querying
     const int numDBStateVars = _metadata.numDBStateVars();
-    double_array stateVarsDBQuery(numDBStateVars);
-    double_array stateVarsVertex(_varsFiberDim);
+    scalar_array stateVarsDBQuery(numDBStateVars);
+    scalar_array stateVarsVertex(_varsFiberDim);
     
     // Setup database for querying for initial state variables
     _dbInitialState->open();
@@ -304,19 +303,19 @@
 
 // ----------------------------------------------------------------------
 // Compute friction at vertex.
-double
-pylith::friction::FrictionModel::calcFriction(const double slip,
-                                              const double slipRate,
-                                              const double normalTraction)
+PylithScalar
+pylith::friction::FrictionModel::calcFriction(const PylithScalar slip,
+                                              const PylithScalar slipRate,
+                                              const PylithScalar normalTraction)
 { // calcFriction
   assert(_fieldsPropsStateVars);
 
   assert(_propsFiberDim+_varsFiberDim == _propsStateVarsVertex.size());
-  const double* propertiesVertex = &_propsStateVarsVertex[0];
-  const double* stateVarsVertex = (_varsFiberDim > 0) ?
+  const PylithScalar* propertiesVertex = &_propsStateVarsVertex[0];
+  const PylithScalar* stateVarsVertex = (_varsFiberDim > 0) ?
     &_propsStateVarsVertex[_propsFiberDim] : 0;
 
-  const double friction =
+  const PylithScalar friction =
     _calcFriction(slip, slipRate, normalTraction,
 		  propertiesVertex, _propsFiberDim,
 		  stateVarsVertex, _varsFiberDim);
@@ -327,9 +326,9 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::FrictionModel::updateStateVars(const double slip,
-						 const double slipRate,
-						 const double normalTraction,
+pylith::friction::FrictionModel::updateStateVars(const PylithScalar slip,
+						 const PylithScalar slipRate,
+						 const PylithScalar normalTraction,
 						 const int vertex)
 { // updateStateVars
   assert(_fieldsPropsStateVars);
@@ -341,8 +340,8 @@
     _fieldsPropsStateVars->section();
   assert(!fieldsSection.isNull());
 
-  const double* propertiesVertex = &_propsStateVarsVertex[0];
-  double* stateVarsVertex = &_propsStateVarsVertex[_propsFiberDim];
+  const PylithScalar* propertiesVertex = &_propsStateVarsVertex[0];
+  PylithScalar* stateVarsVertex = &_propsStateVarsVertex[_propsFiberDim];
   
   _updateStateVars(slip, slipRate, normalTraction,
 		   &stateVarsVertex[0], _varsFiberDim,
@@ -356,12 +355,12 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::FrictionModel::_updateStateVars(const double slip,
-    const double slipRate,
-    const double normalTraction,
-    double* const stateVars,
+pylith::friction::FrictionModel::_updateStateVars(const PylithScalar slip,
+    const PylithScalar slipRate,
+    const PylithScalar normalTraction,
+    PylithScalar* const stateVars,
     const int numStateVars,
-    const double* properties,
+    const PylithScalar* properties,
     const int numProperties)
 { // _updateStateVars
 } // _updateStateVars
@@ -379,7 +378,7 @@
   assert(_propsFiberDim >= 0);
   
   // Determine scales for each physical property.
-  double_array propertiesVertex(_propsFiberDim);
+  scalar_array propertiesVertex(_propsFiberDim);
   for (int i=0; i < _propsFiberDim; ++i)
     propertiesVertex[i] = 1.0;
   _dimProperties(&propertiesVertex[0], propertiesVertex.size());
@@ -392,7 +391,7 @@
   assert(_varsFiberDim >= 0);
   
   // Determine scales for each state variable.
-  double_array stateVarsVertex(_varsFiberDim);
+  scalar_array stateVarsVertex(_varsFiberDim);
   for (int i=0; i < _varsFiberDim; ++i)
     stateVarsVertex[i] = 1.0;
   _dimStateVars(&stateVarsVertex[0], stateVarsVertex.size());

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -82,13 +82,13 @@
    * @param dt Current time step.
    */
   virtual
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get current time step.
    *
    * @returns Current time step.
    */
-  double timeStep(void) const;
+  PylithScalar timeStep(void) const;
 
   /** Set database for physical property parameters.
    *
@@ -116,12 +116,10 @@
    *
    * @param mesh Finite-element mesh of subdomain.
    * @param quadrature Quadrature for finite-element integration
-   * @param area Area at vertices of subdomain.
    */
   virtual
   void initialize(const topology::SubMesh& mesh,
-		  feassemble::Quadrature<topology::SubMesh>* quadrature,
-		  const topology::Field<topology::SubMesh>& area);
+		  feassemble::Quadrature<topology::SubMesh>* quadrature);
   
   /** Check whether friction model has a field as a property or state
    * variable.
@@ -164,9 +162,9 @@
    *
    * @returns Friction (magnitude of shear traction) at vertex.
    */
-  double calcFriction(const double slip,
-                      const double slipRate,
-                      const double normalTraction);
+  PylithScalar calcFriction(const PylithScalar slip,
+                      const PylithScalar slipRate,
+                      const PylithScalar normalTraction);
   
   /** Compute friction at vertex.
    *
@@ -178,9 +176,9 @@
    * @param normalTraction Normal traction at location.
    * @param vertex Finite-element vertex on friction interface.
    */
-  void updateStateVars(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
+  void updateStateVars(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
 		       const int vertex);
   
   // PROTECTED METHODS //////////////////////////////////////////////////
@@ -194,8 +192,8 @@
    * @param dbValues Array of database values.
    */
   virtual
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) const = 0;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const = 0;
 
   /** Nondimensionalize properties.
    *
@@ -203,7 +201,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const = 0;
 
   /** Dimensionalize properties.
@@ -212,7 +210,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const = 0;
 
   /** Compute initial state variables from values in spatial database.
@@ -221,8 +219,8 @@
    * @param dbValues Array of database values.
    */
   virtual
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues) const;
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
 
   /** Nondimensionalize state variables.
    *
@@ -230,7 +228,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			   const int nvalues) const;
   
   /** Dimensionalize state variables.
@@ -239,7 +237,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -253,12 +251,12 @@
    * @param numStateVars Number of state variables.
    */
   virtual
-  double _calcFriction(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
-		       const double* properties,
+  PylithScalar _calcFriction(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars) = 0;
 
   /** Update state variables (for next time step).
@@ -272,12 +270,12 @@
    * @param numProperties Number of properties.
    */
   virtual
-  void _updateStateVars(const double slip,
-			const double slipRate,
-			const double normalTraction,
-			double* const stateVars,
+  void _updateStateVars(const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -289,7 +287,7 @@
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 
-  double _dt; ///< Current time step
+  PylithScalar _dt; ///< Current time step
 
   spatialdata::units::Nondimensional* _normalizer; ///< Nondimensionalizer
   
@@ -312,7 +310,7 @@
   topology::FieldsNew<topology::SubMesh>* _fieldsPropsStateVars;
 
   /// Buffer for properties and state variables at vertex.
-  double_array _propsStateVarsVertex;
+  scalar_array _propsStateVarsVertex;
 
   int _propsFiberDim; ///< Number of properties per point.
   int _varsFiberDim; ///< Number of state variables per point.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/FrictionModel.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,13 +51,13 @@
 // Set current time step.
 inline
 void
-pylith::friction::FrictionModel::timeStep(const double dt) {
+pylith::friction::FrictionModel::timeStep(const PylithScalar dt) {
   _dt = dt;
 }
 
 // Get current time step.
 inline
-double
+PylithScalar
 pylith::friction::FrictionModel::timeStep(void) const {
   return _dt;
 } // timeStep
@@ -65,21 +65,21 @@
 // Compute initial state variables from values in spatial database.
 inline
 void
-pylith::friction::FrictionModel::_dbToStateVars(double* const stateValues,
-					    const double_array& dbValues) const
+pylith::friction::FrictionModel::_dbToStateVars(PylithScalar* const stateValues,
+					    const scalar_array& dbValues) const
 {}
 
 // Nondimensionalize state variables.
 inline
 void
-pylith::friction::FrictionModel::_nondimStateVars(double* const values,
+pylith::friction::FrictionModel::_nondimStateVars(PylithScalar* const values,
 					      const int nvalues) const
 {}
   
 // Dimensionalize state variables.
 inline
 void
-pylith::friction::FrictionModel::_dimStateVars(double* const values,
+pylith::friction::FrictionModel::_dimStateVars(PylithScalar* const values,
 					   const int nvalues) const
 {}
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/materials/Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -121,7 +121,8 @@
 				    _RateStateAgeing::stateVars,
 				    _RateStateAgeing::numStateVars,
 				    _RateStateAgeing::dbStateVars,
-				    _RateStateAgeing::numDBStateVars))
+				    _RateStateAgeing::numDBStateVars)),
+  _minSlipRate(1.0e-12)
 { // constructor
 } // constructor
 
@@ -132,22 +133,37 @@
 } // destructor
 
 // ----------------------------------------------------------------------
+// Set floor for slip rate used in computing friction. Used to
+void
+pylith::friction::RateStateAgeing::minSlipRate(const PylithScalar value)
+{ // minSlipRate
+  if (value < 0.0) {
+    std::ostringstream msg;
+    msg << "Minimum slip rate (" << value << ") for rate state friction model "
+	<< label() << " must be nonnegative.";
+    throw std::runtime_error(msg.str());
+  } // if
+
+  _minSlipRate = value;
+} // minSlipRate
+
+// ----------------------------------------------------------------------
 // Compute properties from values in spatial database.
 void
 pylith::friction::RateStateAgeing::_dbToProperties(
-					   double* const propValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
   assert(_RateStateAgeing::numDBProperties == numDBValues);
 
-  const double frictionCoef = dbValues[db_coef];
-  const double slipRate0 = dbValues[db_slipRate0];
-  const double dc = dbValues[db_L];
-  const double a = dbValues[db_a];
-  const double b = dbValues[db_b];
-  const double cohesion = dbValues[db_cohesion];
+  const PylithScalar frictionCoef = dbValues[db_coef];
+  const PylithScalar slipRate0 = dbValues[db_slipRate0];
+  const PylithScalar dc = dbValues[db_L];
+  const PylithScalar a = dbValues[db_a];
+  const PylithScalar b = dbValues[db_b];
+  const PylithScalar cohesion = dbValues[db_cohesion];
  
   if (frictionCoef < 0.0) {
     std::ostringstream msg;
@@ -193,16 +209,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::friction::RateStateAgeing::_nondimProperties(double* const values,
+pylith::friction::RateStateAgeing::_nondimProperties(PylithScalar* const values,
 						    const int nvalues) const
 { // _nondimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _RateStateAgeing::numProperties);
 
-  const double lengthScale = _normalizer->lengthScale();
-  const double timeScale = _normalizer->timeScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_slipRate0] /= lengthScale / timeScale;
   values[p_L] /= lengthScale;
@@ -212,16 +228,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::friction::RateStateAgeing::_dimProperties(double* const values,
+pylith::friction::RateStateAgeing::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _RateStateAgeing::numProperties);
 
-  const double lengthScale = _normalizer->lengthScale();
-  const double timeScale = _normalizer->timeScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_slipRate0] *= lengthScale / timeScale;
   values[p_L] *= lengthScale;
@@ -232,14 +248,14 @@
 // Compute state variables from values in spatial database.
 void
 pylith::friction::RateStateAgeing::_dbToStateVars(
-					   double* const stateValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const stateValues,
+					   const scalar_array& dbValues) const
 { // _dbToStateVars
   assert(stateValues);
   const int numDBValues = dbValues.size();
   assert(_RateStateAgeing::numDBStateVars == numDBValues);
 
-  const double stateVariable = dbValues[db_state];
+  const PylithScalar stateVariable = dbValues[db_state];
  
   stateValues[s_state] = stateVariable;
 } // _dbToStateVars
@@ -247,14 +263,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::friction::RateStateAgeing::_nondimStateVars(double* const values,
+pylith::friction::RateStateAgeing::_nondimStateVars(PylithScalar* const values,
 						    const int nvalues) const
 { // _nondimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _RateStateAgeing::numStateVars);
 
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[s_state] /= timeScale;
 } // _nondimStateVars
@@ -262,27 +278,27 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::friction::RateStateAgeing::_dimStateVars(double* const values,
+pylith::friction::RateStateAgeing::_dimStateVars(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _RateStateAgeing::numStateVars);
 
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[s_state] *= timeScale;
 } // _dimStateVars
 
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
-double
-pylith::friction::RateStateAgeing::_calcFriction(const double slip,
-						const double slipRate,
-						const double normalTraction,
-						const double* properties,
+PylithScalar
+pylith::friction::RateStateAgeing::_calcFriction(const PylithScalar slip,
+						const PylithScalar slipRate,
+						const PylithScalar normalTraction,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars)
 { // _calcFriction
   assert(properties);
@@ -290,27 +306,27 @@
   assert(numStateVars);
   assert(_RateStateAgeing::numStateVars == numStateVars);
 
-  double friction = 0.0;
-  double mu_f = 0.0;
+  PylithScalar friction = 0.0;
+  PylithScalar mu_f = 0.0;
   if (normalTraction <= 0.0) {
     // if fault is in compression
 
     // regularized rate and state equation
-    const double f0 = properties[p_coef];
+    const PylithScalar f0 = properties[p_coef];
 
     // Since regulatized friction -> 0 as slipRate -> 0, limit slip
     // rate to some minimum value
-    const double slipRateEff = std::max(1.0e-12, slipRate);
+    const PylithScalar slipRateEff = std::max(_minSlipRate, slipRate);
 
-    const double slipRate0 = properties[p_slipRate0];
-    const double a = properties[p_a];
+    const PylithScalar slipRate0 = properties[p_slipRate0];
+    const PylithScalar a = properties[p_a];
 
-    const double theta = stateVars[s_state];
-    const double L = properties[p_L];
-    const double b = properties[p_b];
-    const double bLnTerm = b * log(slipRate0 * theta / L);
-    const double expTerm = exp((f0 + bLnTerm)/a);
-    const double sinhArg = 0.5 * slipRateEff / slipRate0 * expTerm;
+    const PylithScalar theta = stateVars[s_state];
+    const PylithScalar L = properties[p_L];
+    const PylithScalar b = properties[p_b];
+    const PylithScalar bLnTerm = b * log(slipRate0 * theta / L);
+    const PylithScalar expTerm = exp((f0 + bLnTerm)/a);
+    const PylithScalar sinhArg = 0.5 * slipRateEff / slipRate0 * expTerm;
 
     mu_f = a * asinh(sinhArg);
     friction = -mu_f * normalTraction + properties[p_cohesion];
@@ -324,12 +340,12 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::RateStateAgeing::_updateStateVars(const double slip,
-						  const double slipRate,
-						  const double normalTraction,
-						  double* const stateVars,
+pylith::friction::RateStateAgeing::_updateStateVars(const PylithScalar slip,
+						  const PylithScalar slipRate,
+						  const PylithScalar normalTraction,
+						  PylithScalar* const stateVars,
 						  const int numStateVars,
-						  const double* properties,
+						  const PylithScalar* properties,
 						  const int numProperties)
 { // _updateStateVars
   assert(properties);
@@ -358,15 +374,15 @@
 
   // Since regulatized friction -> 0 as slipRate -> 0, limit slip
   // rate to some minimum value
-  const double slipRateEff = std::max(1.0e-12, slipRate);
+  const PylithScalar slipRateEff = std::max(_minSlipRate, slipRate);
 
-  const double dt = _dt;
-  const double thetaTVertex = stateVars[s_state];
-  const double L = properties[p_L];
-  const double vDtL = slipRateEff * dt / L;
-  const double expTerm = exp(-vDtL);
+  const PylithScalar dt = _dt;
+  const PylithScalar thetaTVertex = stateVars[s_state];
+  const PylithScalar L = properties[p_L];
+  const PylithScalar vDtL = slipRateEff * dt / L;
+  const PylithScalar expTerm = exp(-vDtL);
 
-  double thetaTpdtVertex = 0.0;
+  PylithScalar thetaTpdtVertex = 0.0;
   if (vDtL > 1.0e-20) {
     thetaTpdtVertex = thetaTVertex * expTerm + L / slipRateEff * (1 - expTerm);
     PetscLogFlops(7);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/RateStateAgeing.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,6 +58,13 @@
   /// Destructor.
   ~RateStateAgeing(void);
 
+  /** Set floor for slip rate used in computing friction. Used to
+   *  avoid zero friction at zero slip rate.
+   *
+   * @param value Floor for slip rate.
+   */
+  void minSlipRate(const PylithScalar value);
+
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
 
@@ -68,15 +75,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) const;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -84,7 +91,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -97,15 +104,15 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues) const;
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
 
   /** Nondimensionalize state variables.
    *
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			   const int nvalues) const;
   
   /** Dimensionalize state variables.
@@ -113,7 +120,7 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -126,12 +133,12 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  double _calcFriction(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
-		       const double* properties,
+  PylithScalar _calcFriction(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars);
 
   /** Update state variables (for next time step).
@@ -144,17 +151,20 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const double slip,
-			const double slipRate,
-			const double normalTraction,
-			double* const stateVars,
+  void _updateStateVars(const PylithScalar slip,
+			const PylithScalar slipRate,
+			const PylithScalar normalTraction,
+			PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
+  /// Floor for slip rate used in friction calculation.
+  PylithScalar _minSlipRate;
+
   /// Indices for properties in section and spatial database.
   static const int p_coef;
   static const int p_slipRate0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/materials/Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -127,17 +127,17 @@
 // Compute properties from values in spatial database.
 void
 pylith::friction::SlipWeakening::_dbToProperties(
-					   double* const propValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
   assert(_SlipWeakening::numDBProperties == numDBValues);
 
-  const double db_static = dbValues[db_coefS];
-  const double db_dynamic = dbValues[db_coefD];
-  const double db_do = dbValues[db_d0];
-  const double db_c = dbValues[db_cohesion];
+  const PylithScalar db_static = dbValues[db_coefS];
+  const PylithScalar db_dynamic = dbValues[db_coefD];
+  const PylithScalar db_do = dbValues[db_d0];
+  const PylithScalar db_c = dbValues[db_cohesion];
 
   if (db_static < 0.0) {
     std::ostringstream msg;
@@ -173,15 +173,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::friction::SlipWeakening::_nondimProperties(double* const values,
+pylith::friction::SlipWeakening::_nondimProperties(PylithScalar* const values,
 						    const int nvalues) const
 { // _nondimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _SlipWeakening::numProperties);
 
-  const double lengthScale = _normalizer->lengthScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_d0] /= lengthScale;
   values[p_cohesion] /= pressureScale;
@@ -190,15 +190,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::friction::SlipWeakening::_dimProperties(double* const values,
+pylith::friction::SlipWeakening::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _SlipWeakening::numProperties);
 
-  const double lengthScale = _normalizer->lengthScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_d0] *= lengthScale;
   values[p_cohesion] *= pressureScale;
@@ -208,15 +208,15 @@
 // Compute state variables from values in spatial database.
 void
 pylith::friction::SlipWeakening::_dbToStateVars(
-					   double* const stateValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const stateValues,
+					   const scalar_array& dbValues) const
 { // _dbToStateVars
   assert(stateValues);
   const int numDBValues = dbValues.size();
   assert(_SlipWeakening::numDBStateVars == numDBValues);
 
-  const double cumulativeSlip = dbValues[db_slipCum];
-  const double previousSlip = dbValues[db_slipPrev];
+  const PylithScalar cumulativeSlip = dbValues[db_slipCum];
+  const PylithScalar previousSlip = dbValues[db_slipPrev];
  
   stateValues[s_slipCum] = cumulativeSlip;
   stateValues[s_slipPrev] = previousSlip;
@@ -225,14 +225,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::friction::SlipWeakening::_nondimStateVars(double* const values,
+pylith::friction::SlipWeakening::_nondimStateVars(PylithScalar* const values,
 						  const int nvalues) const
 { // _nondimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _SlipWeakening::numStateVars);
 
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
   values[s_slipCum] /= lengthScale;
   values[s_slipPrev] /= lengthScale;
@@ -241,14 +241,14 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::friction::SlipWeakening::_dimStateVars(double* const values,
+pylith::friction::SlipWeakening::_dimStateVars(PylithScalar* const values,
 					       const int nvalues) const
 { // _dimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _SlipWeakening::numStateVars);
 
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
 
   values[s_slipCum] *= lengthScale;
   values[s_slipPrev] *= lengthScale;
@@ -256,13 +256,13 @@
 
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
-double
-pylith::friction::SlipWeakening::_calcFriction(const double slip,
-						const double slipRate,
-						const double normalTraction,
-						const double* properties,
+PylithScalar
+pylith::friction::SlipWeakening::_calcFriction(const PylithScalar slip,
+						const PylithScalar slipRate,
+						const PylithScalar normalTraction,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars)
 { // _calcFriction
   assert(properties);
@@ -270,8 +270,8 @@
   assert(stateVars);
   assert(_SlipWeakening::numStateVars == numStateVars);
 
-  double friction = 0.0;
-  double mu_f = 0.0;
+  PylithScalar friction = 0.0;
+  PylithScalar mu_f = 0.0;
   if (normalTraction <= 0.0) {
     // if fault is in compression
     if (stateVars[s_slipCum] < properties[p_d0]) {
@@ -293,12 +293,12 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::SlipWeakening::_updateStateVars(const double slip,
-						  const double slipRate,
-						  const double normalTraction,
-						  double* const stateVars,
+pylith::friction::SlipWeakening::_updateStateVars(const PylithScalar slip,
+						  const PylithScalar slipRate,
+						  const PylithScalar normalTraction,
+						  PylithScalar* const stateVars,
 						  const int numStateVars,
-						  const double* properties,
+						  const PylithScalar* properties,
 						  const int numProperties)
 { // _updateStateVars
   assert(properties);
@@ -306,9 +306,9 @@
   assert(stateVars);
   assert(_SlipWeakening::numStateVars == numStateVars);
 
-  const double tolerance = 1.0e-12;
+  const PylithScalar tolerance = 1.0e-12;
   if (slipRate > tolerance) {
-    const double slipPrev = stateVars[s_slipPrev];
+    const PylithScalar slipPrev = stateVars[s_slipPrev];
 
     stateVars[s_slipPrev] = stateVars[s_slipCum];
     stateVars[s_slipCum] += fabs(slip - slipPrev);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/SlipWeakening.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,15 +57,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) const;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -73,7 +73,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -86,15 +86,15 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues) const;
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
 
   /** Nondimensionalize state variables.
    *
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			   const int nvalues) const;
   
   /** Dimensionalize state variables.
@@ -102,7 +102,7 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -115,12 +115,12 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  double _calcFriction(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
-		       const double* properties,
+  PylithScalar _calcFriction(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars);
 
   /** Update state variables (for next time step).
@@ -133,12 +133,12 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const double slip,
-      const double slipRate,
-      const double normalTraction,
-      double* const stateVars,
+  void _updateStateVars(const PylithScalar slip,
+      const PylithScalar slipRate,
+      const PylithScalar normalTraction,
+      PylithScalar* const stateVars,
       const int numStateVars,
-      const double* properties,
+      const PylithScalar* properties,
       const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/materials/Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -89,15 +89,15 @@
 // Compute properties from values in spatial database.
 void
 pylith::friction::StaticFriction::_dbToProperties(
-					   double* const propValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
   assert(_StaticFriction::numDBProperties == numDBValues);
 
-  const double coef = dbValues[db_coef];
-  const double cohesion = dbValues[db_cohesion];
+  const PylithScalar coef = dbValues[db_coef];
+  const PylithScalar cohesion = dbValues[db_cohesion];
  
   if (coef < 0.0) {
     std::ostringstream msg;
@@ -114,14 +114,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::friction::StaticFriction::_nondimProperties(double* const values,
+pylith::friction::StaticFriction::_nondimProperties(PylithScalar* const values,
 						    const int nvalues) const
 { // _nondimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _StaticFriction::numProperties);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_cohesion] /= pressureScale;
 } // _nondimProperties
@@ -129,34 +129,34 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::friction::StaticFriction::_dimProperties(double* const values,
+pylith::friction::StaticFriction::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _StaticFriction::numProperties);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_cohesion] *= pressureScale;
 } // _dimProperties
 
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
-double
-pylith::friction::StaticFriction::_calcFriction(const double slip,
-						const double slipRate,
-						const double normalTraction,
-						const double* properties,
+PylithScalar
+pylith::friction::StaticFriction::_calcFriction(const PylithScalar slip,
+						const PylithScalar slipRate,
+						const PylithScalar normalTraction,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars)
 { // _calcFriction
   assert(properties);
   assert(_StaticFriction::numProperties == numProperties);
   assert(0 == numStateVars);
 
-  const double friction = (normalTraction <= 0.0) ?
+  const PylithScalar friction = (normalTraction <= 0.0) ?
     -properties[p_coef] * normalTraction + properties[p_cohesion]: 
     0.0;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/StaticFriction.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,15 +57,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) const;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -73,7 +73,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -86,12 +86,12 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  double _calcFriction(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
-		       const double* properties,
+  PylithScalar _calcFriction(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/materials/Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -121,17 +121,17 @@
 // Compute properties from values in spatial database.
 void
 pylith::friction::TimeWeakening::_dbToProperties(
-					   double* const propValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues) const
 { // _dbToProperties
   assert(propValues);
   const int numDBValues = dbValues.size();
   assert(_TimeWeakening::numDBProperties == numDBValues);
 
-  const double db_static = dbValues[db_coefS];
-  const double db_dynamic = dbValues[db_coefD];
-  const double db_To = dbValues[db_Tc];
-  const double db_c = dbValues[db_cohesion];
+  const PylithScalar db_static = dbValues[db_coefS];
+  const PylithScalar db_dynamic = dbValues[db_coefD];
+  const PylithScalar db_To = dbValues[db_Tc];
+  const PylithScalar db_c = dbValues[db_cohesion];
 
   if (db_static < 0.0) {
     std::ostringstream msg;
@@ -167,15 +167,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::friction::TimeWeakening::_nondimProperties(double* const values,
+pylith::friction::TimeWeakening::_nondimProperties(PylithScalar* const values,
 						    const int nvalues) const
 { // _nondimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _TimeWeakening::numProperties);
 
-  const double timeScale = _normalizer->timeScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_Tc] /= timeScale;
   values[p_cohesion] /= pressureScale;
@@ -184,15 +184,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::friction::TimeWeakening::_dimProperties(double* const values,
+pylith::friction::TimeWeakening::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(_normalizer);
   assert(values);
   assert(nvalues == _TimeWeakening::numProperties);
 
-  const double timeScale = _normalizer->timeScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_Tc] *= timeScale;
   values[p_cohesion] *= pressureScale;
@@ -202,14 +202,14 @@
 // Compute state variables from values in spatial database.
 void
 pylith::friction::TimeWeakening::_dbToStateVars(
-					   double* const stateValues,
-					   const double_array& dbValues) const
+					   PylithScalar* const stateValues,
+					   const scalar_array& dbValues) const
 { // _dbToStateVars
   assert(stateValues);
   const int numDBValues = dbValues.size();
   assert(_TimeWeakening::numDBStateVars == numDBValues);
 
-  const double timeElasped = dbValues[db_time];
+  const PylithScalar timeElasped = dbValues[db_time];
   
   stateValues[s_time] = timeElasped;
 } // _dbToStateVars
@@ -217,14 +217,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::friction::TimeWeakening::_nondimStateVars(double* const values,
+pylith::friction::TimeWeakening::_nondimStateVars(PylithScalar* const values,
 						  const int nvalues) const
 { // _nondimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _TimeWeakening::numStateVars);
 
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[s_time] /= timeScale;
 } // _nondimStateVars
@@ -232,27 +232,27 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::friction::TimeWeakening::_dimStateVars(double* const values,
+pylith::friction::TimeWeakening::_dimStateVars(PylithScalar* const values,
 					       const int nvalues) const
 { // _dimStateVars
   assert(_normalizer);
   assert(values);
   assert(nvalues == _TimeWeakening::numStateVars);
 
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[s_time] *= timeScale;
 } // _dimStateVars
 
 // ----------------------------------------------------------------------
 // Compute friction from properties and state variables.
-double
-pylith::friction::TimeWeakening::_calcFriction(const double slip,
-						const double slipRate,
-						const double normalTraction,
-						const double* properties,
+PylithScalar
+pylith::friction::TimeWeakening::_calcFriction(const PylithScalar slip,
+						const PylithScalar slipRate,
+						const PylithScalar normalTraction,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars)
 { // _calcFriction
   assert(properties);
@@ -260,8 +260,8 @@
   assert(numStateVars);
   assert(_TimeWeakening::numStateVars == numStateVars);
 
-  double friction = 0.0;
-  double mu_f = 0.0;
+  PylithScalar friction = 0.0;
+  PylithScalar mu_f = 0.0;
   if (normalTraction <= 0.0) {
     // if fault is in compression
     if (stateVars[s_time] < properties[p_Tc]) {
@@ -283,12 +283,12 @@
 // ----------------------------------------------------------------------
 // Update state variables (for next time step).
 void
-pylith::friction::TimeWeakening::_updateStateVars(const double slip,
-						  const double slipRate,
-						  const double normalTraction,
-						  double* const stateVars,
+pylith::friction::TimeWeakening::_updateStateVars(const PylithScalar slip,
+						  const PylithScalar slipRate,
+						  const PylithScalar normalTraction,
+						  PylithScalar* const stateVars,
 						  const int numStateVars,
-						  const double* properties,
+						  const PylithScalar* properties,
 						  const int numProperties)
 { // _updateStateVars
   assert(properties);
@@ -296,9 +296,9 @@
   assert(numStateVars);
   assert(_TimeWeakening::numStateVars == numStateVars);
 
-  const double tolerance = 1.0e-12;
+  const PylithScalar tolerance = 1.0e-12;
   if (slipRate > tolerance) {
-    const double dt = _dt;
+    const PylithScalar dt = _dt;
 
     stateVars[s_time] += dt;
   } else {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/friction/TimeWeakening.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,15 +57,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) const;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) const;
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -73,7 +73,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -86,15 +86,15 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues) const;
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues) const;
 
   /** Nondimensionalize state variables.
    *
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			   const int nvalues) const;
   
   /** Dimensionalize state variables.
@@ -102,7 +102,7 @@
    * @param values Array of initial state values.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Compute friction from properties and state variables.
@@ -115,12 +115,12 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  double _calcFriction(const double slip,
-		       const double slipRate,
-		       const double normalTraction,
-		       const double* properties,
+  PylithScalar _calcFriction(const PylithScalar slip,
+		       const PylithScalar slipRate,
+		       const PylithScalar normalTraction,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars);
 
   /** Update state variables (for next time step).
@@ -133,12 +133,12 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _updateStateVars(const double slip,
-      const double slipRate,
-      const double normalTraction,
-      double* const stateVars,
+  void _updateStateVars(const PylithScalar slip,
+      const PylithScalar slipRate,
+      const PylithScalar normalTraction,
+      PylithScalar* const stateVars,
       const int numStateVars,
-      const double* properties,
+      const PylithScalar* properties,
       const int numProperties);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -188,19 +188,19 @@
 // Compute properties from values in spatial database.
 void
 pylith::materials::DruckerPrager3D::_dbToProperties(
-				double* const propValues,
-				const double_array& dbValues)
+				PylithScalar* const propValues,
+				const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_DruckerPrager3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
-  const double frictionAngle = dbValues[db_frictionAngle];
-  const double cohesion = dbValues[db_cohesion];
-  const double dilatationAngle = dbValues[db_dilatationAngle];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
+  const PylithScalar frictionAngle = dbValues[db_frictionAngle];
+  const PylithScalar cohesion = dbValues[db_cohesion];
+  const PylithScalar dilatationAngle = dbValues[db_dilatationAngle];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || frictionAngle < 0.0
       || cohesion < 0.0 || dilatationAngle < 0.0
@@ -220,13 +220,13 @@
   if (fabs(frictionAngle - dilatationAngle) > 1.0e-6)
     _isJacobianSymmetric = false;
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
-  const double denomFriction = sqrt(3.0) * (3.0 - sin(frictionAngle));
-  const double denomDilatation = sqrt(3.0) * (3.0 - sin(dilatationAngle));
-  const double alphaYield = 2.0 * sin(frictionAngle)/denomFriction;
-  const double beta = 6.0 * cohesion * cos(frictionAngle)/denomFriction;
-  const double alphaFlow = 2.0 * sin(dilatationAngle)/denomDilatation;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar denomFriction = sqrt(3.0) * (3.0 - sin(frictionAngle));
+  const PylithScalar denomDilatation = sqrt(3.0) * (3.0 - sin(dilatationAngle));
+  const PylithScalar alphaYield = 2.0 * sin(frictionAngle)/denomFriction;
+  const PylithScalar beta = 6.0 * cohesion * cos(frictionAngle)/denomFriction;
+  const PylithScalar alphaFlow = 2.0 * sin(dilatationAngle)/denomDilatation;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -251,15 +251,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::DruckerPrager3D::_nondimProperties(double* const values,
+pylith::materials::DruckerPrager3D::_nondimProperties(PylithScalar* const values,
 					         const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -277,15 +277,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::DruckerPrager3D::_dimProperties(double* const values,
+pylith::materials::DruckerPrager3D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -303,8 +303,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::DruckerPrager3D::_dbToStateVars(
-				double* const stateValues,
-				const double_array& dbValues)
+				PylithScalar* const stateValues,
+				const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -314,7 +314,7 @@
   assert(totalSize == _numVarsQuadPt);
   assert(totalSize == numDBValues);
   memcpy(&stateValues[s_plasticStrain], &dbValues[db_plasticStrain],
-	 _tensorSize*sizeof(double));
+	 _tensorSize*sizeof(PylithScalar));
 
   PetscLogFlops(0);
 } // _dbToStateVars
@@ -322,7 +322,7 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::materials::DruckerPrager3D::_nondimStateVars(double* const values,
+pylith::materials::DruckerPrager3D::_nondimStateVars(PylithScalar* const values,
 						const int nvalues) const
 { // _nondimStateVars
   assert(0 != _normalizer);
@@ -335,7 +335,7 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::materials::DruckerPrager3D::_dimStateVars(double* const values,
+pylith::materials::DruckerPrager3D::_dimStateVars(PylithScalar* const values,
 					     const int nvalues) const
 { // _dimStateVars
   assert(0 != _normalizer);
@@ -348,10 +348,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::DruckerPrager3D::_calcDensity(double* const density,
-					    const double* properties,
+pylith::materials::DruckerPrager3D::_calcDensity(PylithScalar* const density,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* stateVars,
+					    const PylithScalar* stateVars,
 					    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -363,11 +363,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::DruckerPrager3D::_stableTimeStepImplicit(
-				  const double* properties,
+				  const PylithScalar* properties,
 				  const int numProperties,
-				  const double* stateVars,
+				  const PylithScalar* stateVars,
 				  const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -376,7 +376,7 @@
   assert(_numVarsQuadPt == numStateVars);
   // It's unclear what to do for an elasto-plastic material, which has no
   // inherent time scale. For now, just set dtStable to a large value.
-  const double dtStable = pylith::PYLITH_MAXDOUBLE;
+  const PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
   PetscLogFlops(0);
   return dtStable;
 } // _stableTimeStepImplicit
@@ -386,17 +386,17 @@
 // material.
 void
 pylith::materials::DruckerPrager3D::_calcStressElastic(
-				         double* const stress,
+				         PylithScalar* const stress,
 					 const int stressSize,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize,
 					 const bool computeStateVars)
 { // _calcStressElastic
@@ -413,19 +413,19 @@
   assert(0 != initialStrain);
   assert(_DruckerPrager3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar mu2 = 2.0 * mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double traceStrainTpdt = e11 + e22 + e33;
-  const double s123 = lambda * traceStrainTpdt;
+  const PylithScalar traceStrainTpdt = e11 + e22 + e33;
+  const PylithScalar s123 = lambda * traceStrainTpdt;
 
   stress[0] = s123 + mu2*e11 + initialStress[0];
   stress[1] = s123 + mu2*e22 + initialStress[1];
@@ -442,17 +442,17 @@
 // material.
 void
 pylith::materials::DruckerPrager3D::_calcStressElastoplastic(
-					double* const stress,
+					PylithScalar* const stress,
 					const int stressSize,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize,
 					const bool computeStateVars)
 { // _calcStressElastoplastic
@@ -470,64 +470,64 @@
   assert(_DruckerPrager3D::tensorSize == initialStrainSize);
 
   const int tensorSize = _tensorSize;
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
     
   // We need to compute the plastic strain increment if state variables are
   // from previous time step.
   if (computeStateVars) {
 
-    const double alphaYield = properties[p_alphaYield];
-    const double beta = properties[p_beta];
-    const double alphaFlow = properties[p_alphaFlow];
-    const double mu2 = 2.0 * mu;
-    const double bulkModulus = lambda + mu2/3.0;
-    const double ae = 1.0/mu2;
-    const double am = 1.0/(3.0 * bulkModulus);
+    const PylithScalar alphaYield = properties[p_alphaYield];
+    const PylithScalar beta = properties[p_beta];
+    const PylithScalar alphaFlow = properties[p_alphaFlow];
+    const PylithScalar mu2 = 2.0 * mu;
+    const PylithScalar bulkModulus = lambda + mu2/3.0;
+    const PylithScalar ae = 1.0/mu2;
+    const PylithScalar am = 1.0/(3.0 * bulkModulus);
 
-    const double plasticStrainT[] = {stateVars[s_plasticStrain],
+    const PylithScalar plasticStrainT[] = {stateVars[s_plasticStrain],
 				     stateVars[s_plasticStrain + 1],
 				     stateVars[s_plasticStrain + 2],
 				     stateVars[s_plasticStrain + 3],
 				     stateVars[s_plasticStrain + 4],
 				     stateVars[s_plasticStrain + 5]};
-    const double meanPlasticStrainT = (plasticStrainT[0] +
+    const PylithScalar meanPlasticStrainT = (plasticStrainT[0] +
 				       plasticStrainT[1] +
 				       plasticStrainT[2])/3.0;
-    double devPlasticStrainT[tensorSize];
+    PylithScalar devPlasticStrainT[tensorSize];
     pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
 							 plasticStrainT,
 							 meanPlasticStrainT);
 
-    const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+    const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
     // Initial stress values
-    const double meanStressInitial = (initialStress[0] +
+    const PylithScalar meanStressInitial = (initialStress[0] +
 				      initialStress[1] +
 				      initialStress[2])/3.0;
-    double devStressInitial[tensorSize];
+    PylithScalar devStressInitial[tensorSize];
     pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
 							 initialStress,
 							 meanStressInitial);
 
     // Initial strain values
-    const double meanStrainInitial = (initialStrain[0] +
+    const PylithScalar meanStrainInitial = (initialStrain[0] +
 				      initialStrain[1] +
 				      initialStrain[2])/3.0;
-    double devStrainInitial[tensorSize];
+    PylithScalar devStrainInitial[tensorSize];
     pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
 							 initialStrain,
 							 meanStrainInitial);
 
     // Values for current time step
-    const double e11 = totalStrain[0];
-    const double e22 = totalStrain[1];
-    const double e33 = totalStrain[2];
-    const double meanStrainTpdt = (e11 + e22 + e33)/3.0;
-    const double meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
+    const PylithScalar e11 = totalStrain[0];
+    const PylithScalar e22 = totalStrain[1];
+    const PylithScalar e33 = totalStrain[2];
+    const PylithScalar meanStrainTpdt = (e11 + e22 + e33)/3.0;
+    const PylithScalar meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
       meanStrainInitial;
 
-    const double strainPPTpdt[] =
+    const PylithScalar strainPPTpdt[] =
       { totalStrain[0] - meanStrainTpdt - devPlasticStrainT[0] -
 	devStrainInitial[0],
 	totalStrain[1] - meanStrainTpdt - devPlasticStrainT[1] -
@@ -540,18 +540,18 @@
 
     // Compute trial elastic stresses and yield function to see if yield should
     // occur.
-    const double trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
+    const PylithScalar trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
 				      strainPPTpdt[1]/ae + devStressInitial[1],
 				      strainPPTpdt[2]/ae + devStressInitial[2],
 				      strainPPTpdt[3]/ae + devStressInitial[3],
 				      strainPPTpdt[4]/ae + devStressInitial[4],
 				      strainPPTpdt[5]/ae + devStressInitial[5]};
-    const double trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
-    const double stressInvar2 =
+    const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
+    const PylithScalar stressInvar2 =
       sqrt(0.5 *
 	   pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
 							       trialDevStress));
-    const double yieldFunction = 3.0 * alphaYield * trialMeanStress +
+    const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
       stressInvar2 - beta;
 #if 0 // DEBUGGING
     std::cout << "Function _calcStressElastoPlastic: elastic" << std::endl;
@@ -565,24 +565,24 @@
 
     // If yield function is greater than zero, compute elastoplastic stress.
     if (yieldFunction >= 0.0) {
-      const double devStressInitialProd = 
+      const PylithScalar devStressInitialProd = 
 	pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							    devStressInitial);
-      const double strainPPTpdtProd =
+      const PylithScalar strainPPTpdtProd =
 	pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							    strainPPTpdt);
-      const double d =
+      const PylithScalar d =
 	sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
 	   pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							       strainPPTpdt) +
 	     strainPPTpdtProd);
-      const double plasticMult = 2.0 * ae * am *
+      const PylithScalar plasticMult = 2.0 * ae * am *
 	(3.0 * alphaYield * meanStrainPPTpdt/am + d/(sqrt(2.0) * ae) - beta)/
 	(6.0 * alphaYield * alphaFlow * ae + am);
-      const double meanStressTpdt =
+      const PylithScalar meanStressTpdt =
 	(meanStrainPPTpdt - plasticMult * alphaFlow)/am + meanStressInitial;
-      double deltaDevPlasticStrain = 0.0;
-      double devStressTpdt = 0.0;
+      PylithScalar deltaDevPlasticStrain = 0.0;
+      PylithScalar devStressTpdt = 0.0;
       for (int iComp=0; iComp < tensorSize; ++iComp) {
 	deltaDevPlasticStrain = plasticMult *(strainPPTpdt[iComp] +
 					      ae * devStressInitial[iComp])/
@@ -596,7 +596,7 @@
 
     } else {
       // No plastic strain.
-      const double meanStressTpdt = meanStrainPPTpdt/am + meanStressInitial;
+      const PylithScalar meanStressTpdt = meanStrainPPTpdt/am + meanStressInitial;
       stress[0] = strainPPTpdt[0]/ae + devStressInitial[0] + meanStressTpdt; 
       stress[1] = strainPPTpdt[1]/ae + devStressInitial[1] + meanStressTpdt; 
       stress[2] = strainPPTpdt[2]/ae + devStressInitial[2] + meanStressTpdt; 
@@ -608,23 +608,23 @@
     // If state variables have already been updated, the plastic strain for the
     // time step has already been computed.
   } else {
-    const double mu2 = 2.0 * mu;
-    const double plasticStrainTpdt[] = {stateVars[s_plasticStrain],
+    const PylithScalar mu2 = 2.0 * mu;
+    const PylithScalar plasticStrainTpdt[] = {stateVars[s_plasticStrain],
 					stateVars[s_plasticStrain + 1],
 					stateVars[s_plasticStrain + 2],
 					stateVars[s_plasticStrain + 3],
 					stateVars[s_plasticStrain + 4],
 					stateVars[s_plasticStrain + 5]};
 
-    const double e11 = totalStrain[0] - plasticStrainTpdt[0] - initialStrain[0];
-    const double e22 = totalStrain[1] - plasticStrainTpdt[1] - initialStrain[1];
-    const double e33 = totalStrain[2] - plasticStrainTpdt[2] - initialStrain[2];
-    const double e12 = totalStrain[3] - plasticStrainTpdt[3] - initialStrain[3];
-    const double e23 = totalStrain[4] - plasticStrainTpdt[4] - initialStrain[4];
-    const double e13 = totalStrain[5] - plasticStrainTpdt[5] - initialStrain[5];
+    const PylithScalar e11 = totalStrain[0] - plasticStrainTpdt[0] - initialStrain[0];
+    const PylithScalar e22 = totalStrain[1] - plasticStrainTpdt[1] - initialStrain[1];
+    const PylithScalar e33 = totalStrain[2] - plasticStrainTpdt[2] - initialStrain[2];
+    const PylithScalar e12 = totalStrain[3] - plasticStrainTpdt[3] - initialStrain[3];
+    const PylithScalar e23 = totalStrain[4] - plasticStrainTpdt[4] - initialStrain[4];
+    const PylithScalar e13 = totalStrain[5] - plasticStrainTpdt[5] - initialStrain[5];
 
-    const double traceStrainTpdt = e11 + e22 + e33;
-    const double s123 = lambda * traceStrainTpdt;
+    const PylithScalar traceStrainTpdt = e11 + e22 + e33;
+    const PylithScalar s123 = lambda * traceStrainTpdt;
 
     stress[0] = s123 + mu2 * e11 + initialStress[0];
     stress[1] = s123 + mu2 * e22 + initialStress[1];
@@ -637,22 +637,22 @@
 
   } // else
 #if 0 // DEBUGGING
-  const double alphaYield = properties[p_alphaYield];
-  const double beta = properties[p_beta];
-  const double alphaFlow = properties[p_alphaFlow];
-  const double meanStressTest = (stress[0] + stress[1] + stress[2])/3.0;
-  const double devStressTest[] = { stress[0] - meanStressTest,
+  const PylithScalar alphaYield = properties[p_alphaYield];
+  const PylithScalar beta = properties[p_beta];
+  const PylithScalar alphaFlow = properties[p_alphaFlow];
+  const PylithScalar meanStressTest = (stress[0] + stress[1] + stress[2])/3.0;
+  const PylithScalar devStressTest[] = { stress[0] - meanStressTest,
 				   stress[1] - meanStressTest,
 				   stress[2] - meanStressTest,
 				   stress[3],
 				   stress[4],
 				   stress[5]};
-  const double stressInvar2Test =
+  const PylithScalar stressInvar2Test =
     sqrt(0.5 *
 	 pylith::materials::ElasticMaterial::scalarProduct3D(devStressTest,
 							     devStressTest));
   
-  const double yieldFunctionTest = 3.0 * alphaYield * meanStressTest +
+  const PylithScalar yieldFunctionTest = 3.0 * alphaYield * meanStressTest +
       stressInvar2Test - beta;
   std::cout << "Function _calcStressElastoPlastic: end" << std::endl;
   std::cout << "  alphaYield:        " << alphaYield << std::endl;
@@ -668,17 +668,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::DruckerPrager3D::_calcElasticConstsElastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -694,11 +694,11 @@
   assert(0 != initialStrain);
   assert(_DruckerPrager3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -745,17 +745,17 @@
 // as an elastoplastic material.
 void
 pylith::materials::DruckerPrager3D::_calcElasticConstsElastoplastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsElastoplastic
   assert(0 != elasticConsts);
@@ -774,59 +774,59 @@
   // Duplicate functionality of _calcStressElastoplastic
   // Get properties
   const int tensorSize = _tensorSize;
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double alphaYield = properties[p_alphaYield];
-  const double beta = properties[p_beta];
-  const double alphaFlow = properties[p_alphaFlow];
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
-  const double ae = 1.0/mu2;
-  const double am = 1.0/(3.0 * bulkModulus);
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar alphaYield = properties[p_alphaYield];
+  const PylithScalar beta = properties[p_beta];
+  const PylithScalar alphaFlow = properties[p_alphaFlow];
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
+  const PylithScalar ae = 1.0/mu2;
+  const PylithScalar am = 1.0/(3.0 * bulkModulus);
   
   // Get state variables from previous time step
-  const double plasticStrainT[] = {stateVars[s_plasticStrain],
+  const PylithScalar plasticStrainT[] = {stateVars[s_plasticStrain],
 				   stateVars[s_plasticStrain + 1],
 				   stateVars[s_plasticStrain + 2],
 				   stateVars[s_plasticStrain + 3],
 				   stateVars[s_plasticStrain + 4],
 				   stateVars[s_plasticStrain + 5]};
-  const double meanPlasticStrainT = (plasticStrainT[0] +
+  const PylithScalar meanPlasticStrainT = (plasticStrainT[0] +
 				     plasticStrainT[1] +
 				     plasticStrainT[2])/3.0;
-  double devPlasticStrainT[tensorSize];
+  PylithScalar devPlasticStrainT[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
 						       plasticStrainT,
 						       meanPlasticStrainT);
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Initial stress values
-  const double meanStressInitial = (initialStress[0] +
+  const PylithScalar meanStressInitial = (initialStress[0] +
 				    initialStress[1] +
 				    initialStress[2])/3.0;
-  double devStressInitial[tensorSize];
+  PylithScalar devStressInitial[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
 						       initialStress,
 						       meanStressInitial);
 
   // Initial strain values
-  const double meanStrainInitial = (initialStrain[0] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] +
 				    initialStrain[1] +
 				    initialStrain[2])/3.0;
-  double devStrainInitial[tensorSize];
+  PylithScalar devStrainInitial[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
 						       initialStrain,
 						       meanStrainInitial);
 
   // Values for current time step
-  const double meanStrainTpdt = (totalStrain[0] +
+  const PylithScalar meanStrainTpdt = (totalStrain[0] +
 				 totalStrain[1] +
 				 totalStrain[2])/3.0;
-  const double meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
+  const PylithScalar meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
     meanStrainInitial;
   
-  const double strainPPTpdt[] =
+  const PylithScalar strainPPTpdt[] =
     { totalStrain[0] - meanStrainTpdt - devPlasticStrainT[0] -
       devStrainInitial[0],
       totalStrain[1] - meanStrainTpdt - devPlasticStrainT[1] -
@@ -839,18 +839,18 @@
   
   // Compute trial elastic stresses and yield function to see if yield should
   // occur.
-  const double trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
+  const PylithScalar trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
 				    strainPPTpdt[1]/ae + devStressInitial[1],
 				    strainPPTpdt[2]/ae + devStressInitial[2],
 				    strainPPTpdt[3]/ae + devStressInitial[3],
 				    strainPPTpdt[4]/ae + devStressInitial[4],
 				    strainPPTpdt[5]/ae + devStressInitial[5]};
-  const double trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
-  const double stressInvar2 =
+  const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
+  const PylithScalar stressInvar2 =
     sqrt(0.5 *
 	 pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
 							     trialDevStress));
-  const double yieldFunction = 3.0 * alphaYield * trialMeanStress +
+  const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
     stressInvar2 - beta;
 #if 0 // DEBUGGING
   std::cout << "Function _calcElasticConstsElastoPlastic:" << std::endl;
@@ -865,46 +865,46 @@
   // If yield function is greater than zero, compute elastoplastic stress and
   // corresponding tangent matrix.
   if (yieldFunction >= 0.0) {
-    const double devStressInitialProd = 
+    const PylithScalar devStressInitialProd = 
       pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							  devStressInitial);
-    const double strainPPTpdtProd =
+    const PylithScalar strainPPTpdtProd =
       pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							  strainPPTpdt);
-    const double d = 
+    const PylithScalar d = 
       sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
 	   pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							       strainPPTpdt) +
 	   strainPPTpdtProd);
-    const double plasticFac = 2.0 * ae * am/
+    const PylithScalar plasticFac = 2.0 * ae * am/
       (6.0 * alphaYield * alphaFlow * ae + am);
-    const double meanStrainFac = 3.0 * alphaYield/am;
-    const double dFac = 1.0/(sqrt(2.0) * ae);
-    const double plasticMult = plasticFac *
+    const PylithScalar meanStrainFac = 3.0 * alphaYield/am;
+    const PylithScalar dFac = 1.0/(sqrt(2.0) * ae);
+    const PylithScalar plasticMult = plasticFac *
       (meanStrainFac * meanStrainPPTpdt + dFac * d - beta);
 
     // Define some constants, vectors, and matrices.
-    const double third = 1.0/3.0;
-    const double dEdEpsilon[6][6] = {
+    const PylithScalar third = 1.0/3.0;
+    const PylithScalar dEdEpsilon[6][6] = {
       { 2.0 * third,      -third,      -third, 0.0, 0.0, 0.0},
       {      -third, 2.0 * third,      -third, 0.0, 0.0, 0.0},
       {      -third,      -third, 2.0 * third, 0.0, 0.0, 0.0},
       {         0.0,         0.0,         0.0, 1.0, 0.0, 0.0},
       {         0.0,         0.0,         0.0, 0.0, 1.0, 0.0},
       {         0.0,         0.0,         0.0, 0.0, 0.0, 1.0}};
-    const double vec1[] = {strainPPTpdt[0] + ae * devStressInitial[0],
+    const PylithScalar vec1[] = {strainPPTpdt[0] + ae * devStressInitial[0],
 			   strainPPTpdt[1] + ae * devStressInitial[1],
 			   strainPPTpdt[2] + ae * devStressInitial[2],
 			   strainPPTpdt[3] + ae * devStressInitial[3],
 			   strainPPTpdt[4] + ae * devStressInitial[4],
 			   strainPPTpdt[5] + ae * devStressInitial[5]};
-    const double dDdEpsilon[] = {vec1[0]/d,
+    const PylithScalar dDdEpsilon[] = {vec1[0]/d,
 				 vec1[1]/d,
 				 vec1[2]/d,
 				 2.0 * vec1[3]/d,
 				 2.0 * vec1[4]/d,
 				 2.0 * vec1[5]/d};
-    const double dLambdadEpsilon[] = {
+    const PylithScalar dLambdadEpsilon[] = {
       plasticFac * (alphaYield/am + dFac * dDdEpsilon[0]),
       plasticFac * (alphaYield/am + dFac * dDdEpsilon[1]),
       plasticFac * (alphaYield/am + dFac * dDdEpsilon[2]),
@@ -912,8 +912,8 @@
       plasticFac * (                dFac * dDdEpsilon[4]),
       plasticFac * (                dFac * dDdEpsilon[5])};
     
-    const double dFac2 = 1.0/(sqrt(2.0) * d);
-    double dDeltaEdEpsilon = 0.0;
+    const PylithScalar dFac2 = 1.0/(sqrt(2.0) * d);
+    PylithScalar dDeltaEdEpsilon = 0.0;
 
     // Compute elasticity matrix.
     for (int iComp=0; iComp < tensorSize; ++iComp) {
@@ -934,7 +934,7 @@
 
   } else {
     // No plastic strain.
-    const double lambda2mu = lambda + mu2;
+    const PylithScalar lambda2mu = lambda + mu2;
     elasticConsts[ 0] = lambda2mu; // C1111
     elasticConsts[ 1] = lambda; // C1122
     elasticConsts[ 2] = lambda; // C1133
@@ -981,15 +981,15 @@
 // Update state variables.
 void
 pylith::materials::DruckerPrager3D::_updateStateVarsElastic(
-				    double* const stateVars,
+				    PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -1014,15 +1014,15 @@
 // Update state variables.
 void
 pylith::materials::DruckerPrager3D::_updateStateVarsElastoplastic(
-				    double* const stateVars,
+				    PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize)
 { // _updateStateVarsElastoplastic
   assert(0 != stateVars);
@@ -1042,59 +1042,59 @@
   // since otherwise we would have to redo a lot of calculations.
 
   const int tensorSize = _tensorSize;
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double alphaYield = properties[p_alphaYield];
-  const double beta = properties[p_beta];
-  const double alphaFlow = properties[p_alphaFlow];
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
-  const double ae = 1.0/mu2;
-  const double am = 1.0/(3.0 * bulkModulus);
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar alphaYield = properties[p_alphaYield];
+  const PylithScalar beta = properties[p_beta];
+  const PylithScalar alphaFlow = properties[p_alphaFlow];
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
+  const PylithScalar ae = 1.0/mu2;
+  const PylithScalar am = 1.0/(3.0 * bulkModulus);
 
-  const double plasticStrainT[] = {stateVars[s_plasticStrain],
+  const PylithScalar plasticStrainT[] = {stateVars[s_plasticStrain],
 				   stateVars[s_plasticStrain + 1],
 				   stateVars[s_plasticStrain + 2],
 				   stateVars[s_plasticStrain + 3],
 				   stateVars[s_plasticStrain + 4],
 				   stateVars[s_plasticStrain + 5]};
-  const double meanPlasticStrainT = (plasticStrainT[0] +
+  const PylithScalar meanPlasticStrainT = (plasticStrainT[0] +
 				     plasticStrainT[1] +
 				     plasticStrainT[2])/3.0;
-  double devPlasticStrainT[tensorSize];
+  PylithScalar devPlasticStrainT[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devPlasticStrainT,
 						       plasticStrainT,
 						       meanPlasticStrainT);
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Initial stress values
-  const double meanStressInitial = (initialStress[0] +
+  const PylithScalar meanStressInitial = (initialStress[0] +
 				    initialStress[1] +
 				    initialStress[2])/3.0;
-  double devStressInitial[tensorSize];
+  PylithScalar devStressInitial[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devStressInitial,
 						       initialStress,
 						       meanStressInitial);
 
   // Initial strain values
-  const double meanStrainInitial = (initialStrain[0] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] +
 				    initialStrain[1] +
 				    initialStrain[2])/3.0;
-  double devStrainInitial[tensorSize];
+  PylithScalar devStrainInitial[tensorSize];
   pylith::materials::ElasticMaterial::calcDeviatoric3D(devStrainInitial,
 						       initialStrain,
 						       meanStrainInitial);
 
   // Values for current time step
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double meanStrainTpdt = (e11 + e22 + e33)/3.0;
-  const double meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33)/3.0;
+  const PylithScalar meanStrainPPTpdt = meanStrainTpdt - meanPlasticStrainT -
     meanStrainInitial;
 
-  const double strainPPTpdt[] =
+  const PylithScalar strainPPTpdt[] =
     { totalStrain[0] - meanStrainTpdt - devPlasticStrainT[0] -
       devStrainInitial[0],
       totalStrain[1] - meanStrainTpdt - devPlasticStrainT[1] -
@@ -1107,18 +1107,18 @@
 
   // Compute trial elastic stresses and yield function to see if yield should
   // occur.
-  const double trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
+  const PylithScalar trialDevStress[] = { strainPPTpdt[0]/ae + devStressInitial[0],
 				    strainPPTpdt[1]/ae + devStressInitial[1],
 				    strainPPTpdt[2]/ae + devStressInitial[2],
 				    strainPPTpdt[3]/ae + devStressInitial[3],
 				    strainPPTpdt[4]/ae + devStressInitial[4],
 				    strainPPTpdt[5]/ae + devStressInitial[5]};
-  const double trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
-  const double stressInvar2 =
+  const PylithScalar trialMeanStress = meanStrainPPTpdt/am + meanStressInitial;
+  const PylithScalar stressInvar2 =
     sqrt(0.5 *
 	 pylith::materials::ElasticMaterial::scalarProduct3D(trialDevStress,
 							     trialDevStress));
-  const double yieldFunction = 3.0 * alphaYield * trialMeanStress +
+  const PylithScalar yieldFunction = 3.0 * alphaYield * trialMeanStress +
     stressInvar2 - beta;
 #if 0 // DEBUGGING
   std::cout << "Function _updateStateVarsElastoPlastic:" << std::endl;
@@ -1133,22 +1133,22 @@
   // If yield function is greater than zero, compute plastic strains.
   // Otherwise, plastic strains remain the same.
   if (yieldFunction >= 0.0) {
-    const double devStressInitialProd = 
+    const PylithScalar devStressInitialProd = 
       pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							  devStressInitial);
-    const double strainPPTpdtProd =
+    const PylithScalar strainPPTpdtProd =
       pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							  strainPPTpdt);
-    const double d =
+    const PylithScalar d =
       sqrt(ae * ae * devStressInitialProd + 2.0 * ae *
 	   pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							       strainPPTpdt) +
 	   strainPPTpdtProd);
-    const double plasticMult = 2.0 * ae * am *
+    const PylithScalar plasticMult = 2.0 * ae * am *
       (3.0 * alphaYield * meanStrainPPTpdt/am + d/(sqrt(2.0) * ae) - beta)/
       (6.0 * alphaYield * alphaFlow * ae + am);
-    const double deltaMeanPlasticStrain = plasticMult * alphaFlow;
-    double deltaDevPlasticStrain = 0.0;
+    const PylithScalar deltaMeanPlasticStrain = plasticMult * alphaFlow;
+    PylithScalar deltaDevPlasticStrain = 0.0;
     for (int iComp=0; iComp < tensorSize; ++iComp) {
       deltaDevPlasticStrain = plasticMult *(strainPPTpdt[iComp] +
 					    ae * devStressInitial[iComp])/

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -76,15 +76,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -92,7 +92,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -100,15 +100,15 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   /** Nondimensionalize state variables..
    *
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Dimensionalize state variables.
@@ -116,7 +116,7 @@
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 		     const int nvalues) const;
 
   /** Compute density from properties.
@@ -127,10 +127,10 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -152,17 +152,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -181,17 +181,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -203,9 +203,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   /** Update state variables (for next time step).
@@ -221,15 +221,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -237,46 +237,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::DruckerPrager3D::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::DruckerPrager3D::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::DruckerPrager3D::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -298,17 +298,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -328,17 +328,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastoplastic(double* const stress,
+  void _calcStressElastoplastic(PylithScalar* const stress,
 				const int stressSize,
-				const double* properties,
+				const PylithScalar* properties,
 				const int numProperties,
-				const double* stateVars,
+				const PylithScalar* stateVars,
 				const int numStateVars,
-				const double* totalStrain,
+				const PylithScalar* totalStrain,
 				const int strainSize,
-				const double* initialStress,
+				const PylithScalar* initialStress,
 				const int initialStressSize,
-				const double* initialStrain,
+				const PylithScalar* initialStrain,
 				const int initialStrainSize,
 				const bool computeStateVars);
 
@@ -358,17 +358,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-				 const double* initialStress,
+				 const PylithScalar* initialStress,
 				 const int initialStressSize,
-				 const double* initialStrain,
+				 const PylithScalar* initialStrain,
 				 const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as an
@@ -387,17 +387,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastoplastic(double* const elasticConsts,
+  void _calcElasticConstsElastoplastic(PylithScalar* const elasticConsts,
 				       const int numElasticConsts,
-				       const double* properties,
+				       const PylithScalar* properties,
 				       const int numProperties,
-				       const double* stateVars,
+				       const PylithScalar* stateVars,
 				       const int numStateVars,
-				       const double* totalStrain,
+				       const PylithScalar* totalStrain,
 				       const int strainSize,
-				       const double* initialStress,
+				       const PylithScalar* initialStress,
 				       const int initialStressSize,
-				       const double* initialStrain,
+				       const PylithScalar* initialStrain,
 				       const int initialStrainSize);
   
   /** Update state variables after solve as an elastic material.
@@ -413,15 +413,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as an elastoplastic material.
@@ -433,15 +433,15 @@
    * @param initialState Initial state values.
    * @param initialStateSize Size of initial state array.
    */
-  void _updateStateVarsElastoplastic(double* const stateVars,
+  void _updateStateVarsElastoplastic(PylithScalar* const stateVars,
 				     const int numStateVars,
-				     const double* properties,
+				     const PylithScalar* properties,
 				     const int numProperties,
-				     const double* totalStrain,
+				     const PylithScalar* totalStrain,
 				     const int strainSize,
-				     const double* initialStress,
+				     const PylithScalar* initialStress,
 				     const int initialStressSize,
-				     const double* initialStrain,
+				     const PylithScalar* initialStrain,
 				     const int initialStrainSize);
 
   /** Compute scalar product, assuming vector form of a tensor.
@@ -450,23 +450,23 @@
    * @param tensor2 Second tensor.
    */
   /*
-  double _scalarProduct(const double* tensor1,
-			const double* tensor2) const;
+  PylithScalar _scalarProduct(const PylithScalar* tensor1,
+			const PylithScalar* tensor2) const;
   */
 
   /** Compute tensor mean, assuming vector form of a tensor.
    *
    * @param vec Tensor represented as a vector.
    */
-  double _calcMean(const double* vec) const;
+  PylithScalar _calcMean(const PylithScalar* vec) const;
 
   /** Compute deviatoric components, assuming vector form of a tensor.
    *
    * @param vec Tensor represented as a vector.
    * @param vecMean Tensor mean.
    */
-  double _calcDeviatoric(const double* vec,
-			 const double vecMean) const;
+  PylithScalar _calcDeviatoric(const PylithScalar* vec,
+			 const PylithScalar vecMean) const;
 
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/DruckerPrager3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::DruckerPrager3D::timeStep(const double dt) {
+pylith::materials::DruckerPrager3D::timeStep(const PylithScalar dt) {
   // Not sure what to do here.  If we are using full Newton the Jacobian will
   // always need reforming, but SNES may opt not to reform it sometimes.
   _needNewJacobian = true;
@@ -36,17 +36,17 @@
 // Compute stress tensor from parameters.
 inline
 void
-pylith::materials::DruckerPrager3D::_calcStress(double* const stress,
+pylith::materials::DruckerPrager3D::_calcStress(PylithScalar* const stress,
 						const int stressSize,
-						const double* properties,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars,
-						const double* totalStrain,
+						const PylithScalar* totalStrain,
 						const int strainSize,
-						const double* initialStress,
+						const PylithScalar* initialStress,
 						const int initialStressSize,
-						const double* initialStrain,
+						const PylithScalar* initialStrain,
 						const int initialStrainSize,
 						const bool computeStateVars)
 {
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::DruckerPrager3D::_calcElasticConsts(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 {
   assert(0 != _calcElasticConstsFn);
@@ -90,15 +90,15 @@
 inline
 void
 pylith::materials::DruckerPrager3D::_updateStateVars(
-					double* const stateVars,
+					PylithScalar* const stateVars,
 					const int numStateVars,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 {
   assert(0 != _updateStateVarsFn);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,8 +53,8 @@
    */
   template<typename material_type>
   static
-  double calculate(const double effStressInitialGuess,
-		   const double stressScale,
+  PylithScalar calculate(const PylithScalar effStressInitialGuess,
+		   const PylithScalar stressScale,
 		   material_type* const material);
 
   // PRIVATE METHODS /////////////////////////////////////////////////////
@@ -69,8 +69,8 @@
    */
   template<typename material_type>
   static
-  void _bracket(double* px1,
-		double* px2,
+  void _bracket(PylithScalar* px1,
+		PylithScalar* px2,
 		material_type* const material);
 
   /** Solve for effective stress using Newton's method with bisection.
@@ -83,8 +83,8 @@
    */
   template<typename material_type>
   static
-  double _search(double x1,
-		 double x2,
+  PylithScalar _search(PylithScalar x1,
+		 PylithScalar x2,
 		 material_type* const material);
 
 }; // class EffectiveStress

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/EffectiveStress.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,20 +27,20 @@
 // ----------------------------------------------------------------------
 // Get effective stress from initial guess.
 template<typename material_type>
-double
+PylithScalar
 pylith::materials::EffectiveStress::calculate(
-				 const double effStressInitialGuess,
-				 const double stressScale,
+				 const PylithScalar effStressInitialGuess,
+				 const PylithScalar stressScale,
 				 material_type* const material)
 { // getEffStress
   // Check parameters
   assert(effStressInitialGuess >= 0.0);
   // If initial guess is too low, use stress scale instead.
-  const double xMin = 1.0e-10;
+  const PylithScalar xMin = 1.0e-10;
 
   // Bracket the root.
-  double x1 = 0.0;
-  double x2 = 0.0;
+  PylithScalar x1 = 0.0;
+  PylithScalar x2 = 0.0;
   if (effStressInitialGuess > xMin) {
     x1 = effStressInitialGuess - 0.5 * effStressInitialGuess;
     x2 = effStressInitialGuess + 0.5 * effStressInitialGuess;
@@ -52,7 +52,7 @@
   _bracket(&x1, &x2, material);
 
   // Find effective stress using Newton's method with bisection.
-  const double effStress = _search(x1, x2, material);
+  const PylithScalar effStress = _search(x1, x2, material);
 
   PetscLogFlops(4); // Log flops
 
@@ -63,22 +63,22 @@
 // Bracket effective stress.
 template<typename material_type>
 void
-pylith::materials::EffectiveStress::_bracket(double* px1,
-					     double* px2,
+pylith::materials::EffectiveStress::_bracket(PylithScalar* px1,
+					     PylithScalar* px2,
 					     material_type* const material)
 { // _bracket
   // Arbitrary number of iterations to bracket the root
   const int maxIterations = 50;
 
   // Arbitrary factor by which to increase the brackets.
-  const double bracketFactor = 2;
+  const PylithScalar bracketFactor = 2;
   // Minimum allowed value for effective stress.
-  const double xMin = 0.0;
-  double x1 = *px1;
-  double x2 = *px2;
+  const PylithScalar xMin = 0.0;
+  PylithScalar x1 = *px1;
+  PylithScalar x2 = *px2;
 
-  double funcValue1 = material->effStressFunc(x1);
-  double funcValue2 = material->effStressFunc(x2);
+  PylithScalar funcValue1 = material->effStressFunc(x1);
+  PylithScalar funcValue2 = material->effStressFunc(x2);
 
   int iteration = 0;
   bool bracketed = false;
@@ -111,25 +111,25 @@
 // ----------------------------------------------------------------------
 // Find root using Newton's method with bisection.
 template<typename material_type>
-double
-pylith::materials::EffectiveStress::_search(const double x1,
-					    const double x2,
+PylithScalar
+pylith::materials::EffectiveStress::_search(const PylithScalar x1,
+					    const PylithScalar x2,
 					    material_type* const material)
 { // _search
   // Arbitrary number of iterations to find the root
   const int maxIterations = 100;
 
   // Desired accuracy for root. This is a bit arbitrary for now.
-  const double accuracy = 1.0e-10;
+  const PylithScalar accuracy = 1.0e-10;
 
   // Organize search so that effStressFunc(xLow) is less than zero.
-  double funcValueLow = material->effStressFunc(x1);
-  double funcValueHigh = material->effStressFunc(x2);
+  PylithScalar funcValueLow = material->effStressFunc(x1);
+  PylithScalar funcValueHigh = material->effStressFunc(x2);
   assert(funcValueLow * funcValueHigh <= 0.0);
 
-  double effStress = 0.0;
-  double xLow = 0.0;
-  double xHigh = 0.0;
+  PylithScalar effStress = 0.0;
+  PylithScalar xLow = 0.0;
+  PylithScalar xHigh = 0.0;
   bool converged = false;
 
   if (funcValueLow < 0.0) {
@@ -141,12 +141,12 @@
   } // if/else
 
   effStress = 0.5 * (x1 + x2);
-  double dxPrevious = fabs(x2 - x1);
-  double dx = dxPrevious;
-  double funcValue = 0.0;
-  double funcDeriv = 0.0;
-  double funcXHigh = 0.0;
-  double funcXLow = 0.0;
+  PylithScalar dxPrevious = fabs(x2 - x1);
+  PylithScalar dx = dxPrevious;
+  PylithScalar funcValue = 0.0;
+  PylithScalar funcDeriv = 0.0;
+  PylithScalar funcXHigh = 0.0;
+  PylithScalar funcXLow = 0.0;
   material->effStressFuncDerivFunc(&funcValue, &funcDeriv, effStress);
   int iteration = 0;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -108,16 +108,16 @@
 // Compute properties from values in spatial database.
 void
 pylith::materials::ElasticIsotropic3D::_dbToProperties(
-					   double* const propValues,
-					   const double_array& dbValues)
+					   PylithScalar* const propValues,
+					   const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_ElasticIsotropic3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
     std::ostringstream msg;
@@ -129,8 +129,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -151,15 +151,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::ElasticIsotropic3D::_nondimProperties(double* const values,
+pylith::materials::ElasticIsotropic3D::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticIsotropic3D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -174,15 +174,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::ElasticIsotropic3D::_dimProperties(double* const values,
+pylith::materials::ElasticIsotropic3D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticIsotropic3D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -197,17 +197,17 @@
 // ----------------------------------------------------------------------
 // Compute stress tensor at location from properties.
 void
-pylith::materials::ElasticIsotropic3D::_calcStress(double* const stress,
+pylith::materials::ElasticIsotropic3D::_calcStress(PylithScalar* const stress,
 						   const int stressSize,
-						   const double* properties,
+						   const PylithScalar* properties,
 						   const int numProperties,
-						   const double* stateVars,
+						   const PylithScalar* stateVars,
 						   const int numStateVars,
-						   const double* totalStrain,
+						   const PylithScalar* totalStrain,
 						   const int strainSize,
-						   const double* initialStress,
+						   const PylithScalar* initialStress,
 						   const int initialStressSize,
-						   const double* initialStrain,
+						   const PylithScalar* initialStrain,
 						   const int initialStrainSize,
 						   const bool computeStateVars)
 { // _calcStress
@@ -223,19 +223,19 @@
   assert(0 != initialStrain);
   assert(_ElasticIsotropic3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0*mu;
+  const PylithScalar mu2 = 2.0*mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double s123 = lambda * (e11 + e22 + e33);
+  const PylithScalar s123 = lambda * (e11 + e22 + e33);
 
   stress[0] = s123 + mu2*e11 + initialStress[0];
   stress[1] = s123 + mu2*e22 + initialStress[1];
@@ -251,17 +251,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::ElasticIsotropic3D::_calcElasticConsts(
-					     double* const elasticConsts,
+					     PylithScalar* const elasticConsts,
 					     const int numElasticConsts,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize)
 { // _calcElasticConsts
   assert(0 != elasticConsts);
@@ -276,11 +276,11 @@
   assert(0 != initialStrain);
   assert(_ElasticIsotropic3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
    
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -324,7 +324,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticIsotropic3D::stableTimeStepImplicit(
 					const topology::Mesh& mesh) {
   return pylith::PYLITH_MAXDOUBLE;
@@ -332,11 +332,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticIsotropic3D::_stableTimeStepImplicit(
-				     const double* properties,
+				     const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const
 { // _stableTimeStepImplicit
   return pylith::PYLITH_MAXDOUBLE;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -74,15 +74,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -90,7 +90,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute density from properties.
@@ -99,10 +99,10 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -125,17 +125,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -154,17 +154,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -176,9 +176,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticIsotropic3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,10 +25,10 @@
 // Compute density at location from properties.
 inline
 void
-pylith::materials::ElasticIsotropic3D::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::ElasticIsotropic3D::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/utils/array.hh" // USES double_array, std::vector
+#include "pylith/utils/array.hh" // USES scalar_array, std::vector
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
@@ -141,8 +141,8 @@
 
 // ----------------------------------------------------------------------
 // Compute stress tensor for cell at quadrature points.
-const pylith::double_array&
-pylith::materials::ElasticMaterial::calcStress(const double_array& totalStrain,
+const pylith::scalar_array&
+pylith::materials::ElasticMaterial::calcStress(const scalar_array& totalStrain,
 					       const bool computeStateVars)
 { // calcStress
   const int numQuadPts = _numQuadPts;
@@ -170,9 +170,9 @@
 
 // ----------------------------------------------------------------------
 // Compute derivative of elasticity matrix for cell at quadrature points.
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::materials::ElasticMaterial::calcDerivElastic(
-					       const double_array& totalStrain)
+					       const scalar_array& totalStrain)
 { // calcDerivElastic
   const int numQuadPts = _numQuadPts;
   const int numPropsQuadPt = _numPropsQuadPt;
@@ -202,7 +202,7 @@
 // Update state variables (for next time step).
 void
 pylith::materials::ElasticMaterial::updateStateVars(
-					      const double_array& totalStrain,
+					      const scalar_array& totalStrain,
 					      const int cell)
 { // updateStateVars
   const int numQuadPts = _numQuadPts;
@@ -230,7 +230,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticMaterial::stableTimeStepImplicit(const topology::Mesh& mesh)
 { // stableTimeStepImplicit
   const int numQuadPts = _numQuadPts;
@@ -243,7 +243,7 @@
   assert(_initialStressCell.size() == numQuadPts*_tensorSize);
   assert(_initialStrainCell.size() == numQuadPts*_tensorSize);
 
-  double dtStable = pylith::PYLITH_MAXDOUBLE;
+  PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
 
   // Get cells associated with material
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
@@ -260,7 +260,7 @@
     retrievePropsAndVars(*c_iter);
 
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
-      const double dt = 
+      const PylithScalar dt = 
 	_stableTimeStepImplicit(&_propertiesCell[iQuad*numPropsQuadPt],
 				numPropsQuadPt,
 				&_stateVarsCell[iQuad*numVarsQuadPt],
@@ -323,7 +323,7 @@
   assert(!sieveMesh.isNull());
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates, 
@@ -332,8 +332,8 @@
 
   // Create arrays for querying
   const int tensorSize = _tensorSize;
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
-  double_array stressCell(numQuadPts*tensorSize);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array stressCell(numQuadPts*tensorSize);
 
   // Get cells associated with material
   const ALE::Obj<SieveMesh::label_sequence>& cells = 
@@ -388,8 +388,8 @@
     } // switch
   
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
        c_iter != cellsEnd;
@@ -404,7 +404,7 @@
 #endif
 
     // Dimensionalize coordinates for querying
-    const double_array& quadPtsNonDim = quadrature->quadPts();
+    const scalar_array& quadPtsNonDim = quadrature->quadPts();
     quadPtsGlobal = quadPtsNonDim;
     _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				lengthScale);
@@ -469,7 +469,7 @@
   assert(!sieveMesh.isNull());
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates, 
@@ -478,8 +478,8 @@
 
   // Create arrays for querying
   const int tensorSize = _tensorSize;
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
-  double_array strainCell(numQuadPts*tensorSize);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array strainCell(numQuadPts*tensorSize);
 
   // Get cells associated with material
   const ALE::Obj<SieveMesh::label_sequence>& cells = 
@@ -534,8 +534,8 @@
     } // switch
   
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
     
   for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
        c_iter != cellsEnd;
@@ -550,7 +550,7 @@
 #endif
 
     // Dimensionalize coordinates for querying
-    const double_array& quadPtsNonDim = quadrature->quadPts();
+    const scalar_array& quadPtsNonDim = quadrature->quadPts();
     quadPtsGlobal = quadPtsNonDim;
     _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				lengthScale);
@@ -585,15 +585,15 @@
 // Update stateVars (for next time step).
 void
 pylith::materials::ElasticMaterial::_updateStateVars(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVars
 } // _updateStateVars

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -65,9 +65,9 @@
    * @param vec Input tensor (as vector).
    * @param vecMean Tensor trace divided by spatial_dimension.
    */
-  void calcDeviatoric2D(double* const deviatoric,
-			const double* vec,
-			const double vecMean);
+  void calcDeviatoric2D(PylithScalar* const deviatoric,
+			const PylithScalar* vec,
+			const PylithScalar vecMean);
   
   /** Compute 3D deviatoric stress/strain from vector and mean value.
    *
@@ -75,25 +75,25 @@
    * @param vec Input tensor (as vector).
    * @param vecMean Tensor trace divided by spatial_dimension.
    */
-  void calcDeviatoric3D(double* const deviatoric,
-			const double* vec,
-			const double vecMean);
+  void calcDeviatoric3D(PylithScalar* const deviatoric,
+			const PylithScalar* vec,
+			const PylithScalar vecMean);
   
   /** Compute 2D scalar product of two tensors represented as vectors.
    *
    * @param tensor1 First tensor.
    * @param tensor2 Second tensor.
    */
-  double scalarProduct2D(const double* tensor1,
-			 const double* tensor2) const;
+  PylithScalar scalarProduct2D(const PylithScalar* tensor1,
+			 const PylithScalar* tensor2) const;
   
   /** Compute 3D scalar product of two tensors represented as vectors.
    *
    * @param tensor1 First tensor.
    * @param tensor2 Second tensor.
    */
-  double scalarProduct3D(const double* tensor1,
-			 const double* tensor2) const;
+  PylithScalar scalarProduct3D(const PylithScalar* tensor1,
+			 const PylithScalar* tensor2) const;
   
   /** Set database for initial stress state.
    *
@@ -130,7 +130,7 @@
    *
    * @returns Array of density values at cell's quadrature points.
    */
-  const double_array& calcDensity(void);
+  const scalar_array& calcDensity(void);
   
   /** Get stress tensor at quadrature points. If the state variables
    * are from the previous time step, then the computeStateVars flag
@@ -157,8 +157,8 @@
    *
    * @returns Array of stresses at cell's quadrature points.
    */
-  const double_array&
-  calcStress(const double_array& totalStrain,
+  const scalar_array&
+  calcStress(const scalar_array& totalStrain,
 	     const bool computeStateVars =false);
 
   /** Compute derivative of elasticity matrix for cell at quadrature points.
@@ -187,8 +187,8 @@
    * @param totalStrain Total strain tensor at quadrature points
    *    [numQuadPts][tensorSize]
    */
-  const double_array&
-  calcDerivElastic(const double_array& totalStrain);
+  const scalar_array&
+  calcDerivElastic(const scalar_array& totalStrain);
 
   /** Update state variables (for next time step).
    *
@@ -196,7 +196,7 @@
    *    [numQuadPts][tensorSize]
    * @param cell Finite element cell
    */
-  void updateStateVars(const double_array& totalStrain,
+  void updateStateVars(const scalar_array& totalStrain,
 		       const int cell);
 
   /** Get flag indicating whether material implements an empty
@@ -217,7 +217,7 @@
    * @returns Time step
    */
   virtual
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -245,10 +245,10 @@
    * @param numProperties Number of properties.
    */
   virtual
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars) = 0;
 
   /** Compute stress tensor from properties and state variables. If
@@ -272,17 +272,17 @@
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
   virtual
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars) = 0;
 
@@ -302,17 +302,17 @@
    * @param initialStrainSize Size of initial strain array.
    */
   virtual
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize) = 0;
 
   /** Update state variables (for next time step).
@@ -329,15 +329,15 @@
    * @param initialStrainSize Size of initial strain array.
    */
   virtual
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -350,9 +350,9 @@
    * @returns Time step
    */
   virtual
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const = 0;
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -397,49 +397,49 @@
    * size = numQuadPts * numPropsQuadPt
    * index = iQuadPt * numPropsQuadPt + iPropQuadPt
    */
-  double_array _propertiesCell;
+  scalar_array _propertiesCell;
 
   /** State variables at quadrature points for current cell.
    *
    * size = numQuadPts * numVarsQuadPt
    * index = iQuadPt * numVarsQuadPt + iStateVar
    */
-  double_array _stateVarsCell;
+  scalar_array _stateVarsCell;
 
   /** Initial stress state for current cell.
    *
    * size = numQuadPts * tensorSize
    * index = iQuadPt * tensorSize + iComponent
    */
-  double_array _initialStressCell;
+  scalar_array _initialStressCell;
 
   /** Initial strain state for current cell.
    *
    * size = numQuadPts * tensorSize
    * index = iQuadPt * tensorSize + iComponent
    */
-  double_array _initialStrainCell;
+  scalar_array _initialStrainCell;
 
   /** Density value at quadrature points for current cell.
    *
    * size = numQuadPts
    * index = iQuadPt
    */
-  double_array _densityCell;
+  scalar_array _densityCell;
 
   /** Stress tensor at quadrature points for current cell.
    *
    * size = numQuadPts * tensorSize
    * index = iQuadPt * tensorSize + iStress
    */
-  double_array _stressCell;
+  scalar_array _stressCell;
 
   /** Elasticity matrix at quadrature points for current cell.
    *
    * size = numQuadPts * numElasticConsts
    * index = iQuadPt * numElasticConsts + iConstant
    */
-  double_array _elasticConstsCell;
+  scalar_array _elasticConstsCell;
 
   int _numQuadPts; ///< Number of quadrature points
   const int _numElasticConsts; ///< Number of elastic constants.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticMaterial.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,9 +27,9 @@
 inline
 void
 pylith::materials::ElasticMaterial::calcDeviatoric2D(
-					double* const deviatoric,
-					const double* vec,
-					const double vecMean)
+					PylithScalar* const deviatoric,
+					const PylithScalar* vec,
+					const PylithScalar vecMean)
 {
   deviatoric[0] = vec[0] - vecMean;
   deviatoric[1] = vec[1] - vecMean;
@@ -41,9 +41,9 @@
 inline
 void
 pylith::materials::ElasticMaterial::calcDeviatoric3D(
-					double* const deviatoric,
-					const double* vec,
-					const double vecMean)
+					PylithScalar* const deviatoric,
+					const PylithScalar* vec,
+					const PylithScalar vecMean)
 {
   deviatoric[0] = vec[0] -vecMean;
   deviatoric[1] = vec[1] -vecMean;
@@ -57,11 +57,11 @@
 // Compute 2D scalar product of two tensors represented as vectors.
 // 6 FLOPs per call.
 inline
-double
-pylith::materials::ElasticMaterial::scalarProduct2D(const double* tensor1,
-						    const double* tensor2) const
+PylithScalar
+pylith::materials::ElasticMaterial::scalarProduct2D(const PylithScalar* tensor1,
+						    const PylithScalar* tensor2) const
 { // scalarProduct2D
-  const double scalarProduct = tensor1[0] * tensor2[0] +
+  const PylithScalar scalarProduct = tensor1[0] * tensor2[0] +
     tensor1[1] * tensor2[1] + 2.0 * tensor1[2] * tensor2[2];
   return scalarProduct;
 
@@ -71,11 +71,11 @@
 // Compute 3D scalar product of two tensors represented as vectors.
 // 12 FLOPs per call.
 inline
-double
-pylith::materials::ElasticMaterial::scalarProduct3D(const double* tensor1,
-						    const double* tensor2) const
+PylithScalar
+pylith::materials::ElasticMaterial::scalarProduct3D(const PylithScalar* tensor1,
+						    const PylithScalar* tensor2) const
 { // scalarProduct3D
-  const double scalarProduct = tensor1[0] * tensor2[0] +
+  const PylithScalar scalarProduct = tensor1[0] * tensor2[0] +
     tensor1[1] * tensor2[1] +
     tensor1[2] * tensor2[2] +
     2.0 * (tensor1[3] * tensor2[3] +
@@ -124,7 +124,7 @@
 // ----------------------------------------------------------------------
 // Compute density for cell at quadrature points.
 inline
-const pylith::double_array&
+const pylith::scalar_array&
 pylith::materials::ElasticMaterial::calcDensity(void)
 { // calcDensity
   const int numQuadPts = _numQuadPts;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -108,16 +108,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::ElasticPlaneStrain::_dbToProperties(
-				          double* const propValues,
-                                          const double_array& dbValues)
+				          PylithScalar* const propValues,
+                                          const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_ElasticPlaneStrain::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
     std::ostringstream msg;
@@ -129,8 +129,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -151,15 +151,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::ElasticPlaneStrain::_nondimProperties(double* const values,
+pylith::materials::ElasticPlaneStrain::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticPlaneStrain::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -174,15 +174,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::ElasticPlaneStrain::_dimProperties(double* const values,
+pylith::materials::ElasticPlaneStrain::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticPlaneStrain::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -197,10 +197,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::ElasticPlaneStrain::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::ElasticPlaneStrain::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // calcDensity
   assert(0 != density);
@@ -214,17 +214,17 @@
 // ----------------------------------------------------------------------
 // Compute stress tensor at location from properties.
 void
-pylith::materials::ElasticPlaneStrain::_calcStress(double* const stress,
+pylith::materials::ElasticPlaneStrain::_calcStress(PylithScalar* const stress,
 						   const int stressSize,
-						   const double* properties,
+						   const PylithScalar* properties,
 						   const int numProperties,
-						   const double* stateVars,
+						   const PylithScalar* stateVars,
 						   const int numStateVars,
-						   const double* totalStrain,
+						   const PylithScalar* totalStrain,
 						   const int strainSize,
-						   const double* initialStress,
+						   const PylithScalar* initialStress,
 						   const int initialStressSize,
-						   const double* initialStrain,
+						   const PylithScalar* initialStrain,
 						   const int initialStrainSize,
 						   const bool computeStateVars)
 { // _calcStress
@@ -240,17 +240,17 @@
   assert(0 != initialStrain);
   assert(_ElasticPlaneStrain::tensorSize == initialStrainSize);
 
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0*mu;
+  const PylithScalar mu2 = 2.0*mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e12 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e12 = totalStrain[2] - initialStrain[2];
 
-  const double s12 = lambda * (e11 + e22);
+  const PylithScalar s12 = lambda * (e11 + e22);
 
   stress[0] = s12 + mu2*e11 + initialStress[0];
   stress[1] = s12 + mu2*e22 + initialStress[1];
@@ -263,17 +263,17 @@
 // Compute elastic constants at location from properties.
 void
 pylith::materials::ElasticPlaneStrain::_calcElasticConsts(
-					     double* const elasticConsts,
+					     PylithScalar* const elasticConsts,
 					     const int numElasticConsts,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize)
 { // calcElasticConsts
   assert(0 != elasticConsts);
@@ -288,12 +288,12 @@
   assert(0 != initialStrain);
   assert(_ElasticPlaneStrain::tensorSize == initialStrainSize);
  
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
    
   elasticConsts[0] = lambda2mu; // C1111
   elasticConsts[1] = lambda; // C1122
@@ -310,7 +310,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticPlaneStrain::stableTimeStepImplicit(
 					const topology::Mesh& mesh) {
   return pylith::PYLITH_MAXDOUBLE;
@@ -318,11 +318,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticPlaneStrain::_stableTimeStepImplicit(
-				     const double* properties,
+				     const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const
 { // _stableTimeStepImplicit
   return pylith::PYLITH_MAXDOUBLE;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStrain.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -74,15 +74,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -90,7 +90,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute density from properties.
@@ -99,10 +99,10 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -125,17 +125,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -154,17 +154,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -176,9 +176,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -108,16 +108,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::ElasticPlaneStress::_dbToProperties(
-					  double* propValues,
-					  const double_array& dbValues)
+					  PylithScalar* propValues,
+					  const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_ElasticPlaneStress::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
     std::ostringstream msg;
@@ -129,8 +129,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -151,15 +151,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::ElasticPlaneStress::_nondimProperties(double* const values,
+pylith::materials::ElasticPlaneStress::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticPlaneStress::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -174,15 +174,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::ElasticPlaneStress::_dimProperties(double* const values,
+pylith::materials::ElasticPlaneStress::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticPlaneStress::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -197,10 +197,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::ElasticPlaneStress::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::ElasticPlaneStress::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // calcDensity
   assert(0 != density);
@@ -214,17 +214,17 @@
 // ----------------------------------------------------------------------
 // Compute stress tensor at location from properties.
 void
-pylith::materials::ElasticPlaneStress::_calcStress(double* const stress,
+pylith::materials::ElasticPlaneStress::_calcStress(PylithScalar* const stress,
 						   const int stressSize,
-						   const double* properties,
+						   const PylithScalar* properties,
 						   const int numProperties,
-						   const double* stateVars,
+						   const PylithScalar* stateVars,
 						   const int numStateVars,
-						   const double* totalStrain,
+						   const PylithScalar* totalStrain,
 						   const int strainSize,
-						   const double* initialStress,
+						   const PylithScalar* initialStress,
 						   const int initialStressSize,
-						   const double* initialStrain,
+						   const PylithScalar* initialStrain,
 						   const int initialStrainSize,
 						   const bool computeStateVars)
 { // _calcStress
@@ -240,17 +240,17 @@
   assert(0 != initialStrain);
   assert(_ElasticPlaneStress::tensorSize == initialStrainSize);
 
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
-  const double lambdamu = lambda + mu;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
+  const PylithScalar lambdamu = lambda + mu;
   
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e12 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e12 = totalStrain[2] - initialStrain[2];
 
   stress[0] = 
     (2.0*mu2*lambdamu * e11 + mu2*lambda * e22) / lambda2mu + initialStress[0];
@@ -265,17 +265,17 @@
 // Compute density at location from properties.
 void
 pylith::materials::ElasticPlaneStress::_calcElasticConsts(
-					     double* const elasticConsts,
+					     PylithScalar* const elasticConsts,
 					     const int numElasticConsts,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize)
 { // calcElasticConsts
   assert(0 != elasticConsts);
@@ -290,13 +290,13 @@
   assert(0 != initialStrain);
   assert(_ElasticPlaneStress::tensorSize == initialStrainSize);
  
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
-  const double c11 = 2.0 * mu2 * (lambda + mu) / lambda2mu;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
+  const PylithScalar c11 = 2.0 * mu2 * (lambda + mu) / lambda2mu;
 
   elasticConsts[0] = c11; // C1111
   elasticConsts[1] = mu2 * lambda / lambda2mu; // C1122
@@ -313,7 +313,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticPlaneStress::stableTimeStepImplicit(
 					const topology::Mesh& mesh) {
   return pylith::PYLITH_MAXDOUBLE;
@@ -321,11 +321,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticPlaneStress::_stableTimeStepImplicit(
-				     const double* properties,
+				     const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const
 { // _stableTimeStepImplicit
   return pylith::PYLITH_MAXDOUBLE;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticPlaneStress.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,7 +63,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -76,15 +76,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -92,7 +92,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute density from properties.
@@ -101,10 +101,10 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -127,17 +127,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -156,17 +156,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -178,9 +178,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -108,16 +108,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::ElasticStrain1D::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_ElasticStrain1D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
     std::ostringstream msg;
@@ -129,8 +129,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -151,15 +151,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::ElasticStrain1D::_nondimProperties(double* const values,
+pylith::materials::ElasticStrain1D::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticStrain1D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -174,15 +174,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::ElasticStrain1D::_dimProperties(double* const values,
+pylith::materials::ElasticStrain1D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticStrain1D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -197,10 +197,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::ElasticStrain1D::_calcDensity(double* const density,
-						 const double* properties,
+pylith::materials::ElasticStrain1D::_calcDensity(PylithScalar* const density,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* stateVars,
+						 const PylithScalar* stateVars,
 						 const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -214,17 +214,17 @@
 // ----------------------------------------------------------------------
 // Compute stress tensor at location from properties.
 void
-pylith::materials::ElasticStrain1D::_calcStress(double* const stress,
+pylith::materials::ElasticStrain1D::_calcStress(PylithScalar* const stress,
 						const int stressSize,
-						const double* properties,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars,
-						const double* totalStrain,
+						const PylithScalar* totalStrain,
 						const int strainSize,
-						const double* initialStress,
+						const PylithScalar* initialStress,
 						const int initialStressSize,
-						const double* initialStrain,
+						const PylithScalar* initialStrain,
 						const int initialStrainSize,
 						const bool computeStateVars)
 { // _calcStress
@@ -240,11 +240,11 @@
   assert(0 != initialStrain);
   assert(_ElasticStrain1D::tensorSize == initialStrainSize);
 
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
   stress[0] = (lambda + 2.0*mu) * e11 + initialStress[0];
 
   PetscLogFlops(5);
@@ -254,17 +254,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::ElasticStrain1D::_calcElasticConsts(
-					     double* const elasticConsts,
+					     PylithScalar* const elasticConsts,
 					     const int numElasticConsts,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize)
 { // _calcElasticConsts
   assert(0 != elasticConsts);
@@ -279,9 +279,9 @@
   assert(0 != initialStrain);
   assert(_ElasticStrain1D::tensorSize == initialStrainSize);
  
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
   elasticConsts[0] = lambda + 2.0*mu;
 
@@ -290,7 +290,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticStrain1D::stableTimeStepImplicit(
 					const topology::Mesh& mesh) {
   return pylith::PYLITH_MAXDOUBLE;
@@ -298,11 +298,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticStrain1D::_stableTimeStepImplicit(
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars) const
 { // _stableTimeStepImplicit
   return pylith::PYLITH_MAXDOUBLE;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStrain1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -62,7 +62,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -75,15 +75,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -91,7 +91,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute density from properties.
@@ -100,10 +100,10 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -126,17 +126,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -155,17 +155,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -177,9 +177,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -108,16 +108,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::ElasticStress1D::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_ElasticStress1D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
     std::ostringstream msg;
@@ -129,8 +129,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -151,15 +151,15 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::ElasticStress1D::_nondimProperties(double* const values,
+pylith::materials::ElasticStress1D::_nondimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticStress1D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -174,15 +174,15 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::ElasticStress1D::_dimProperties(double* const values,
+pylith::materials::ElasticStress1D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _ElasticStress1D::numProperties);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -197,10 +197,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::ElasticStress1D::_calcDensity(double* const density,
-						 const double* properties,
+pylith::materials::ElasticStress1D::_calcDensity(PylithScalar* const density,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* stateVars,
+						 const PylithScalar* stateVars,
 						 const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -214,17 +214,17 @@
 // ----------------------------------------------------------------------
 // Compute stress tensor at location from properties.
 void
-pylith::materials::ElasticStress1D::_calcStress(double* const stress,
+pylith::materials::ElasticStress1D::_calcStress(PylithScalar* const stress,
 						const int stressSize,
-						const double* properties,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars,
-						const double* totalStrain,
+						const PylithScalar* totalStrain,
 						const int strainSize,
-						const double* initialStress,
+						const PylithScalar* initialStress,
 						const int initialStressSize,
-						const double* initialStrain,
+						const PylithScalar* initialStrain,
 						const int initialStrainSize,
 						const bool computeStateVars)
 { // _calcStress
@@ -240,11 +240,11 @@
   assert(0 != initialStrain);
   assert(_ElasticStress1D::tensorSize == initialStrainSize);
 
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
   stress[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu) * e11 + initialStress[0];
 
   PetscLogFlops(9);
@@ -254,17 +254,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::ElasticStress1D::_calcElasticConsts(
-					     double* const elasticConsts,
+					     PylithScalar* const elasticConsts,
 					     const int numElasticConsts,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize)
 { // _calcElasticConsts
   assert(0 != elasticConsts);
@@ -279,9 +279,9 @@
   assert(0 != initialStrain);
   assert(_ElasticStress1D::tensorSize == initialStrainSize);
  
-  const double density = properties[p_density];
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar density = properties[p_density];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
   elasticConsts[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu);
 
@@ -290,7 +290,7 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticStress1D::stableTimeStepImplicit(
 					const topology::Mesh& mesh) {
   return pylith::PYLITH_MAXDOUBLE;
@@ -298,11 +298,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::ElasticStress1D::_stableTimeStepImplicit(
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars) const
 { // _stableTimeStepImplicit
   return pylith::PYLITH_MAXDOUBLE;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ElasticStress1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,7 +63,7 @@
    * @param mesh Finite-element mesh.
    * @returns Time step
    */
-  double stableTimeStepImplicit(const topology::Mesh& mesh);
+  PylithScalar stableTimeStepImplicit(const topology::Mesh& mesh);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -76,15 +76,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -92,7 +92,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute density from properties.
@@ -101,10 +101,10 @@
    * @param properties Properties at location.
    * @param numProperties Number of properties.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -127,17 +127,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -156,17 +156,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -178,9 +178,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "ViscoelasticMaxwell.hh" // USES computeVisStrain
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -236,16 +236,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::GenMaxwellIsotropic3D::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_GenMaxwellIsotropic3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
   const int numMaxwellModels = _GenMaxwellIsotropic3D::numMaxwellModels;
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
@@ -258,8 +258,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -275,7 +275,7 @@
   propValues[p_muEff] = mu;
   propValues[p_lambdaEff] = lambda;
 
-  double visFrac = 0.0;
+  PylithScalar visFrac = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) 
     visFrac += dbValues[db_shearRatio + imodel];
   if (visFrac > 1.0) {
@@ -291,10 +291,10 @@
 
   // Loop over number of Maxwell models.
   for (int imodel =0; imodel < numMaxwellModels; ++imodel) {
-    double muRatio = dbValues[db_shearRatio + imodel];
-    double viscosity = dbValues[db_viscosity + imodel];
-    double muFac = muRatio*mu;
-    double maxwellTime = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar muRatio = dbValues[db_shearRatio + imodel];
+    PylithScalar viscosity = dbValues[db_viscosity + imodel];
+    PylithScalar muFac = muRatio*mu;
+    PylithScalar maxwellTime = pylith::PYLITH_MAXDOUBLE;
     if (muFac > 0.0)
       maxwellTime = viscosity / muFac;
     if (muRatio < 0.0 || viscosity < 0.0 || muFac < 0.0 || maxwellTime < 0.0) {
@@ -316,16 +316,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::GenMaxwellIsotropic3D::_nondimProperties(double* const values,
+pylith::materials::GenMaxwellIsotropic3D::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
   values[p_muEff] = 
@@ -342,16 +342,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::GenMaxwellIsotropic3D::_dimProperties(double* const values,
+pylith::materials::GenMaxwellIsotropic3D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
   values[p_muEff] = 
@@ -369,8 +369,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::GenMaxwellIsotropic3D::_dbToStateVars(
-					double* const stateValues,
-					const double_array& dbValues)
+					PylithScalar* const stateValues,
+					const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -389,10 +389,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::GenMaxwellIsotropic3D::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::GenMaxwellIsotropic3D::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -407,17 +407,17 @@
 // material.
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcStressElastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressElastic
@@ -434,19 +434,19 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellIsotropic3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar mu2 = 2.0 * mu;
 
   // :TODO: Need to consider initial state variables????
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double s123 = lambda * (e11 + e22 + e33);
+  const PylithScalar s123 = lambda * (e11 + e22 + e33);
 
   stress[0] = s123 + mu2*e11 + initialStress[0];
   stress[1] = s123 + mu2*e22 + initialStress[1];
@@ -464,17 +464,17 @@
 // material.
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcStressViscoelastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -494,29 +494,29 @@
   const int numMaxwellModels = _GenMaxwellIsotropic3D::numMaxwellModels;
   const int tensorSize = _tensorSize;
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double muRatio[numMaxwellModels] = {
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar muRatio[numMaxwellModels] = {
     properties[p_shearRatio  ],
     properties[p_shearRatio+1],
     properties[p_shearRatio+2]
   };
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
 
   // Initial stress and strain values
-  const double meanStrainInitial =
+  const PylithScalar meanStrainInitial =
     (initialStrain[0] + initialStrain[1] + initialStrain[2])/3.0;
-  const double meanStressInitial =
+  const PylithScalar meanStressInitial =
     (initialStress[0] + initialStress[1] + initialStress[2])/3.0;
-  const double devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
+  const PylithScalar devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
 				     initialStrain[1] - meanStrainInitial,
 				     initialStrain[2] - meanStrainInitial,
 				     initialStrain[3],
 				     initialStrain[4],
 				     initialStrain[5]};
-  const double devStressInitial[] = {initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = {initialStress[0] - meanStressInitial,
 				     initialStress[1] - meanStressInitial,
 				     initialStress[2] - meanStressInitial,
 				     initialStress[3],
@@ -524,20 +524,20 @@
 				     initialStress[5]};
   // :TODO: Need to determine how to incorporate state variables
   // Mean stress and strain for time t + dt
-  const double meanStrainTpdt = (totalStrain[0] +
+  const PylithScalar meanStrainTpdt = (totalStrain[0] +
 				 totalStrain[1] +
 				 totalStrain[2]) / 3.0;
   
-  const double meanStressTpdt = 3.0 * bulkModulus *
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus *
     (meanStrainTpdt - meanStrainInitial) + meanStressInitial;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
-  double visFrac = 0.0;
+  PylithScalar visFrac = 0.0;
   for (int imodel=0; imodel < numMaxwellModels; ++imodel) 
     visFrac += muRatio[imodel];
   assert(visFrac <= 1.0);
-  const double elasFrac = 1.0 - visFrac;
+  const PylithScalar elasFrac = 1.0 - visFrac;
 
   PetscLogFlops(23 + numMaxwellModels);
 
@@ -559,8 +559,8 @@
   } // else
 
   // Compute new stresses
-  double devStrainTpdt = 0.0;
-  double devStressTpdt = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStressTpdt = 0.0;
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStrainTpdt = totalStrain[iComp] - diag[iComp] * meanStrainTpdt -
       devStrainInitial[iComp];
@@ -581,17 +581,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcElasticConstsElastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -607,11 +607,11 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellIsotropic3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -658,17 +658,17 @@
 // as a viscoelastic material.
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcElasticConstsViscoelastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -686,18 +686,18 @@
 
   const int numMaxwellModels = _GenMaxwellIsotropic3D::numMaxwellModels;
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
   // Compute viscous contribution.
-  double visFac = 0.0;
-  double visFrac = 0.0;
-  double shearRatio = 0.0;
+  PylithScalar visFac = 0.0;
+  PylithScalar visFrac = 0.0;
+  PylithScalar shearRatio = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) {
     shearRatio = properties[p_shearRatio + imodel];
-    double maxwellTime = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar maxwellTime = pylith::PYLITH_MAXDOUBLE;
     visFrac += shearRatio;
     if (shearRatio != 0.0) {
       maxwellTime = properties[p_maxwellTime + imodel];
@@ -705,8 +705,8 @@
 	shearRatio*ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
     } // if
   } // for
-  double elasFrac = 1.0 - visFrac;
-  double shearFac = elasFrac + visFac;
+  PylithScalar elasFrac = 1.0 - visFrac;
+  PylithScalar shearFac = elasFrac + visFac;
 
   elasticConsts[ 0] = bulkModulus + 4.0*mu/3.0 * shearFac; // C1111
   elasticConsts[ 1] = bulkModulus - 2.0*mu/3.0 * shearFac; // C1122
@@ -762,15 +762,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellIsotropic3D::_updateStateVarsElastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -786,24 +786,24 @@
 
   const int tensorSize = _tensorSize;
 
-  const double strainTpdt[] = {totalStrain[0] - initialStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0] - initialStrain[0],
 			       totalStrain[1] - initialStrain[1],
 			       totalStrain[2] - initialStrain[2],
 			       totalStrain[3] - initialStrain[3],
 			       totalStrain[4] - initialStrain[4],
 			       totalStrain[5] - initialStrain[5]};
-  const double meanStrainTpdt =
+  const PylithScalar meanStrainTpdt =
     (strainTpdt[0] + strainTpdt[1] + strainTpdt[2])/3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Update total strain
   for (int iComp=0; iComp < tensorSize; ++iComp)
     stateVars[s_totalStrain+iComp] = totalStrain[iComp];
 
   // Initialize all viscous strains to deviatoric elastic strains.
-  double devStrain = 0.0;
-  double shearRatio = 0.0;
+  PylithScalar devStrain = 0.0;
+  PylithScalar shearRatio = 0.0;
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStrain = strainTpdt[iComp] - diag[iComp] * meanStrainTpdt;
     // Maxwell model 1
@@ -822,15 +822,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellIsotropic3D::_updateStateVarsViscoelastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -870,11 +870,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::GenMaxwellIsotropic3D::_stableTimeStepImplicit(
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -882,12 +882,12 @@
   assert(0 != stateVars);
   assert(_numVarsQuadPt == numStateVars);
 
-  double dtStable = pylith::PYLITH_MAXDOUBLE;
+  PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
 
   const int numMaxwellModels = _GenMaxwellIsotropic3D::numMaxwellModels;
   for (int i=0; i < numMaxwellModels; ++i) {
-    const double maxwellTime = properties[p_maxwellTime+i];
-    const double dt = 0.2*maxwellTime;
+    const PylithScalar maxwellTime = properties[p_maxwellTime+i];
+    const PylithScalar dt = 0.2*maxwellTime;
     if (dt < dtStable)
       dtStable = dt;
   } // for
@@ -900,15 +900,15 @@
 // Compute viscous strain for current time step.
 void
 pylith::materials::GenMaxwellIsotropic3D::_computeStateVars(
-					       const double* stateVars,
+					       const PylithScalar* stateVars,
 					       const int numStateVars,
-					       const double* properties,
+					       const PylithScalar* properties,
 					       const int numProperties,
-					       const double* totalStrain,
+					       const PylithScalar* totalStrain,
 					       const int strainSize,
-					       const double* initialStress,
+					       const PylithScalar* initialStress,
 					       const int initialStressSize,
-					       const double* initialStrain,
+					       const PylithScalar* initialStrain,
 					       const int initialStrainSize)
 { // _computeStateVars
   assert(0 != stateVars);
@@ -925,23 +925,23 @@
   const int tensorSize = _tensorSize;
   const int numMaxwellModels = _GenMaxwellIsotropic3D::numMaxwellModels;
 
-  const double muRatio[numMaxwellModels] = {
+  const PylithScalar muRatio[numMaxwellModels] = {
     properties[p_shearRatio  ],
     properties[p_shearRatio+1],
     properties[p_shearRatio+2]
   };
-  const double maxwellTime[numMaxwellModels] = {
+  const PylithScalar maxwellTime[numMaxwellModels] = {
     properties[p_maxwellTime  ],
     properties[p_maxwellTime+1],
     properties[p_maxwellTime+2]
   };
 
   // :TODO: Need to account for initial values for state variables
-  const double meanStrainTpdt =
+  const PylithScalar meanStrainTpdt =
     (totalStrain[0] + totalStrain[1] + totalStrain[2])/3.0;
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
-  const double meanStrainT = 
+  const PylithScalar meanStrainT = 
     ( stateVars[s_totalStrain+0] +
       stateVars[s_totalStrain+1] +
       stateVars[s_totalStrain+2] ) / 3.0;
@@ -949,16 +949,16 @@
   PetscLogFlops(6);
 
   // Compute Prony series terms
-  double_array dq(numMaxwellModels);
+  scalar_array dq(numMaxwellModels);
   dq = 0.0;
   for (int i=0; i < numMaxwellModels; ++i)
     if (muRatio[i] != 0.0)
       dq[i] = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime[i]);
 
   // Compute new viscous strains
-  double devStrainTpdt = 0.0;
-  double devStrainT = 0.0;
-  double deltaStrain = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStrainT = 0.0;
+  PylithScalar deltaStrain = 0.0;
   
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStrainTpdt = totalStrain[iComp] - diag[iComp] * meanStrainTpdt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -86,15 +86,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -102,7 +102,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -110,8 +110,8 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   // Note: We do not need to dimensionalize or nondimensionalize state
   // variables because there are strains, which are dimensionless.
@@ -125,10 +125,10 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -150,17 +150,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -179,17 +179,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Update state variables (for next time step).
@@ -205,15 +205,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -225,9 +225,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -235,46 +235,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::GenMaxwellIsotropic3D::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::GenMaxwellIsotropic3D::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::GenMaxwellIsotropic3D::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -296,17 +296,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -326,17 +326,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -356,17 +356,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-				 const double* initialStress,
+				 const PylithScalar* initialStress,
 				 const int initialStressSize,
-				 const double* initialStrain,
+				 const PylithScalar* initialStrain,
 				 const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -385,17 +385,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-				      const double* initialStress,
+				      const PylithScalar* initialStress,
 				      const int initialStressSize,
-				      const double* initialStrain,
+				      const PylithScalar* initialStrain,
 				      const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -411,15 +411,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -435,15 +435,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute viscous strains (state variables) for the current time
@@ -460,22 +460,22 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _computeStateVars(const double* stateVars,
+  void _computeStateVars(const PylithScalar* stateVars,
 			 const int numStateVars,
-			 const double* properties,
+			 const PylithScalar* properties,
 			 const int numProperties,
-			 const double* totalStrain,
+			 const PylithScalar* totalStrain,
 			 const int strainSize,
-			 const double* initialStress,
+			 const PylithScalar* initialStress,
 			 const int initialStressSize,
-			 const double* initialStrain,
+			 const PylithScalar* initialStrain,
 			 const int initialStrainSize);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
   /// Viscous strain array.
-  double_array _viscousStrain;
+  scalar_array _viscousStrain;
 
   /// Method to use for _calcElasticConsts().
   calcElasticConsts_fn_type _calcElasticConstsFn;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellIsotropic3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::GenMaxwellIsotropic3D::timeStep(const double dt) {
+pylith::materials::GenMaxwellIsotropic3D::timeStep(const PylithScalar dt) {
   // Jacobian needs to be reformed if the time step size changes.
   if (_dt > 0.0 && dt != _dt)
     _needNewJacobian = true;
@@ -37,17 +37,17 @@
 inline
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcStress(
-					      double* const stress,
+					      PylithScalar* const stress,
 					      const int stressSize,
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars,
-					      const double* totalStrain,
+					      const PylithScalar* totalStrain,
 					      const int strainSize,
-					      const double* initialStress,
+					      const PylithScalar* initialStress,
 					      const int initialStressSize,
-					      const double* initialStrain,
+					      const PylithScalar* initialStrain,
 					      const int initialStrainSize,
 					      const bool computeStateVars) {
   assert(0 != _calcStressFn);
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::GenMaxwellIsotropic3D::_calcElasticConsts(
-					      double* const elasticConsts,
+					      PylithScalar* const elasticConsts,
 					      const int numElasticConsts,
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars,
-					      const double* totalStrain,
+					      const PylithScalar* totalStrain,
 					      const int strainSize,
-					      const double* initialStress,
+					      const PylithScalar* initialStress,
 					      const int initialStressSize,
-					      const double* initialStrain,
+					      const PylithScalar* initialStrain,
 					      const int initialStrainSize) {
   assert(0 != _calcElasticConstsFn);
   CALL_MEMBER_FN(*this, _calcElasticConstsFn)(elasticConsts, numElasticConsts,
@@ -89,15 +89,15 @@
 inline
 void
 pylith::materials::GenMaxwellIsotropic3D::_updateStateVars(
-					     double* const stateVars,
+					     PylithScalar* const stateVars,
 					     const int numStateVars,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize) {
   assert(0 != _updateStateVarsFn);
   CALL_MEMBER_FN(*this, _updateStateVarsFn)(stateVars, numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "ViscoelasticMaxwell.hh" // USES computeVisStrain
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -231,16 +231,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::GenMaxwellPlaneStrain::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_GenMaxwellPlaneStrain::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
   const int numMaxwellModels = _GenMaxwellPlaneStrain::numMaxwellModels;
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
@@ -253,8 +253,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs * vs;
-  const double lambda = density * vp * vp - 2.0 * mu;
+  const PylithScalar mu = density * vs * vs;
+  const PylithScalar lambda = density * vp * vp - 2.0 * mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -270,7 +270,7 @@
   propValues[p_muEff] = mu;
   propValues[p_lambdaEff] = lambda;
 
-  double visFrac = 0.0;
+  PylithScalar visFrac = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) 
     visFrac += dbValues[db_shearRatio + imodel];
   if (visFrac > 1.0) {
@@ -286,10 +286,10 @@
 
   // Loop over number of Maxwell models.
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) {
-    double muRatio = dbValues[db_shearRatio + imodel];
-    double viscosity = dbValues[db_viscosity + imodel];
-    double muFac = muRatio * mu;
-    double maxwellTime = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar muRatio = dbValues[db_shearRatio + imodel];
+    PylithScalar viscosity = dbValues[db_viscosity + imodel];
+    PylithScalar muFac = muRatio * mu;
+    PylithScalar maxwellTime = pylith::PYLITH_MAXDOUBLE;
     if (muFac > 0.0)
       maxwellTime = viscosity / muFac;
     if (muRatio < 0.0 || viscosity < 0.0 || muFac < 0.0 || maxwellTime < 0.0) {
@@ -311,16 +311,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::GenMaxwellPlaneStrain::_nondimProperties(double* const values,
+pylith::materials::GenMaxwellPlaneStrain::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
   values[p_muEff] = 
@@ -337,16 +337,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::GenMaxwellPlaneStrain::_dimProperties(double* const values,
+pylith::materials::GenMaxwellPlaneStrain::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
   values[p_muEff] = 
@@ -364,8 +364,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::GenMaxwellPlaneStrain::_dbToStateVars(
-					double* const stateValues,
-					const double_array& dbValues)
+					PylithScalar* const stateValues,
+					const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -385,14 +385,14 @@
 // Nondimensionalize state variables.
 void
 pylith::materials::GenMaxwellPlaneStrain::_nondimStateVars(
-		                            double* const values,
+		                            PylithScalar* const values,
 		                            const int nvalues) const
 { // _nondimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->nondimensionalize(&values[s_stressZZInitial], 1, pressureScale);
 
   PetscLogFlops(1);
@@ -402,14 +402,14 @@
 // Dimensionalize state variables.
 void
 pylith::materials::GenMaxwellPlaneStrain::_dimStateVars(
-						double* const values,
+						PylithScalar* const values,
 						const int nvalues) const
 { // _dimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->dimensionalize(&values[s_stressZZInitial], 1, pressureScale);
 
   PetscLogFlops(1);
@@ -418,10 +418,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::GenMaxwellPlaneStrain::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::GenMaxwellPlaneStrain::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -436,17 +436,17 @@
 // material.
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcStressElastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressElastic
@@ -463,16 +463,16 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellPlaneStrain::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar mu2 = 2.0 * mu;
 
   // :TODO: Need to consider initial state variables????
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e12 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e12 = totalStrain[2] - initialStrain[2];
   
-  const double s12 = lambda * (e11 + e22);
+  const PylithScalar s12 = lambda * (e11 + e22);
 
   stress[0] = s12 + mu2 * e11 + initialStress[0];
   stress[1] = s12 + mu2 * e22 + initialStress[1];
@@ -487,17 +487,17 @@
 // material.
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcStressViscoelastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -517,41 +517,41 @@
   const int numMaxwellModels = _GenMaxwellPlaneStrain::numMaxwellModels;
   const int tensorSize = _GenMaxwellPlaneStrain::tensorSize;
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double muRatio[numMaxwellModels] = {
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar muRatio[numMaxwellModels] = {
     properties[p_shearRatio  ],
     properties[p_shearRatio+1],
     properties[p_shearRatio+2]
   };
-  const double stressZZInitial = stateVars[s_stressZZInitial];
+  const PylithScalar stressZZInitial = stateVars[s_stressZZInitial];
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
 
   // Initial stress and strain values
-  const double meanStrainInitial = (initialStrain[0] + initialStrain[1]) / 3.0;
-  const double meanStressInitial = (initialStress[0] + initialStress[1] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] + initialStrain[1]) / 3.0;
+  const PylithScalar meanStressInitial = (initialStress[0] + initialStress[1] +
 				    stressZZInitial) / 3.0;
-  const double devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
+  const PylithScalar devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
 				     initialStrain[1] - meanStrainInitial,
 				     initialStrain[2]};
-  const double devStressInitial[] = {initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = {initialStress[0] - meanStressInitial,
 				     initialStress[1] - meanStressInitial,
 				     initialStress[2]};
 
   // Mean stress and strain for t + dt
-  const double meanStrainTpdt = (totalStrain[0] + totalStrain[1]) / 3.0;
-  const double meanStressTpdt = 3.0 * bulkModulus *
+  const PylithScalar meanStrainTpdt = (totalStrain[0] + totalStrain[1]) / 3.0;
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus *
     (meanStrainTpdt - meanStrainInitial) + meanStressInitial;
 
-  const double diag[] = { 1.0, 1.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 0.0 };
   
-  double visFrac = 0.0;
+  PylithScalar visFrac = 0.0;
   for (int imodel=0; imodel < numMaxwellModels; ++imodel) 
     visFrac += muRatio[imodel];
   assert(visFrac <= 1.0);
-  const double elasFrac = 1.0 - visFrac;
+  const PylithScalar elasFrac = 1.0 - visFrac;
 
   PetscLogFlops(18 + numMaxwellModels);
 
@@ -573,8 +573,8 @@
   } // else
 
   // Compute new stresses
-  double devStrainTpdt = 0.0;
-  double devStressTpdt = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStressTpdt = 0.0;
   const int visIndex[] = {0, 1, 3};
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStrainTpdt = totalStrain[iComp] - diag[iComp] * meanStrainTpdt -
@@ -596,17 +596,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcElasticConstsElastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -622,11 +622,11 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellPlaneStrain::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -646,17 +646,17 @@
 // as a viscoelastic material.
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcElasticConstsViscoelastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -674,18 +674,18 @@
 
   const int numMaxwellModels = _GenMaxwellPlaneStrain::numMaxwellModels;
 
-  const double mu = properties[p_muEff];
-  const double lambda = properties[p_lambdaEff];
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar lambda = properties[p_lambdaEff];
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
   // Compute viscous contribution.
-  double visFac = 0.0;
-  double visFrac = 0.0;
-  double shearRatio = 0.0;
+  PylithScalar visFac = 0.0;
+  PylithScalar visFrac = 0.0;
+  PylithScalar shearRatio = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) {
     shearRatio = properties[p_shearRatio + imodel];
-    double maxwellTime = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar maxwellTime = pylith::PYLITH_MAXDOUBLE;
     visFrac += shearRatio;
     if (shearRatio != 0.0) {
       maxwellTime = properties[p_maxwellTime + imodel];
@@ -693,8 +693,8 @@
 	shearRatio * ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
     } // if
   } // for
-  double elasFrac = 1.0 - visFrac;
-  double shearFac = elasFrac + visFac;
+  PylithScalar elasFrac = 1.0 - visFrac;
+  PylithScalar shearFac = elasFrac + visFac;
 
   elasticConsts[ 0] = bulkModulus + 4.0 * mu / 3.0 * shearFac; // C1111
   elasticConsts[ 1] = bulkModulus - 2.0 * mu / 3.0 * shearFac; // C1122
@@ -713,15 +713,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellPlaneStrain::_updateStateVarsElastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -737,21 +737,21 @@
 
   const int tensorSize = _tensorSize;
 
-  const double strainTpdt[] = {totalStrain[0] - initialStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0] - initialStrain[0],
 			       totalStrain[1] - initialStrain[1],
 			       0.0,
 			       totalStrain[2] - initialStrain[2]};
-  const double meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
+  const PylithScalar meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0};
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0};
 
   // Update total strain
   for (int iComp=0; iComp < tensorSize; ++iComp)
     stateVars[s_totalStrain+iComp] = totalStrain[iComp];
 
   // Initialize all viscous strains to deviatoric elastic strains.
-  double devStrain = 0.0;
-  double shearRatio = 0.0;
+  PylithScalar devStrain = 0.0;
+  PylithScalar shearRatio = 0.0;
   for (int iComp=0; iComp < 4; ++iComp) {
     devStrain = strainTpdt[iComp] - diag[iComp] * meanStrainTpdt;
     // Maxwell model 1
@@ -770,15 +770,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellPlaneStrain::_updateStateVarsViscoelastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -818,11 +818,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::GenMaxwellPlaneStrain::_stableTimeStepImplicit(
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -830,12 +830,12 @@
   assert(0 != stateVars);
   assert(_numVarsQuadPt == numStateVars);
 
-  double dtStable = pylith::PYLITH_MAXDOUBLE;
+  PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
 
   const int numMaxwellModels = _GenMaxwellPlaneStrain::numMaxwellModels;
   for (int i=0; i < numMaxwellModels; ++i) {
-    const double maxwellTime = properties[p_maxwellTime+i];
-    const double dt = 0.2*maxwellTime;
+    const PylithScalar maxwellTime = properties[p_maxwellTime+i];
+    const PylithScalar dt = 0.2*maxwellTime;
     if (dt < dtStable)
       dtStable = dt;
   } // for
@@ -848,15 +848,15 @@
 // Compute viscous strain for current time step.
 void
 pylith::materials::GenMaxwellPlaneStrain::_computeStateVars(
-					       const double* stateVars,
+					       const PylithScalar* stateVars,
 					       const int numStateVars,
-					       const double* properties,
+					       const PylithScalar* properties,
 					       const int numProperties,
-					       const double* totalStrain,
+					       const PylithScalar* totalStrain,
 					       const int strainSize,
-					       const double* initialStress,
+					       const PylithScalar* initialStress,
 					       const int initialStressSize,
-					       const double* initialStrain,
+					       const PylithScalar* initialStrain,
 					       const int initialStrainSize)
 { // _computeStateVars
   assert(0 != stateVars);
@@ -873,44 +873,44 @@
   const int tensorSize = _tensorSize;
   const int numMaxwellModels = _GenMaxwellPlaneStrain::numMaxwellModels;
 
-  const double muRatio[numMaxwellModels] = {
+  const PylithScalar muRatio[numMaxwellModels] = {
     properties[p_shearRatio  ],
     properties[p_shearRatio+1],
     properties[p_shearRatio+2]
   };
-  const double maxwellTime[numMaxwellModels] = {
+  const PylithScalar maxwellTime[numMaxwellModels] = {
     properties[p_maxwellTime  ],
     properties[p_maxwellTime+1],
     properties[p_maxwellTime+2]
   };
 
-  const double strainTpdt[] = {totalStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0],
 			       totalStrain[1],
 			       0.0,
 			       totalStrain[2]};
-  const double strainT[] = {stateVars[s_totalStrain+0],
+  const PylithScalar strainT[] = {stateVars[s_totalStrain+0],
 			    stateVars[s_totalStrain+1],
 			    0.0,
 			    stateVars[s_totalStrain+2]};
   
-  const double meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
-  const double meanStrainT = (strainT[0] + strainT[1]) / 3.0;
+  const PylithScalar meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
+  const PylithScalar meanStrainT = (strainT[0] + strainT[1]) / 3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0 };
 
   PetscLogFlops(4);
 
   // Compute Prony series terms
-  double_array dq(numMaxwellModels);
+  scalar_array dq(numMaxwellModels);
   dq = 0.0;
   for (int i=0; i < numMaxwellModels; ++i)
     if (muRatio[i] != 0.0)
       dq[i] = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime[i]);
 
   // Compute new viscous strains
-  double devStrainTpdt = 0.0;
-  double devStrainT = 0.0;
-  double deltaStrain = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStrainT = 0.0;
+  PylithScalar deltaStrain = 0.0;
   
   for (int iComp=0; iComp < 4; ++iComp) {
     devStrainTpdt = strainTpdt[iComp] - diag[iComp] * meanStrainTpdt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -65,7 +65,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -84,15 +84,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -100,7 +100,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -108,15 +108,15 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   /** Nondimensionalize state variables..
    *
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
                         const int nvalues) const;
 
   /** Dimensionalize state variables.
@@ -124,7 +124,7 @@
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
                      const int nvalues) const;
 
   /** Compute density from properties.
@@ -135,10 +135,10 @@
    * @param stateVars Number of state variables.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -160,17 +160,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -189,17 +189,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Update state variables (for next time step).
@@ -215,15 +215,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -235,9 +235,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -245,46 +245,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::GenMaxwellPlaneStrain::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::GenMaxwellPlaneStrain::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::GenMaxwellPlaneStrain::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -306,17 +306,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -336,17 +336,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -366,17 +366,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-			         const double* initialStress,
+			         const PylithScalar* initialStress,
 			         const int initialStressSize,
-			         const double* initialStrain,
+			         const PylithScalar* initialStrain,
 			         const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -395,17 +395,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-			              const double* initialStress,
+			              const PylithScalar* initialStress,
 			              const int initialStressSize,
-			              const double* initialStrain,
+			              const PylithScalar* initialStrain,
 			              const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -421,15 +421,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -445,15 +445,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute viscous strains (state variables) for the current time
@@ -470,22 +470,22 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _computeStateVars(const double* stateVars,
+  void _computeStateVars(const PylithScalar* stateVars,
 			 const int numStateVars,
-			 const double* properties,
+			 const PylithScalar* properties,
 			 const int numProperties,
-			 const double* totalStrain,
+			 const PylithScalar* totalStrain,
 			 const int strainSize,
-			 const double* initialStress,
+			 const PylithScalar* initialStress,
 			 const int initialStressSize,
-			 const double* initialStrain,
+			 const PylithScalar* initialStrain,
 			 const int initialStrainSize);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
   /// Viscous strain array.
-  double_array _viscousStrain;
+  scalar_array _viscousStrain;
 
   /// Method to use for _calcElasticConsts().
   calcElasticConsts_fn_type _calcElasticConstsFn;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellPlaneStrain.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::GenMaxwellPlaneStrain::timeStep(const double dt) {
+pylith::materials::GenMaxwellPlaneStrain::timeStep(const PylithScalar dt) {
   // Jacobian needs to be reformed if the time step size changes.
   if (_dt > 0.0 && dt != _dt)
     _needNewJacobian = true;
@@ -37,17 +37,17 @@
 inline
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcStress(
-						double* const stress,
+						PylithScalar* const stress,
 						const int stressSize,
-						const double* properties,
+						const PylithScalar* properties,
 						const int numProperties,
-						const double* stateVars,
+						const PylithScalar* stateVars,
 						const int numStateVars,
-						const double* totalStrain,
+						const PylithScalar* totalStrain,
 						const int strainSize,
-						const double* initialStress,
+						const PylithScalar* initialStress,
 						const int initialStressSize,
-						const double* initialStrain,
+						const PylithScalar* initialStrain,
 						const int initialStrainSize,
 						const bool computeStateVars) {
   assert(0 != _calcStressFn);
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::GenMaxwellPlaneStrain::_calcElasticConsts(
-						 double* const elasticConsts,
+						 PylithScalar* const elasticConsts,
 						 const int numElasticConsts,
-						 const double* properties,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* stateVars,
+						 const PylithScalar* stateVars,
 						 const int numStateVars,
-						 const double* totalStrain,
+						 const PylithScalar* totalStrain,
 						 const int strainSize,
-						 const double* initialStress,
+						 const PylithScalar* initialStress,
 						 const int initialStressSize,
-						 const double* initialStrain,
+						 const PylithScalar* initialStrain,
 						 const int initialStrainSize) {
   assert(0 != _calcElasticConstsFn);
   CALL_MEMBER_FN(*this, _calcElasticConstsFn)(elasticConsts, numElasticConsts,
@@ -88,15 +88,15 @@
 // Update state variables after solve.
 inline
 void
-pylith::materials::GenMaxwellPlaneStrain::_updateStateVars(double* const stateVars,
+pylith::materials::GenMaxwellPlaneStrain::_updateStateVars(PylithScalar* const stateVars,
 						  const int numStateVars,
-						  const double* properties,
+						  const PylithScalar* properties,
 						  const int numProperties,
-						  const double* totalStrain,
+						  const PylithScalar* totalStrain,
 						  const int strainSize,
-						  const double* initialStress,
+						  const PylithScalar* initialStress,
 						  const int initialStressSize,
-						  const double* initialStrain,
+						  const PylithScalar* initialStrain,
 						  const int initialStrainSize) {
   assert(0 != _updateStateVarsFn);
   CALL_MEMBER_FN(*this, _updateStateVarsFn)(stateVars, numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "ViscoelasticMaxwell.hh" // USES computeVisStrain
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -277,16 +277,16 @@
 // Compute parameters from values in spatial database.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_GenMaxwellQpQsIsotropic3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
   const int numMaxwellModels = _GenMaxwellQpQsIsotropic3D::numMaxwellModels;
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0) {
@@ -299,8 +299,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double k = density * vp*vp - 4.0/3.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar k = density * vp*vp - 4.0/3.0*mu;
 
   if (k <= 0.0) {
     std::ostringstream msg;
@@ -316,7 +316,7 @@
   propValues[p_muEff] = mu;
   propValues[p_kEff] = k;
 
-  double visFrac = 0.0;
+  PylithScalar visFrac = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) 
     visFrac += dbValues[db_shearRatio + imodel];
   if (visFrac > 1.0) {
@@ -330,7 +330,7 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  double meanFrac = 0.0;
+  PylithScalar meanFrac = 0.0;
   for (int imodel = 0; imodel < numMaxwellModels; ++imodel) 
     meanFrac += dbValues[db_bulkRatio + imodel];
   if (meanFrac > 1.0) {
@@ -346,12 +346,12 @@
 
   // Loop over number of Maxwell models.
   for (int imodel=0; imodel < numMaxwellModels; ++imodel) {
-    double shearRatio = dbValues[db_shearRatio + imodel];
-    double bulkRatio = dbValues[db_bulkRatio + imodel];
-    double shearViscosity = dbValues[db_shearViscosity + imodel];
-    double bulkViscosity = dbValues[db_bulkViscosity + imodel];
-    double maxwellTimeShear = pylith::PYLITH_MAXDOUBLE;
-    double maxwellTimeBulk = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar shearRatio = dbValues[db_shearRatio + imodel];
+    PylithScalar bulkRatio = dbValues[db_bulkRatio + imodel];
+    PylithScalar shearViscosity = dbValues[db_shearViscosity + imodel];
+    PylithScalar bulkViscosity = dbValues[db_bulkViscosity + imodel];
+    PylithScalar maxwellTimeShear = pylith::PYLITH_MAXDOUBLE;
+    PylithScalar maxwellTimeBulk = pylith::PYLITH_MAXDOUBLE;
     maxwellTimeShear = shearViscosity / mu;
     maxwellTimeBulk = bulkViscosity / k;
     if (shearRatio < 0.0 || shearViscosity < 0.0 || maxwellTimeShear < 0.0 || 
@@ -378,16 +378,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::GenMaxwellQpQsIsotropic3D::_nondimProperties(double* const values,
+pylith::materials::GenMaxwellQpQsIsotropic3D::_nondimProperties(PylithScalar* const values,
 								const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -408,16 +408,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::GenMaxwellQpQsIsotropic3D::_dimProperties(double* const values,
+pylith::materials::GenMaxwellQpQsIsotropic3D::_dimProperties(PylithScalar* const values,
 							     const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -439,8 +439,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_dbToStateVars(
-					double* const stateValues,
-					const double_array& dbValues)
+					PylithScalar* const stateValues,
+					const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -461,10 +461,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::GenMaxwellQpQsIsotropic3D::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::GenMaxwellQpQsIsotropic3D::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -479,17 +479,17 @@
 // material.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcStressElastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressElastic
@@ -506,20 +506,20 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellQpQsIsotropic3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_muEff];
-  const double k = properties[p_kEff];
-  const double mu2 = 2.0 * mu;
-  const double lambda = k - 2.0/3.0 * mu;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar k = properties[p_kEff];
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda = k - 2.0/3.0 * mu;
 
   // :TODO: Need to consider initial state variables????
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double s123 = lambda * (e11 + e22 + e33);
+  const PylithScalar s123 = lambda * (e11 + e22 + e33);
 
   stress[0] = s123 + mu2*e11 + initialStress[0];
   stress[1] = s123 + mu2*e22 + initialStress[1];
@@ -537,17 +537,17 @@
 // material.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcStressViscoelastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -568,25 +568,25 @@
   const int numMaxwellModels = _GenMaxwellQpQsIsotropic3D::numMaxwellModels;
   const int tensorSize = _GenMaxwellQpQsIsotropic3D::tensorSize;
 
-  const double mu = properties[p_muEff];
-  const double bulkModulus = properties[p_kEff];
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar bulkModulus = properties[p_kEff];
 
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu2 = 2.0 * mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
   
-  const double e123 = e11 + e22 + e33;
-  const double meanStrainTpdt = e123 / 3.0;
+  const PylithScalar e123 = e11 + e22 + e33;
+  const PylithScalar meanStrainTpdt = e123 / 3.0;
 
-  double elasFracShear = 1.0;  // deviatoric (shear) component
-  double elasFracBulk = 1.0; // mean (bulk)  component
+  PylithScalar elasFracShear = 1.0;  // deviatoric (shear) component
+  PylithScalar elasFracBulk = 1.0; // mean (bulk)  component
   for (int imodel=0; imodel < numMaxwellModels; ++imodel) {
     elasFracShear -= properties[p_shearRatio+imodel];
     elasFracBulk -= properties[p_bulkRatio+imodel];
   } // for
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   assert(elasFracShear >= -tolerance);
   assert(elasFracBulk >= -tolerance);
   
@@ -612,16 +612,16 @@
 
 
   // Compute mean stresses.
-  double meanStrain = elasFracBulk * meanStrainTpdt;
+  PylithScalar meanStrain = elasFracBulk * meanStrainTpdt;
   for (int iModel=0; iModel < numMaxwellModels; ++iModel)
     meanStrain += _viscousMeanStrain[iModel];
-  const double meanStressTpdt = 3.0 * bulkModulus * meanStrain;
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus * meanStrain;
   
   // Compute stresses (mean + deviatoric)
   assert(6 == tensorSize);
-  const double diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
   for (int i=0; i < tensorSize; ++i) {
-    double devStrain = elasFracShear * 
+    PylithScalar devStrain = elasFracShear * 
       (totalStrain[i] - initialStrain[i] - diag[i]*meanStrainTpdt);
     for (int iModel=0; iModel < numMaxwellModels; ++iModel)
       devStrain += _viscousDevStrain[iModel*tensorSize+i];
@@ -635,17 +635,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcElasticConstsElastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -661,12 +661,12 @@
   assert(0 != initialStrain);
   assert(_GenMaxwellQpQsIsotropic3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_muEff];
-  const double k = properties[p_kEff];
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar k = properties[p_kEff];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = k + 4.0/3.0*mu;
-  const double lambda = k - 2.0/3.0*mu;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = k + 4.0/3.0*mu;
+  const PylithScalar lambda = k - 2.0/3.0*mu;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -713,17 +713,17 @@
 // as a viscoelastic material.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcElasticConstsViscoelastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -743,37 +743,37 @@
   const int numMaxwellModels = _GenMaxwellQpQsIsotropic3D::numMaxwellModels;
   const int tensorSize = _GenMaxwellQpQsIsotropic3D::tensorSize;
 
-  const double mu = properties[p_muEff];
-  const double bulkModulus = properties[p_kEff];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_muEff];
+  const PylithScalar bulkModulus = properties[p_kEff];
+  const PylithScalar mu2 = 2.0 * mu;
 
   // Compute viscous contribution. (deviatoric + mean)
-  double elasFracShear = 1.0;  // deviatoric (shear) component
-  double visFactorDev = 0.0;
-  double elasFracBulk = 1.0; // mean (bulk) component
-  double visFactorBulk = 0.0;
+  PylithScalar elasFracShear = 1.0;  // deviatoric (shear) component
+  PylithScalar visFactorDev = 0.0;
+  PylithScalar elasFracBulk = 1.0; // mean (bulk) component
+  PylithScalar visFactorBulk = 0.0;
   for (int iModel=0; iModel < numMaxwellModels; ++iModel) {
-    const double shearRatio = properties[p_shearRatio+iModel];
-    const double bulkRatio = properties[p_bulkRatio+iModel];
+    const PylithScalar shearRatio = properties[p_shearRatio+iModel];
+    const PylithScalar bulkRatio = properties[p_bulkRatio+iModel];
     elasFracShear -= shearRatio;
     elasFracBulk -= bulkRatio;
 
-    const double maxwellTimeShear = properties[p_maxwellTimeShear+iModel];
+    const PylithScalar maxwellTimeShear = properties[p_maxwellTimeShear+iModel];
     visFactorDev +=
       shearRatio*ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTimeShear);
-    const double maxwellTimeBulk = properties[p_maxwellTimeBulk+iModel];
+    const PylithScalar maxwellTimeBulk = properties[p_maxwellTimeBulk+iModel];
     visFactorBulk +=
       bulkRatio*ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTimeBulk);
   } // for
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   assert(elasFracShear >= -tolerance);
   assert(elasFracBulk >= -tolerance);
 
-  const double muEff = mu * (elasFracShear + visFactorDev);
-  const double kEff = bulkModulus * (elasFracBulk + visFactorBulk);
-  const double mu2Eff = 2.0*muEff;
-  const double lambda2muEff = kEff + 4.0/3.0*muEff;
-  const double lambdaEff = kEff - 2.0/3.0*muEff;
+  const PylithScalar muEff = mu * (elasFracShear + visFactorDev);
+  const PylithScalar kEff = bulkModulus * (elasFracBulk + visFactorBulk);
+  const PylithScalar mu2Eff = 2.0*muEff;
+  const PylithScalar lambda2muEff = kEff + 4.0/3.0*muEff;
+  const PylithScalar lambdaEff = kEff - 2.0/3.0*muEff;
 
   elasticConsts[ 0] = lambda2muEff; // C1111
   elasticConsts[ 1] = lambdaEff; // C1122
@@ -830,15 +830,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_updateStateVarsElastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -855,10 +855,10 @@
   const int tensorSize = _GenMaxwellQpQsIsotropic3D::tensorSize;
   const int numMaxwellModels = _GenMaxwellQpQsIsotropic3D::numMaxwellModels;
 
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double meanStrainTpdt = (e11 + e22 + e33) / 3.0;
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33) / 3.0;
 
   // Update total strain
   for (int i=0; i < tensorSize; ++i)
@@ -868,10 +868,10 @@
 
   // Deviatoric viscous strains.
   assert(tensorSize == 6);
-  const double diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
   for (int iModel=0; iModel < numMaxwellModels; ++iModel)
     for (int i=0; i < tensorSize; ++i) {
-      const double devStrain = totalStrain[i] - diag[i]*meanStrainTpdt;
+      const PylithScalar devStrain = totalStrain[i] - diag[i]*meanStrainTpdt;
       stateVars[s_viscousDevStrain +iModel*tensorSize+i] = 
 	properties[p_shearRatio+iModel] * devStrain;
     } // for
@@ -890,15 +890,15 @@
 // Update state variables.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_updateStateVarsViscoelastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -940,11 +940,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::GenMaxwellQpQsIsotropic3D::_stableTimeStepImplicit(
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -954,18 +954,18 @@
 
   const int numMaxwellModels = _GenMaxwellQpQsIsotropic3D::numMaxwellModels;
 
-  double dtStable = pylith::PYLITH_MAXDOUBLE;
+  PylithScalar dtStable = pylith::PYLITH_MAXDOUBLE;
 
   for (int i=0; i < numMaxwellModels; ++i) {
-    const double maxwellTime = properties[p_maxwellTimeShear+i];
-    const double dt = 0.2*maxwellTime;
+    const PylithScalar maxwellTime = properties[p_maxwellTimeShear+i];
+    const PylithScalar dt = 0.2*maxwellTime;
     if (dt < dtStable)
       dtStable = dt;
   } // for
 
   for (int i=0; i < numMaxwellModels; ++i) {
-    const double maxwellTime = properties[p_maxwellTimeBulk+i];
-    const double dt = 0.2*maxwellTime;
+    const PylithScalar maxwellTime = properties[p_maxwellTimeBulk+i];
+    const PylithScalar dt = 0.2*maxwellTime;
     if (dt < dtStable)
       dtStable = dt;
   } // for
@@ -977,15 +977,15 @@
 // Compute viscous strain for current time step.
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_computeStateVars(
-					       const double* stateVars,
+					       const PylithScalar* stateVars,
 					       const int numStateVars,
-					       const double* properties,
+					       const PylithScalar* properties,
 					       const int numProperties,
-					       const double* totalStrain,
+					       const PylithScalar* totalStrain,
 					       const int strainSize,
-					       const double* initialStress,
+					       const PylithScalar* initialStress,
 					       const int initialStressSize,
-					       const double* initialStrain,
+					       const PylithScalar* initialStrain,
 					       const int initialStrainSize)
 { // _computeStateVars
   assert(0 != stateVars);
@@ -1005,12 +1005,12 @@
   // :TODO: Need to account for initial values for state variables
   // and the initial strain??
 
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double meanStrainTpdt = (e11 + e22 + e33) / 3.0;
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33) / 3.0;
 
-  const double meanStrainT = 
+  const PylithScalar meanStrainT = 
     ( stateVars[s_totalStrain+0] +
       stateVars[s_totalStrain+1] +
       stateVars[s_totalStrain+2] ) / 3.0;
@@ -1020,16 +1020,16 @@
   // Deviatoric viscous strains.
 
   assert(6 == tensorSize);
-  const double diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[6] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
   for (int iModel=0; iModel < numMaxwellModels; ++iModel) {
 
-    const double dq = 
+    const PylithScalar dq = 
       ViscoelasticMaxwell::viscousStrainParam(_dt, properties[p_maxwellTimeShear+iModel]);
 
     for (int i=0; i < tensorSize; ++i) {
-      const double devStrainTpdt = totalStrain[i] - diag[i]*meanStrainTpdt;
-      const double devStrainT = stateVars[s_totalStrain+i] - diag[i]*meanStrainT;
-      const double deltaStrain = devStrainTpdt - devStrainT;
+      const PylithScalar devStrainTpdt = totalStrain[i] - diag[i]*meanStrainTpdt;
+      const PylithScalar devStrainT = stateVars[s_totalStrain+i] - diag[i]*meanStrainT;
+      const PylithScalar deltaStrain = devStrainTpdt - devStrainT;
       
       _viscousDevStrain[iModel*tensorSize+i] = 
 	exp(-_dt/properties[p_maxwellTimeShear+iModel]) * 
@@ -1044,10 +1044,10 @@
   // Compute Prony series terms
   for (int iModel=0; iModel < numMaxwellModels; ++iModel) {
 
-    const double dq = 
+    const PylithScalar dq = 
       ViscoelasticMaxwell::viscousStrainParam(_dt, properties[p_maxwellTimeBulk+iModel]);
 
-    const double deltaStrain = meanStrainTpdt - meanStrainT;
+    const PylithScalar deltaStrain = meanStrainTpdt - meanStrainT;
 
     _viscousMeanStrain[iModel] =  
       exp(-_dt/properties[p_maxwellTimeBulk+iModel]) * 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -86,15 +86,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -102,7 +102,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -110,8 +110,8 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   // Note: We do not need to dimensionalize or nondimensionalize state
   // variables because there are strains, which are dimensionless.
@@ -125,10 +125,10 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -150,17 +150,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -179,17 +179,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Update state variables (for next time step).
@@ -205,15 +205,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -225,9 +225,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -235,46 +235,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::GenMaxwellQpQsIsotropic3D::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::GenMaxwellQpQsIsotropic3D::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::GenMaxwellQpQsIsotropic3D::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -296,17 +296,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -326,17 +326,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -356,17 +356,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-				 const double* initialStress,
+				 const PylithScalar* initialStress,
 				 const int initialStressSize,
-				 const double* initialStrain,
+				 const PylithScalar* initialStrain,
 				 const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -385,17 +385,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-				      const double* initialStress,
+				      const PylithScalar* initialStress,
 				      const int initialStressSize,
-				      const double* initialStrain,
+				      const PylithScalar* initialStrain,
 				      const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -411,15 +411,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -431,15 +431,15 @@
    * @param initialState Initial state values.
    * @param initialStateSize Size of initial state array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute viscous strains (state variables) for the current time
@@ -456,25 +456,25 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _computeStateVars(const double* stateVars,
+  void _computeStateVars(const PylithScalar* stateVars,
 			 const int numStateVars,
-			 const double* properties,
+			 const PylithScalar* properties,
 			 const int numProperties,
-			 const double* totalStrain,
+			 const PylithScalar* totalStrain,
 			 const int strainSize,
-			 const double* initialStress,
+			 const PylithScalar* initialStress,
 			 const int initialStressSize,
-			 const double* initialStrain,
+			 const PylithScalar* initialStrain,
 			 const int initialStrainSize);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
   /// Viscous deviatoric strain array [numMaxwellModels*tensorSize].
-  double_array _viscousDevStrain;
+  scalar_array _viscousDevStrain;
 
   /// Viscous mean strain [numMaxwellModels].
-  double_array _viscousMeanStrain;
+  scalar_array _viscousMeanStrain;
 
   /// Method to use for _calcElasticConsts().
   calcElasticConsts_fn_type _calcElasticConstsFn;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/GenMaxwellQpQsIsotropic3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::GenMaxwellQpQsIsotropic3D::timeStep(const double dt) {
+pylith::materials::GenMaxwellQpQsIsotropic3D::timeStep(const PylithScalar dt) {
   // Jacobian needs to be reformed if the time step size changes.
   if (_dt > 0.0 && dt != _dt)
     _needNewJacobian = true;
@@ -37,17 +37,17 @@
 inline
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcStress(
-					      double* const stress,
+					      PylithScalar* const stress,
 					      const int stressSize,
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars,
-					      const double* totalStrain,
+					      const PylithScalar* totalStrain,
 					      const int strainSize,
-					      const double* initialStress,
+					      const PylithScalar* initialStress,
 					      const int initialStressSize,
-					      const double* initialStrain,
+					      const PylithScalar* initialStrain,
 					      const int initialStrainSize,
 					      const bool computeStateVars) {
   assert(0 != _calcStressFn);
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_calcElasticConsts(
-					      double* const elasticConsts,
+					      PylithScalar* const elasticConsts,
 					      const int numElasticConsts,
-					      const double* properties,
+					      const PylithScalar* properties,
 					      const int numProperties,
-					      const double* stateVars,
+					      const PylithScalar* stateVars,
 					      const int numStateVars,
-					      const double* totalStrain,
+					      const PylithScalar* totalStrain,
 					      const int strainSize,
-					      const double* initialStress,
+					      const PylithScalar* initialStress,
 					      const int initialStressSize,
-					      const double* initialStrain,
+					      const PylithScalar* initialStrain,
 					      const int initialStrainSize) {
   assert(0 != _calcElasticConstsFn);
   CALL_MEMBER_FN(*this, _calcElasticConstsFn)(elasticConsts, numElasticConsts,
@@ -89,15 +89,15 @@
 inline
 void
 pylith::materials::GenMaxwellQpQsIsotropic3D::_updateStateVars(
-					     double* const stateVars,
+					     PylithScalar* const stateVars,
 					     const int numStateVars,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize) {
   assert(0 != _updateStateVarsFn);
   CALL_MEMBER_FN(*this, _updateStateVarsFn)(stateVars, numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/utils/array.hh" // USES double_array, std::vector
+#include "pylith/utils/array.hh" // USES scalar_array, std::vector
 
 #include "spatialdata/spatialdb/SpatialDB.hh" // USES SpatialDB
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -147,7 +147,7 @@
   assert(!propertiesSection.isNull());
 
 #if !defined(PRECOMPUTE_GEOMETRY)
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   RestrictVisitor coordsVisitor(*coordinates,
@@ -156,9 +156,9 @@
 
   // Create arrays for querying.
   const int numDBProperties = _metadata.numDBProperties();
-  double_array quadPtsGlobal(numQuadPts*spaceDim);
-  double_array propertiesQuery(numDBProperties);
-  double_array propertiesCell(numQuadPts*_numPropsQuadPt);
+  scalar_array quadPtsGlobal(numQuadPts*spaceDim);
+  scalar_array propertiesQuery(numDBProperties);
+  scalar_array propertiesCell(numQuadPts*_numPropsQuadPt);
 
   // Setup database for quering for physical properties
   assert(0 != _dbProperties);
@@ -184,8 +184,8 @@
 
   // Create arrays for querying
   const int numDBStateVars = _metadata.numDBStateVars();
-  double_array stateVarsQuery;
-  double_array stateVarsCell;
+  scalar_array stateVarsQuery;
+  scalar_array stateVarsCell;
   if (0 != _dbInitialState) {
     assert(!stateVarsSection.isNull());
     assert(numDBStateVars > 0);
@@ -200,7 +200,7 @@
   } // if
 
   assert(0 != _normalizer);
-  const double lengthScale = _normalizer->lengthScale();
+  const PylithScalar lengthScale = _normalizer->lengthScale();
     
   for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
        c_iter != cellsEnd;
@@ -214,7 +214,7 @@
     quadrature->computeGeometry(coordinatesCell, *c_iter);
 #endif
 
-    const double_array& quadPtsNonDim = quadrature->quadPts();
+    const scalar_array& quadPtsNonDim = quadrature->quadPts();
     quadPtsGlobal = quadPtsNonDim;
     _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
 				lengthScale);
@@ -315,7 +315,8 @@
 // ----------------------------------------------------------------------
 // Get physical property or state variable field.
 void
-pylith::materials::Material::getField(topology::Field<topology::Mesh> *field, const char* name) const
+pylith::materials::Material::getField(topology::Field<topology::Mesh> *field,
+				      const char* name) const
 { // getField
   // Logging of allocation is handled by getField() caller since it
   // manages the memory for the field argument.
@@ -394,8 +395,8 @@
     fieldType = _metadata.getProperty(propertyIndex).fieldType;
 
     // Buffer for property at cell's quadrature points
-    double_array fieldCell(numQuadPts*fiberDim);
-    double_array propertiesCell(numQuadPts*numPropsQuadPt);
+    scalar_array fieldCell(numQuadPts*fiberDim);
+    scalar_array propertiesCell(numQuadPts*numPropsQuadPt);
 
     // Loop over cells
     for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
@@ -464,8 +465,8 @@
     field->scale(1.0);
 
     // Buffer for state variable at cell's quadrature points
-    double_array fieldCell(numQuadPts*fiberDim);
-    double_array stateVarsCell(numQuadPts*numVarsQuadPt);
+    scalar_array fieldCell(numQuadPts*fiberDim);
+    scalar_array stateVarsCell(numQuadPts*numVarsQuadPt);
     
     // Loop over cells
     for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -104,13 +104,13 @@
    * @param dt Current time step.
    */
   virtual
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Get current time step.
    *
    * @returns Current time step.
    */
-  double timeStep(void) const;
+  PylithScalar timeStep(void) const;
 
   /** Set database for physical property parameters.
    *
@@ -213,8 +213,8 @@
    * @param dbValues Array of database values.
    */
   virtual
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues) = 0;
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues) = 0;
 
   /** Nondimensionalize properties.
    *
@@ -222,7 +222,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const = 0;
 
   /** Dimensionalize properties.
@@ -231,7 +231,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const = 0;
 
   /** Compute initial state variables from values in spatial database.
@@ -240,8 +240,8 @@
    * @param dbValues Array of database values.
    */
   virtual
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   /** Nondimensionalize state variables.
    *
@@ -249,7 +249,7 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			   const int nvalues) const;
   
   /** Dimensionalize state variables.
@@ -258,13 +258,13 @@
    * @param nvalues Number of values.
    */
   virtual
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   // PROTECTED MEMBERS //////////////////////////////////////////////////
 protected :
 
-  double _dt; ///< Current time step
+  PylithScalar _dt; ///< Current time step
 
   /// Field containing physical properties of material.
   topology::Field<topology::Mesh> *_properties;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/Material.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -72,13 +72,13 @@
 // Set current time step.
 inline
 void
-pylith::materials::Material::timeStep(const double dt) {
+pylith::materials::Material::timeStep(const PylithScalar dt) {
   _dt = dt;
 }
 
 // Get current time step.
 inline
-double
+PylithScalar
 pylith::materials::Material::timeStep(void) const {
   return _dt;
 } // timeStep
@@ -116,21 +116,21 @@
 // Compute initial state variables from values in spatial database.
 inline
 void
-pylith::materials::Material::_dbToStateVars(double* const stateValues,
-					    const double_array& dbValues)
+pylith::materials::Material::_dbToStateVars(PylithScalar* const stateValues,
+					    const scalar_array& dbValues)
 {}
 
 // Nondimensionalize state variables.
 inline
 void
-pylith::materials::Material::_nondimStateVars(double* const values,
+pylith::materials::Material::_nondimStateVars(PylithScalar* const values,
 					      const int nvalues) const
 {}
   
 // Dimensionalize state variables.
 inline
 void
-pylith::materials::Material::_dimStateVars(double* const values,
+pylith::materials::Material::_dimStateVars(PylithScalar* const values,
 					   const int nvalues) const
 {}
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "ViscoelasticMaxwell.hh" // USES computeVisStrain
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
@@ -183,17 +183,17 @@
 // Compute properties from values in spatial database.
 void
 pylith::materials::MaxwellIsotropic3D::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_MaxwellIsotropic3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
-  const double viscosity = dbValues[db_viscosity];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
+  const PylithScalar viscosity = dbValues[db_viscosity];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || viscosity <= 0.0) {
     std::ostringstream msg;
@@ -206,8 +206,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -219,7 +219,7 @@
   } // if
   assert(mu > 0);
 
-  const double maxwellTime = viscosity / mu;
+  const PylithScalar maxwellTime = viscosity / mu;
   assert(maxwellTime > 0.0);
 
   propValues[p_density] = density;
@@ -233,16 +233,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::MaxwellIsotropic3D::_nondimProperties(double* const values,
+pylith::materials::MaxwellIsotropic3D::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
   values[p_mu] = 
@@ -258,16 +258,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::MaxwellIsotropic3D::_dimProperties(double* const values,
+pylith::materials::MaxwellIsotropic3D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
   values[p_mu] = 
@@ -284,8 +284,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::MaxwellIsotropic3D::_dbToStateVars(
-					double* const stateValues,
-					const double_array& dbValues)
+					PylithScalar* const stateValues,
+					const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -294,7 +294,7 @@
   const int totalSize = 2 * _tensorSize;
   assert(totalSize == _numVarsQuadPt);
   assert(totalSize == numDBValues);
-  memcpy(stateValues, &dbValues[0], totalSize*sizeof(double));
+  memcpy(stateValues, &dbValues[0], totalSize*sizeof(PylithScalar));
 
   PetscLogFlops(0);
 } // _dbToStateVars
@@ -302,10 +302,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::MaxwellIsotropic3D::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::MaxwellIsotropic3D::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -320,17 +320,17 @@
 // material.
 void
 pylith::materials::MaxwellIsotropic3D::_calcStressElastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressElastic
@@ -347,19 +347,19 @@
   assert(0 != initialStrain);
   assert(_MaxwellIsotropic3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar mu2 = 2.0 * mu;
 
   // :TODO: Need to consider initial state variables????
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double s123 = lambda * (e11 + e22 + e33);
+  const PylithScalar s123 = lambda * (e11 + e22 + e33);
 
   stress[0] = s123 + mu2 * e11 + initialStress[0];
   stress[1] = s123 + mu2 * e22 + initialStress[1];
@@ -376,17 +376,17 @@
 // material.
 void
 pylith::materials::MaxwellIsotropic3D::_calcStressViscoelastic(
-					     double* const stress,
+					     PylithScalar* const stress,
 					     const int stressSize,
-					     const double* properties,
+					     const PylithScalar* properties,
 					     const int numProperties,
-					     const double* stateVars,
+					     const PylithScalar* stateVars,
 					     const int numStateVars,
-					     const double* totalStrain,
+					     const PylithScalar* totalStrain,
 					     const int strainSize,
-					     const double* initialStress,
+					     const PylithScalar* initialStress,
 					     const int initialStressSize,
-					     const double* initialStrain,
+					     const PylithScalar* initialStrain,
 					     const int initialStrainSize,
 					     const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -405,27 +405,27 @@
 
   const int tensorSize = _MaxwellIsotropic3D::tensorSize;
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
   // Initial stress and strain values
-  const double meanStrainInitial = (initialStrain[0] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] +
 				    initialStrain[1] +
 				    initialStrain[2]) / 3.0;
-  const double meanStressInitial = (initialStress[0] +
+  const PylithScalar meanStressInitial = (initialStress[0] +
 				    initialStress[1] +
 				    initialStress[2]) / 3.0;
-  const double devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
+  const PylithScalar devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
 				     initialStrain[1] - meanStrainInitial,
 				     initialStrain[2] - meanStrainInitial,
 				     initialStrain[3],
 				     initialStrain[4],
 				     initialStrain[5]};
-  const double devStressInitial[] = {initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = {initialStress[0] - meanStressInitial,
 				     initialStress[1] - meanStressInitial,
 				     initialStress[2] - meanStressInitial,
 				     initialStress[3],
@@ -433,14 +433,14 @@
 				     initialStress[5]};
 
   // :TODO: Need to determine how to incorporate state variables
-  const double meanStrainTpdt = (totalStrain[0] +
+  const PylithScalar meanStrainTpdt = (totalStrain[0] +
 				 totalStrain[1] +
 				 totalStrain[2]) / 3.0;
   
-  const double meanStressTpdt = 3.0 * bulkModulus *
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus *
     (meanStrainTpdt - meanStrainInitial) + meanStressInitial;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Get viscous strains
   if (computeStateVars)
@@ -451,10 +451,10 @@
 		      initialStrain, initialStrainSize);
   else
     memcpy(&_viscousStrain[0], &stateVars[s_viscousStrain],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
 
   // Compute new stresses
-  double devStressTpdt = 0.0;
+  PylithScalar devStressTpdt = 0.0;
 
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStressTpdt = mu2 * (_viscousStrain[iComp] - devStrainInitial[iComp]) +
@@ -470,17 +470,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::MaxwellIsotropic3D::_calcElasticConstsElastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -496,11 +496,11 @@
   assert(0 != initialStrain);
   assert(_MaxwellIsotropic3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -547,17 +547,17 @@
 // as an elastic material.
 void
 pylith::materials::MaxwellIsotropic3D::_calcElasticConstsViscoelastic(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -573,16 +573,16 @@
   assert(0 != initialStrain);
   assert(_MaxwellIsotropic3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
-  double dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
+  PylithScalar dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
 
-  const double visFac = mu * dq / 3.0;
+  const PylithScalar visFac = mu * dq / 3.0;
 
   elasticConsts[ 0] = bulkModulus + 4.0 * visFac; // C1111
   elasticConsts[ 1] = bulkModulus - 2.0 * visFac; // C1122
@@ -628,15 +628,15 @@
 // Update state variables as an elastic material.
 void
 pylith::materials::MaxwellIsotropic3D::_updateStateVarsElastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -651,19 +651,19 @@
   assert(_MaxwellIsotropic3D::tensorSize == initialStrainSize);
 
   const int tensorSize = _tensorSize;
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double strainTpdt[] = {totalStrain[0] - initialStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0] - initialStrain[0],
 			       totalStrain[1] - initialStrain[1],
 			       totalStrain[2] - initialStrain[2],
 			       totalStrain[3] - initialStrain[3],
 			       totalStrain[4] - initialStrain[4],
 			       totalStrain[5] - initialStrain[5]};
 
-  const double meanStrainTpdt =
+  const PylithScalar meanStrainTpdt =
     (strainTpdt[0] + strainTpdt[1] + strainTpdt[2]) / 3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Initialize all viscous strains to deviatoric elastic strains.
   for (int iComp=0; iComp < tensorSize; ++iComp) {
@@ -680,15 +680,15 @@
 // Update state variables as a viscoelastic material.
 void
 pylith::materials::MaxwellIsotropic3D::_updateStateVarsViscoelastic(
-					    double* const stateVars,
+					    PylithScalar* const stateVars,
 					    const int numStateVars,
-					    const double* properties,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* totalStrain,
+					    const PylithScalar* totalStrain,
 					    const int strainSize,
-					    const double* initialStress,
+					    const PylithScalar* initialStress,
 					    const int initialStressSize,
-					    const double* initialStrain,
+					    const PylithScalar* initialStrain,
 					    const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -710,21 +710,21 @@
 		    initialStress, initialStressSize,
 		    initialStrain, initialStrainSize);
 
-  memcpy(&stateVars[s_totalStrain], totalStrain, tensorSize*sizeof(double));
+  memcpy(&stateVars[s_totalStrain], totalStrain, tensorSize*sizeof(PylithScalar));
 
   memcpy(&stateVars[s_viscousStrain], &_viscousStrain[0], 
-	 tensorSize*sizeof(double));
+	 tensorSize*sizeof(PylithScalar));
 
   _needNewJacobian = false;
 } // _updateStateVarsViscoelastic
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::MaxwellIsotropic3D::_stableTimeStepImplicit(
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -732,8 +732,8 @@
   assert(0 != stateVars);
   assert(_numVarsQuadPt == numStateVars);
 
-  const double maxwellTime = properties[p_maxwellTime];
-  const double dtStable = 0.2 * maxwellTime;
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
+  const PylithScalar dtStable = 0.2 * maxwellTime;
 
   return dtStable;
 } // _stableTimeStepImplicit
@@ -742,15 +742,15 @@
 // Compute viscous strain for current time step.
 void
 pylith::materials::MaxwellIsotropic3D::_computeStateVars(
-					       const double* stateVars,
+					       const PylithScalar* stateVars,
 					       const int numStateVars,
-					       const double* properties,
+					       const PylithScalar* properties,
 					       const int numProperties,
-					       const double* totalStrain,
+					       const PylithScalar* totalStrain,
 					       const int strainSize,
-					       const double* initialStress,
+					       const PylithScalar* initialStress,
 					       const int initialStressSize,
-					       const double* initialStrain,
+					       const PylithScalar* initialStrain,
 					       const int initialStrainSize)
 { // _computeStateVars
   assert(0 != stateVars);
@@ -765,33 +765,33 @@
   assert(_MaxwellIsotropic3D::tensorSize == initialStrainSize);
 
   const int tensorSize = _tensorSize;
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
   // :TODO: Need to account for initial values for state variables
   // and the initial strain??
 
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double e12 = totalStrain[3];
-  const double e23 = totalStrain[4];
-  const double e13 = totalStrain[5];
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar e12 = totalStrain[3];
+  const PylithScalar e23 = totalStrain[4];
+  const PylithScalar e13 = totalStrain[5];
   
-  const double meanStrainTpdt = (e11 + e22 + e33) / 3.0;
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33) / 3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
-  const double meanStrainT =
+  const PylithScalar meanStrainT =
     ( stateVars[s_totalStrain+0] +
       stateVars[s_totalStrain+1] +
       stateVars[s_totalStrain+2] ) / 3.0;
   
   // Time integration.
-  double dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
-  const double expFac = exp(-_dt/maxwellTime);
+  PylithScalar dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
+  const PylithScalar expFac = exp(-_dt/maxwellTime);
 
-  double devStrainTpdt = 0.0;
-  double devStrainT = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStrainT = 0.0;
 
   for (int iComp=0; iComp < tensorSize; ++iComp) {
     devStrainTpdt = totalStrain[iComp] - diag[iComp] * meanStrainTpdt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -73,15 +73,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -89,7 +89,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -97,8 +97,8 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   // Note: We do not need to dimensionalize or nondimensionalize state
   // variables because there are strains, which are dimensionless.
@@ -112,10 +112,10 @@
    * @param stateVars Number of state variables.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -138,17 +138,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -167,17 +167,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize);
 
   /** Update state variables (for next time step).
@@ -193,15 +193,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -213,9 +213,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -223,46 +223,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::MaxwellIsotropic3D::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::MaxwellIsotropic3D::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::MaxwellIsotropic3D::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -284,17 +284,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -314,17 +314,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -344,17 +344,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-				 const double* initialStress,
+				 const PylithScalar* initialStress,
 				 const int initialStressSize,
-				 const double* initialStrain,
+				 const PylithScalar* initialStrain,
 				 const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -373,17 +373,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-				      const double* initialStress,
+				      const PylithScalar* initialStress,
 				      const int initialStressSize,
-				      const double* initialStrain,
+				      const PylithScalar* initialStrain,
 				      const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -399,15 +399,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -423,15 +423,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute viscous strains (state variables) for the current time
@@ -448,21 +448,21 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _computeStateVars(const double* stateVars,
+  void _computeStateVars(const PylithScalar* stateVars,
 			 const int numStateVars,
-			 const double* properties,
+			 const PylithScalar* properties,
 			 const int numProperties,
-			 const double* totalStrain,
+			 const PylithScalar* totalStrain,
 			 const int strainSize,
-			 const double* initialStress,
+			 const PylithScalar* initialStress,
 			 const int initialStressSize,
-			 const double* initialStrain,
+			 const PylithScalar* initialStrain,
 			 const int initialStrainSize);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
-  double_array _viscousStrain; ///< Array for viscous strain tensor
+  scalar_array _viscousStrain; ///< Array for viscous strain tensor
 
   /// Method to use for _calcElasticConsts().
   calcElasticConsts_fn_type _calcElasticConstsFn;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellIsotropic3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::MaxwellIsotropic3D::timeStep(const double dt) {
+pylith::materials::MaxwellIsotropic3D::timeStep(const PylithScalar dt) {
   // Jacobian needs to be reformed if the time step size changes.
   if (_dt > 0.0 && dt != _dt)
     _needNewJacobian = true;
@@ -36,17 +36,17 @@
 // Compute stress tensor from parameters.
 inline
 void
-pylith::materials::MaxwellIsotropic3D::_calcStress(double* const stress,
+pylith::materials::MaxwellIsotropic3D::_calcStress(PylithScalar* const stress,
 						   const int stressSize,
-						   const double* properties,
+						   const PylithScalar* properties,
 						   const int numProperties,
-						   const double* stateVars,
+						   const PylithScalar* stateVars,
 						   const int numStateVars,
-						   const double* totalStrain,
+						   const PylithScalar* totalStrain,
 						   const int strainSize,
-						   const double* initialStress,
+						   const PylithScalar* initialStress,
 						   const int initialStressSize,
-						   const double* initialStrain,
+						   const PylithScalar* initialStrain,
 						   const int initialStrainSize,
 						   const bool computeStateVars)
 {
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::MaxwellIsotropic3D::_calcElasticConsts(
-						 double* const elasticConsts,
+						 PylithScalar* const elasticConsts,
 						 const int numElasticConsts,
-						 const double* properties,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* stateVars,
+						 const PylithScalar* stateVars,
 						 const int numStateVars,
-						 const double* totalStrain,
+						 const PylithScalar* totalStrain,
 						 const int strainSize,
-						 const double* initialStress,
+						 const PylithScalar* initialStress,
 						 const int initialStressSize,
-						 const double* initialStrain,
+						 const PylithScalar* initialStrain,
 						 const int initialStrainSize) {
   assert(0 != _calcElasticConstsFn);
   CALL_MEMBER_FN(*this, _calcElasticConstsFn)(elasticConsts, numElasticConsts,
@@ -88,15 +88,15 @@
 // Update state variables after solve.
 inline
 void
-pylith::materials::MaxwellIsotropic3D::_updateStateVars(double* const stateVars,
+pylith::materials::MaxwellIsotropic3D::_updateStateVars(PylithScalar* const stateVars,
 							const int numStateVars,
-							const double* properties,
+							const PylithScalar* properties,
 							const int numProperties,
-							const double* totalStrain,
+							const PylithScalar* totalStrain,
 							const int strainSize,
-							const double* initialStress,
+							const PylithScalar* initialStress,
 							const int initialStressSize,
-							const double* initialStrain,
+							const PylithScalar* initialStrain,
 							const int initialStrainSize) {
   assert(0 != _updateStateVarsFn);
   CALL_MEMBER_FN(*this, _updateStateVarsFn)(stateVars, numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "ViscoelasticMaxwell.hh" // USES computeVisStrain
 #include "Metadata.hh" // USES Metadata
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -186,17 +186,17 @@
 // Compute properties from values in spatial database.
 void
 pylith::materials::MaxwellPlaneStrain::_dbToProperties(
-					    double* const propValues,
-					    const double_array& dbValues)
+					    PylithScalar* const propValues,
+					    const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_MaxwellPlaneStrain::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
-  const double viscosity = dbValues[db_viscosity];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
+  const PylithScalar viscosity = dbValues[db_viscosity];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || viscosity <= 0.0) {
     std::ostringstream msg;
@@ -209,8 +209,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs * vs;
-  const double lambda = density * vp * vp - 2.0 * mu;
+  const PylithScalar mu = density * vs * vs;
+  const PylithScalar lambda = density * vp * vp - 2.0 * mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -222,7 +222,7 @@
   } // if
   assert(mu > 0);
 
-  const double maxwellTime = viscosity / mu;
+  const PylithScalar maxwellTime = viscosity / mu;
   assert(maxwellTime > 0.0);
 
   propValues[p_density] = density;
@@ -236,16 +236,16 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::MaxwellPlaneStrain::_nondimProperties(double* const values,
+pylith::materials::MaxwellPlaneStrain::_nondimProperties(PylithScalar* const values,
 							 const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
   values[p_mu] = 
@@ -261,16 +261,16 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::MaxwellPlaneStrain::_dimProperties(double* const values,
+pylith::materials::MaxwellPlaneStrain::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
   values[p_mu] = 
@@ -287,8 +287,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::MaxwellPlaneStrain::_dbToStateVars(
-					double* const stateValues,
-					const double_array& dbValues)
+					PylithScalar* const stateValues,
+					const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -297,7 +297,7 @@
   const int totalSize = 1 + _tensorSize + 4;
   assert(totalSize == _numVarsQuadPt);
   assert(totalSize == numDBValues);
-  memcpy(stateValues, &dbValues[0], totalSize*sizeof(double));
+  memcpy(stateValues, &dbValues[0], totalSize*sizeof(PylithScalar));
 
   PetscLogFlops(0);
 } // _dbToStateVars
@@ -305,14 +305,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::materials::MaxwellPlaneStrain::_nondimStateVars(double* const values,
+pylith::materials::MaxwellPlaneStrain::_nondimStateVars(PylithScalar* const values,
 							const int nvalues) const
 { // _nondimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->nondimensionalize(&values[s_stressZZInitial], 1, pressureScale);
 
   PetscLogFlops(1);
@@ -321,14 +321,14 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::materials::MaxwellPlaneStrain::_dimStateVars(double* const values,
+pylith::materials::MaxwellPlaneStrain::_dimStateVars(PylithScalar* const values,
 						     const int nvalues) const
 { // _dimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->dimensionalize(&values[s_stressZZInitial], 1, pressureScale);
 
   PetscLogFlops(1);
@@ -337,10 +337,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::MaxwellPlaneStrain::_calcDensity(double* const density,
-						    const double* properties,
+pylith::materials::MaxwellPlaneStrain::_calcDensity(PylithScalar* const density,
+						    const PylithScalar* properties,
 						    const int numProperties,
-						    const double* stateVars,
+						    const PylithScalar* stateVars,
 						    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -355,17 +355,17 @@
 // material.
 void
 pylith::materials::MaxwellPlaneStrain::_calcStressElastic(
-				         double* const stress,
+				         PylithScalar* const stress,
 					 const int stressSize,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize,
 					 const bool computeStateVars)
 { // _calcStressElastic
@@ -382,15 +382,15 @@
   assert(0 != initialStrain);
   assert(_MaxwellPlaneStrain::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar mu2 = 2.0 * mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e12 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e12 = totalStrain[2] - initialStrain[2];
   
-  const double s12 = lambda * (e11 + e22);
+  const PylithScalar s12 = lambda * (e11 + e22);
 
   stress[0] = s12 + mu2 * e11 + initialStress[0];
   stress[1] = s12 + mu2 * e22 + initialStress[1];
@@ -404,17 +404,17 @@
 // material.
 void
 pylith::materials::MaxwellPlaneStrain::_calcStressViscoelastic(
-				         double* const stress,
+				         PylithScalar* const stress,
 					 const int stressSize,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize,
 					 const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -433,28 +433,28 @@
 
   const int tensorSize = _MaxwellPlaneStrain::tensorSize;
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double maxwellTime = properties[p_maxwellTime];
-  const double stressZZInitial = stateVars[s_stressZZInitial];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
+  const PylithScalar stressZZInitial = stateVars[s_stressZZInitial];
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
   // Initial stress and strain values
-  const double meanStrainInitial = (initialStrain[0] + initialStrain[1]) / 3.0;
-  const double meanStressInitial = (initialStress[0] + initialStress[1] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] + initialStrain[1]) / 3.0;
+  const PylithScalar meanStressInitial = (initialStress[0] + initialStress[1] +
 				    stressZZInitial) / 3.0;
-  const double devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
+  const PylithScalar devStrainInitial[] = {initialStrain[0] - meanStrainInitial,
 				     initialStrain[1] - meanStrainInitial,
 				     initialStrain[2]};
-  const double devStressInitial[] = {initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = {initialStress[0] - meanStressInitial,
 				     initialStress[1] - meanStressInitial,
 				     initialStress[2]};
 
   // Mean stress and strain for t + dt
-  const double meanStrainTpdt = (totalStrain[0] + totalStrain[1]) / 3.0;
-  const double meanStressTpdt = 3.0 * bulkModulus *
+  const PylithScalar meanStrainTpdt = (totalStrain[0] + totalStrain[1]) / 3.0;
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus *
     (meanStrainTpdt - meanStrainInitial) + meanStressInitial;
 
   // Get viscous strains
@@ -466,7 +466,7 @@
 		      initialStrain, initialStrainSize);
   } else {
     memcpy(&_viscousStrain[0], &stateVars[s_viscousStrain],
-	   4 * sizeof(double));
+	   4 * sizeof(PylithScalar));
   } // else
 
   // Compute new stresses
@@ -484,17 +484,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::MaxwellPlaneStrain::_calcElasticConstsElastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -510,11 +510,11 @@
   assert(0 != initialStrain);
   assert(_MaxwellPlaneStrain::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -534,17 +534,17 @@
 // as a viscoelastic material.
 void
 pylith::materials::MaxwellPlaneStrain::_calcElasticConstsViscoelastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -560,16 +560,16 @@
   assert(0 != initialStrain);
   assert(_MaxwellPlaneStrain::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2 / 3.0;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2 / 3.0;
 
-  double dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
+  PylithScalar dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
 
-  const double visFac = mu * dq / 3.0;
+  const PylithScalar visFac = mu * dq / 3.0;
   elasticConsts[ 0] = bulkModulus + 4.0 * visFac; // C1111
   elasticConsts[ 1] = bulkModulus - 2.0 * visFac; // C1122
   elasticConsts[ 2] = 0; // C1112
@@ -587,15 +587,15 @@
 // Update state variables as an elastic material.
 void
 pylith::materials::MaxwellPlaneStrain::_updateStateVarsElastic(
-				         double* const stateVars,
+				         PylithScalar* const stateVars,
 					 const int numStateVars,
-				         const double* properties,
+				         const PylithScalar* properties,
 					 const int numProperties,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -610,16 +610,16 @@
   assert(_MaxwellPlaneStrain::tensorSize == initialStrainSize);
 
   const int tensorSize = _tensorSize;
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double strainTpdt[] = {totalStrain[0] - initialStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0] - initialStrain[0],
 			       totalStrain[1] - initialStrain[1],
 			       0.0,
 			       totalStrain[2] - initialStrain[2]};
 
-  const double meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
+  const PylithScalar meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0 };
 
   stateVars[s_totalStrain] = totalStrain[0];
   stateVars[s_totalStrain + 1] = totalStrain[1];
@@ -638,15 +638,15 @@
 // Update state variables as a viscoelastic material.
 void
 pylith::materials::MaxwellPlaneStrain::_updateStateVarsViscoelastic(
-						 double* const stateVars,
+						 PylithScalar* const stateVars,
 						 const int numStateVars,
-						 const double* properties,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* totalStrain,
+						 const PylithScalar* totalStrain,
 						 const int strainSize,
-						 const double* initialStress,
+						 const PylithScalar* initialStress,
 						 const int initialStressSize,
-						 const double* initialStrain,
+						 const PylithScalar* initialStrain,
 						 const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -668,9 +668,9 @@
 		    initialStress, initialStressSize,
 		    initialStrain, initialStrainSize);
 
-  memcpy(&stateVars[s_totalStrain], totalStrain, tensorSize * sizeof(double));
+  memcpy(&stateVars[s_totalStrain], totalStrain, tensorSize * sizeof(PylithScalar));
 
-  memcpy(&stateVars[s_viscousStrain], &_viscousStrain[0], 4 * sizeof(double));
+  memcpy(&stateVars[s_viscousStrain], &_viscousStrain[0], 4 * sizeof(PylithScalar));
 
   _needNewJacobian = false;
 
@@ -678,11 +678,11 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::MaxwellPlaneStrain::_stableTimeStepImplicit(
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
@@ -690,8 +690,8 @@
   assert(0 != stateVars);
   assert(_numVarsQuadPt == numStateVars);
 
-  const double maxwellTime = properties[p_maxwellTime];
-  const double dtStable = 0.2*maxwellTime;
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
+  const PylithScalar dtStable = 0.2*maxwellTime;
 
   return dtStable;
 } // _stableTimeStepImplicit
@@ -700,15 +700,15 @@
 // Compute viscous strain for current time step.
 void
 pylith::materials::MaxwellPlaneStrain::_computeStateVars(
-				         const double* stateVars,
+				         const PylithScalar* stateVars,
 					 const int numStateVars,
-				         const double* properties,
+				         const PylithScalar* properties,
 					 const int numProperties,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _computeStateVars
   assert(0 != stateVars);
@@ -723,28 +723,28 @@
   assert(_MaxwellPlaneStrain::tensorSize == initialStrainSize);
 
   const int tensorSize = _tensorSize;
-  const double maxwellTime = properties[p_maxwellTime];
+  const PylithScalar maxwellTime = properties[p_maxwellTime];
 
-  const double strainTpdt[] = {totalStrain[0],
+  const PylithScalar strainTpdt[] = {totalStrain[0],
 			       totalStrain[1],
 			       0.0,
 			       totalStrain[2]};
-  const double strainT[] = {stateVars[s_totalStrain+0],
+  const PylithScalar strainT[] = {stateVars[s_totalStrain+0],
 			    stateVars[s_totalStrain+1],
 			    0.0,
 			    stateVars[s_totalStrain+2]};
   
-  const double meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
-  const double meanStrainT = (strainT[0] + strainT[1])/3.0;
+  const PylithScalar meanStrainTpdt = (strainTpdt[0] + strainTpdt[1])/3.0;
+  const PylithScalar meanStrainT = (strainT[0] + strainT[1])/3.0;
 
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0 };
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0 };
 
   // Time integration.
-  double dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
-  const double expFac = exp(-_dt/maxwellTime);
+  PylithScalar dq = ViscoelasticMaxwell::viscousStrainParam(_dt, maxwellTime);
+  const PylithScalar expFac = exp(-_dt/maxwellTime);
 
-  double devStrainTpdt = 0.0;
-  double devStrainT = 0.0;
+  PylithScalar devStrainTpdt = 0.0;
+  PylithScalar devStrainT = 0.0;
 
   for (int iComp=0; iComp < 4; ++iComp) {
     devStrainTpdt = strainTpdt[iComp] - diag[iComp] * meanStrainTpdt;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -75,15 +75,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -91,7 +91,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -99,15 +99,15 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   /** Nondimensionalize state variables..
    *
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
                         const int nvalues) const;
 
   /** Dimensionalize state variables.
@@ -115,7 +115,7 @@
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
                      const int nvalues) const;
 
   /** Compute density from properties.
@@ -126,10 +126,10 @@
    * @param stateVars Number of state variables.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -152,17 +152,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -181,17 +181,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Update state variables (for next time step).
@@ -207,15 +207,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -227,9 +227,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -237,46 +237,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::MaxwellPlaneStrain::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::MaxwellPlaneStrain::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::MaxwellPlaneStrain::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -298,17 +298,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -328,17 +328,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -358,17 +358,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-			         const double* initialStress,
+			         const PylithScalar* initialStress,
 			         const int initialStressSize,
-			         const double* initialStrain,
+			         const PylithScalar* initialStrain,
 			         const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -387,17 +387,17 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-			              const double* initialStress,
+			              const PylithScalar* initialStress,
 			              const int initialStressSize,
-			              const double* initialStrain,
+			              const PylithScalar* initialStrain,
 			              const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -413,15 +413,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -437,15 +437,15 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute viscous strains (state variables) for the current time
@@ -462,21 +462,21 @@
    * @param initialStrain Initial strain tensor at location.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _computeStateVars(const double* stateVars,
+  void _computeStateVars(const PylithScalar* stateVars,
 			 const int numStateVars,
-			 const double* properties,
+			 const PylithScalar* properties,
 			 const int numProperties,
-			 const double* totalStrain,
+			 const PylithScalar* totalStrain,
 			 const int strainSize,
-			 const double* initialStress,
+			 const PylithScalar* initialStress,
 			 const int initialStressSize,
-			 const double* initialStrain,
+			 const PylithScalar* initialStrain,
 			 const int initialStrainSize);
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
-  double_array _viscousStrain; ///< Array for viscous strain tensor
+  scalar_array _viscousStrain; ///< Array for viscous strain tensor
 
   /// Method to use for _calcElasticConsts().
   calcElasticConsts_fn_type _calcElasticConstsFn;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/MaxwellPlaneStrain.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::MaxwellPlaneStrain::timeStep(const double dt) {
+pylith::materials::MaxwellPlaneStrain::timeStep(const PylithScalar dt) {
   // Jacobian needs to be reformed if the time step size changes.
   if (_dt > 0.0 && dt != _dt)
     _needNewJacobian = true;
@@ -36,17 +36,17 @@
 // Compute stress tensor from parameters.
 inline
 void
-pylith::materials::MaxwellPlaneStrain::_calcStress(double* const stress,
+pylith::materials::MaxwellPlaneStrain::_calcStress(PylithScalar* const stress,
 						   const int stressSize,
-						   const double* properties,
+						   const PylithScalar* properties,
 						   const int numProperties,
-						   const double* stateVars,
+						   const PylithScalar* stateVars,
 						   const int numStateVars,
-						   const double* totalStrain,
+						   const PylithScalar* totalStrain,
 						   const int strainSize,
-						   const double* initialStress,
+						   const PylithScalar* initialStress,
 						   const int initialStressSize,
-						   const double* initialStrain,
+						   const PylithScalar* initialStrain,
 						   const int initialStrainSize,
 						   const bool computeStateVars) {
   assert(0 != _calcStressFn);
@@ -63,17 +63,17 @@
 inline
 void
 pylith::materials::MaxwellPlaneStrain::_calcElasticConsts(
-						 double* const elasticConsts,
+						 PylithScalar* const elasticConsts,
 						 const int numElasticConsts,
-						 const double* properties,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* stateVars,
+						 const PylithScalar* stateVars,
 						 const int numStateVars,
-						 const double* totalStrain,
+						 const PylithScalar* totalStrain,
 						 const int strainSize,
-						 const double* initialStress,
+						 const PylithScalar* initialStress,
 						 const int initialStressSize,
-						 const double* initialStrain,
+						 const PylithScalar* initialStrain,
 						 const int initialStrainSize) {
   assert(0 != _calcElasticConstsFn);
   CALL_MEMBER_FN(*this, _calcElasticConstsFn)(elasticConsts, numElasticConsts,
@@ -87,15 +87,15 @@
 // Update state variables after solve.
 inline
 void
-pylith::materials::MaxwellPlaneStrain::_updateStateVars(double* const stateVars,
+pylith::materials::MaxwellPlaneStrain::_updateStateVars(PylithScalar* const stateVars,
 						  const int numStateVars,
-						  const double* properties,
+						  const PylithScalar* properties,
 						  const int numProperties,
-						  const double* totalStrain,
+						  const PylithScalar* totalStrain,
 						  const int strainSize,
-						  const double* initialStress,
+						  const PylithScalar* initialStress,
 						  const int initialStressSize,
-						  const double* initialStrain,
+						  const PylithScalar* initialStrain,
 						  const int initialStrainSize) {
   assert(0 != _updateStateVarsFn);
   CALL_MEMBER_FN(*this, _updateStateVarsFn)(stateVars, numStateVars,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "Metadata.hh" // USES Metadata
 #include "EffectiveStress.hh" // USES EffectiveStress
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 #include "pylith/utils/constdefs.h" // USES PYLITH_MAXDOUBLE
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -204,19 +204,19 @@
 // Compute properties from values in spatial database.
 void
 pylith::materials::PowerLaw3D::_dbToProperties(
-				double* const propValues,
-				const double_array& dbValues)
+				PylithScalar* const propValues,
+				const scalar_array& dbValues)
 { // _dbToProperties
   assert(0 != propValues);
   const int numDBValues = dbValues.size();
   assert(_PowerLaw3D::numDBProperties == numDBValues);
 
-  const double density = dbValues[db_density];
-  const double vs = dbValues[db_vs];
-  const double vp = dbValues[db_vp];
-  const double referenceStrainRate = dbValues[db_referenceStrainRate];
-  const double referenceStress = dbValues[db_referenceStress];
-  const double powerLawExponent = dbValues[db_powerLawExponent];
+  const PylithScalar density = dbValues[db_density];
+  const PylithScalar vs = dbValues[db_vs];
+  const PylithScalar vp = dbValues[db_vp];
+  const PylithScalar referenceStrainRate = dbValues[db_referenceStrainRate];
+  const PylithScalar referenceStress = dbValues[db_referenceStress];
+  const PylithScalar powerLawExponent = dbValues[db_powerLawExponent];
  
   if (density <= 0.0 || vs <= 0.0 || vp <= 0.0 || referenceStrainRate <= 0.0
       || referenceStress <= 0.0 || powerLawExponent < 1.0) {
@@ -232,8 +232,8 @@
     throw std::runtime_error(msg.str());
   } // if
 
-  const double mu = density * vs*vs;
-  const double lambda = density * vp*vp - 2.0*mu;
+  const PylithScalar mu = density * vs*vs;
+  const PylithScalar lambda = density * vp*vp - 2.0*mu;
 
   if (lambda <= 0.0) {
     std::ostringstream msg;
@@ -258,17 +258,17 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize properties.
 void
-pylith::materials::PowerLaw3D::_nondimProperties(double* const values,
+pylith::materials::PowerLaw3D::_nondimProperties(PylithScalar* const values,
 					         const int nvalues) const
 { // _nondimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
-  const double strainRateScale = 1.0/timeScale;
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar strainRateScale = 1.0/timeScale;
 
   values[p_density] = 
     _normalizer->nondimensionalize(values[p_density], densityScale);
@@ -288,17 +288,17 @@
 // ----------------------------------------------------------------------
 // Dimensionalize properties.
 void
-pylith::materials::PowerLaw3D::_dimProperties(double* const values,
+pylith::materials::PowerLaw3D::_dimProperties(PylithScalar* const values,
 						      const int nvalues) const
 { // _dimProperties
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numPropsQuadPt);
 
-  const double densityScale = _normalizer->densityScale();
-  const double pressureScale = _normalizer->pressureScale();
-  const double timeScale = _normalizer->timeScale();
-  const double strainRateScale = 1.0/timeScale;
+  const PylithScalar densityScale = _normalizer->densityScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
+  const PylithScalar timeScale = _normalizer->timeScale();
+  const PylithScalar strainRateScale = 1.0/timeScale;
 
   values[p_density] = 
     _normalizer->dimensionalize(values[p_density], densityScale);
@@ -318,8 +318,8 @@
 // Compute initial state variables from values in spatial database.
 void
 pylith::materials::PowerLaw3D::_dbToStateVars(
-				double* const stateValues,
-				const double_array& dbValues)
+				PylithScalar* const stateValues,
+				const scalar_array& dbValues)
 { // _dbToStateVars
   assert(0 != stateValues);
   const int numDBValues = dbValues.size();
@@ -329,9 +329,9 @@
   assert(totalSize == _numVarsQuadPt);
   assert(totalSize == numDBValues);
   memcpy(&stateValues[s_viscousStrain], &dbValues[db_viscousStrain],
-	 _tensorSize*sizeof(double));
+	 _tensorSize*sizeof(PylithScalar));
   memcpy(&stateValues[s_stress], &dbValues[db_stress],
-	 _tensorSize*sizeof(double));
+	 _tensorSize*sizeof(PylithScalar));
 
   PetscLogFlops(0);
 } // _dbToStateVars
@@ -339,14 +339,14 @@
 // ----------------------------------------------------------------------
 // Nondimensionalize state variables.
 void
-pylith::materials::PowerLaw3D::_nondimStateVars(double* const values,
+pylith::materials::PowerLaw3D::_nondimStateVars(PylithScalar* const values,
 						const int nvalues) const
 { // _nondimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->nondimensionalize(&values[s_stress], _tensorSize, pressureScale);
 
   PetscLogFlops(_tensorSize);
@@ -355,14 +355,14 @@
 // ----------------------------------------------------------------------
 // Dimensionalize state variables.
 void
-pylith::materials::PowerLaw3D::_dimStateVars(double* const values,
+pylith::materials::PowerLaw3D::_dimStateVars(PylithScalar* const values,
 					     const int nvalues) const
 { // _dimStateVars
   assert(0 != _normalizer);
   assert(0 != values);
   assert(nvalues == _numVarsQuadPt);
 
-  const double pressureScale = _normalizer->pressureScale();
+  const PylithScalar pressureScale = _normalizer->pressureScale();
   _normalizer->dimensionalize(&values[s_stress], _tensorSize, pressureScale);
 
   PetscLogFlops(_tensorSize);
@@ -371,10 +371,10 @@
 // ----------------------------------------------------------------------
 // Compute density at location from properties.
 void
-pylith::materials::PowerLaw3D::_calcDensity(double* const density,
-					    const double* properties,
+pylith::materials::PowerLaw3D::_calcDensity(PylithScalar* const density,
+					    const PylithScalar* properties,
 					    const int numProperties,
-					    const double* stateVars,
+					    const PylithScalar* stateVars,
 					    const int numStateVars)
 { // _calcDensity
   assert(0 != density);
@@ -386,39 +386,39 @@
 
 // ----------------------------------------------------------------------
 // Get stable time step for implicit time integration.
-double
+PylithScalar
 pylith::materials::PowerLaw3D::_stableTimeStepImplicit(
-				  const double* properties,
+				  const PylithScalar* properties,
 				  const int numProperties,
-				  const double* stateVars,
+				  const PylithScalar* stateVars,
 				  const int numStateVars) const
 { // _stableTimeStepImplicit
   assert(0 != properties);
   assert(_numPropsQuadPt == numProperties);
   assert(0 != stateVars);
   assert(_numVarsQuadPt == numStateVars);
-  const double mu = properties[p_mu];
-  const double referenceStrainRate = properties[p_referenceStrainRate];
-  const double referenceStress = properties[p_referenceStress];
-  const double powerLawExp = properties[p_powerLawExponent];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar referenceStrainRate = properties[p_referenceStrainRate];
+  const PylithScalar referenceStress = properties[p_referenceStress];
+  const PylithScalar powerLawExp = properties[p_powerLawExponent];
 
-  const double stress[] = {stateVars[s_stress],
+  const PylithScalar stress[] = {stateVars[s_stress],
 			   stateVars[s_stress + 1],
 			   stateVars[s_stress + 2],
 			   stateVars[s_stress + 3],
 			   stateVars[s_stress + 4],
 			   stateVars[s_stress + 5]};
-  const double meanStress = (stress[0] + stress[1] + stress[2])/3.0;
-  const double devStress[] = {stress[0] - meanStress,
+  const PylithScalar meanStress = (stress[0] + stress[1] + stress[2])/3.0;
+  const PylithScalar devStress[] = {stress[0] - meanStress,
 			      stress[1] - meanStress,
 			      stress[2] - meanStress,
 			      stress[3],
 			      stress[4],
 			      stress[5] };
-  const double devStressProd =
+  const PylithScalar devStressProd =
     pylith::materials::ElasticMaterial::scalarProduct3D(devStress, devStress);
-  const double effStress = sqrt(0.5 * devStressProd);
-  double dtTest = 0.0;
+  const PylithScalar effStress = sqrt(0.5 * devStressProd);
+  PylithScalar dtTest = 0.0;
   if (effStress <= 0.0) {
     dtTest = pylith::PYLITH_MAXDOUBLE;
   } else {
@@ -426,10 +426,10 @@
     pow((referenceStress/effStress), (powerLawExp - 1.0)) *
     (referenceStress/mu)/referenceStrainRate;
   } //else
-  const double dtStable = dtTest;
+  const PylithScalar dtStable = dtTest;
 
 #if 0 // DEBUGGING
-  double maxwellTime = 10.0 * dtStable;
+  PylithScalar maxwellTime = 10.0 * dtStable;
   std::cout << "Maxwell time:  " << maxwellTime << std::endl;
 #endif
   PetscLogFlops(21);
@@ -441,17 +441,17 @@
 // material.
 void
 pylith::materials::PowerLaw3D::_calcStressElastic(
-				         double* const stress,
+				         PylithScalar* const stress,
 					 const int stressSize,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize,
 					 const bool computeStateVars)
 { // _calcStressElastic
@@ -468,19 +468,19 @@
   assert(0 != initialStrain);
   assert(_PowerLaw3D::tensorSize == initialStrainSize);
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double mu2 = 2.0 * mu;
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar mu2 = 2.0 * mu;
 
-  const double e11 = totalStrain[0] - initialStrain[0];
-  const double e22 = totalStrain[1] - initialStrain[1];
-  const double e33 = totalStrain[2] - initialStrain[2];
-  const double e12 = totalStrain[3] - initialStrain[3];
-  const double e23 = totalStrain[4] - initialStrain[4];
-  const double e13 = totalStrain[5] - initialStrain[5];
+  const PylithScalar e11 = totalStrain[0] - initialStrain[0];
+  const PylithScalar e22 = totalStrain[1] - initialStrain[1];
+  const PylithScalar e33 = totalStrain[2] - initialStrain[2];
+  const PylithScalar e12 = totalStrain[3] - initialStrain[3];
+  const PylithScalar e23 = totalStrain[4] - initialStrain[4];
+  const PylithScalar e13 = totalStrain[5] - initialStrain[5];
   
-  const double traceStrainTpdt = e11 + e22 + e33;
-  const double s123 = lambda * traceStrainTpdt;
+  const PylithScalar traceStrainTpdt = e11 + e22 + e33;
+  const PylithScalar s123 = lambda * traceStrainTpdt;
 
   stress[0] = s123 + mu2*e11 + initialStress[0];
   stress[1] = s123 + mu2*e22 + initialStress[1];
@@ -497,17 +497,17 @@
 // material.
 void
 pylith::materials::PowerLaw3D::_calcStressViscoelastic(
-					double* const stress,
+					PylithScalar* const stress,
 					const int stressSize,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize,
 					const bool computeStateVars)
 { // _calcStressViscoelastic
@@ -530,112 +530,112 @@
   // time step.
   if (computeStateVars) {
 
-    const double mu = properties[p_mu];
-    const double lambda = properties[p_lambda];
-    const double referenceStrainRate = properties[p_referenceStrainRate];
-    const double referenceStress = properties[p_referenceStress];
-    const double powerLawExp = properties[p_powerLawExponent];
-    const double visStrainT[] = {stateVars[s_viscousStrain],
+    const PylithScalar mu = properties[p_mu];
+    const PylithScalar lambda = properties[p_lambda];
+    const PylithScalar referenceStrainRate = properties[p_referenceStrainRate];
+    const PylithScalar referenceStress = properties[p_referenceStress];
+    const PylithScalar powerLawExp = properties[p_powerLawExponent];
+    const PylithScalar visStrainT[] = {stateVars[s_viscousStrain],
 				 stateVars[s_viscousStrain + 1],
 				 stateVars[s_viscousStrain + 2],
 				 stateVars[s_viscousStrain + 3],
 				 stateVars[s_viscousStrain + 4],
 				 stateVars[s_viscousStrain + 5]};
-    const double stressT[] = {stateVars[s_stress],
+    const PylithScalar stressT[] = {stateVars[s_stress],
 			      stateVars[s_stress + 1],
 			      stateVars[s_stress + 2],
 			      stateVars[s_stress + 3],
 			      stateVars[s_stress + 4],
 			      stateVars[s_stress + 5]};
 
-    const double mu2 = 2.0 * mu;
-    const double bulkModulus = lambda + mu2/3.0;
-    const double ae = 1.0/mu2;
-    const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+    const PylithScalar mu2 = 2.0 * mu;
+    const PylithScalar bulkModulus = lambda + mu2/3.0;
+    const PylithScalar ae = 1.0/mu2;
+    const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
     // Need to figure out how time integration parameter alpha is going to be
     // specified.  It should probably be specified in the problem definition and
     // then used only by the material types that use it.  For now we are setting
     // it to 0.5, which should probably be the default value.
-    const double alpha = 0.5;
-    const double timeFac = _dt * (1.0 - alpha);
+    const PylithScalar alpha = 0.5;
+    const PylithScalar timeFac = _dt * (1.0 - alpha);
 
     // Initial stress values
-    const double meanStressInitial = (initialStress[0] +
+    const PylithScalar meanStressInitial = (initialStress[0] +
 				      initialStress[1] +
 				      initialStress[2])/3.0;
-    const double devStressInitial[] = { initialStress[0] - meanStressInitial,
+    const PylithScalar devStressInitial[] = { initialStress[0] - meanStressInitial,
 					initialStress[1] - meanStressInitial,
 					initialStress[2] - meanStressInitial,
 					initialStress[3],
 					initialStress[4],
 					initialStress[5] };
-    const double stressInvar2Initial = 0.5 *
+    const PylithScalar stressInvar2Initial = 0.5 *
       pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							  devStressInitial);
 
     // Initial strain values
-    const double meanStrainInitial = (initialStrain[0] +
+    const PylithScalar meanStrainInitial = (initialStrain[0] +
 				      initialStrain[1] +
 				      initialStrain[2])/3.0;
 
     // Values for current time step
-    const double e11 = totalStrain[0];
-    const double e22 = totalStrain[1];
-    const double e33 = totalStrain[2];
-    const double meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
-    const double meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
+    const PylithScalar e11 = totalStrain[0];
+    const PylithScalar e22 = totalStrain[1];
+    const PylithScalar e33 = totalStrain[2];
+    const PylithScalar meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
+    const PylithScalar meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
 
     // Note that I use the initial strain rather than the deviatoric initial
     // strain since otherwise the initial mean strain would get used twice.
-    const double strainPPTpdt[] =
+    const PylithScalar strainPPTpdt[] =
       { totalStrain[0] - meanStrainTpdt - visStrainT[0] - initialStrain[0],
 	totalStrain[1] - meanStrainTpdt - visStrainT[1] - initialStrain[1],
 	totalStrain[2] - meanStrainTpdt - visStrainT[2] - initialStrain[2],
 	totalStrain[3] - visStrainT[3] - initialStrain[3],
 	totalStrain[4] - visStrainT[4] - initialStrain[4],
 	totalStrain[5] - visStrainT[5] - initialStrain[5] };
-    const double strainPPInvar2Tpdt = 0.5 *
+    const PylithScalar strainPPInvar2Tpdt = 0.5 *
       pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							  strainPPTpdt);
 
     // Values for previous time step
-    const double meanStressT = (stressT[0] +
+    const PylithScalar meanStressT = (stressT[0] +
 				stressT[1] +
 				stressT[2])/3.0;
-    const double devStressT[] = { stressT[0] - meanStressT,
+    const PylithScalar devStressT[] = { stressT[0] - meanStressT,
 				  stressT[1] - meanStressT,
 				  stressT[2] - meanStressT,
 				  stressT[3],
 				  stressT[4],
 				  stressT[5] };
-    const double stressInvar2T = 0.5 *
+    const PylithScalar stressInvar2T = 0.5 *
       pylith::materials::ElasticMaterial::scalarProduct3D(devStressT,
 							  devStressT);
-    const double effStressT = sqrt(stressInvar2T);
+    const PylithScalar effStressT = sqrt(stressInvar2T);
 
     // Finish defining parameters needed for root-finding algorithm.
-    const double b = strainPPInvar2Tpdt + ae *
+    const PylithScalar b = strainPPInvar2Tpdt + ae *
       pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							  devStressInitial) +
       ae * ae * stressInvar2Initial;
-    const double c =
+    const PylithScalar c =
       (pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							   devStressT) +
        ae *
        pylith::materials::ElasticMaterial::scalarProduct3D(devStressT,
 							   devStressInitial)) *
       timeFac;
-    const double d = timeFac * effStressT;
+    const PylithScalar d = timeFac * effStressT;
 
     PetscLogFlops(92);
 
     // If b, c, and d are all zero, then the effective stress is zero and we
     // don't need a root-finding algorithm. Otherwise, use the algorithm to
     // find the effective stress.
-    double effStressTpdt = 0.0;
+    PylithScalar effStressTpdt = 0.0;
     if (b != 0.0 || c != 0.0 || d != 0.0) {
-      const double stressScale = mu;
+      const PylithScalar stressScale = mu;
 
       // Put parameters into a struct and call root-finding algorithm.
       _effStressParams.ae = ae;
@@ -649,7 +649,7 @@
       _effStressParams.referenceStrainRate = referenceStrainRate;
       _effStressParams.referenceStress = referenceStress;
       
-      const double effStressInitialGuess = effStressT;
+      const PylithScalar effStressInitialGuess = effStressT;
 
       effStressTpdt =
 	EffectiveStress::calculate<PowerLaw3D>(effStressInitialGuess,
@@ -657,14 +657,14 @@
     } // if
 
     // Compute stresses from effective stress.
-    const double effStressTau = (1.0 - alpha) * effStressT +
+    const PylithScalar effStressTau = (1.0 - alpha) * effStressT +
       alpha * effStressTpdt;
-    const double gammaTau = referenceStrainRate *
+    const PylithScalar gammaTau = referenceStrainRate *
       pow((effStressTau/referenceStress),
 	  (powerLawExp - 1.0))/referenceStress;
-    const double factor1 = 1.0/(ae + alpha * _dt * gammaTau);
-    const double factor2 = timeFac * gammaTau;
-    double devStressTpdt = 0.0;
+    const PylithScalar factor1 = 1.0/(ae + alpha * _dt * gammaTau);
+    const PylithScalar factor2 = timeFac * gammaTau;
+    PylithScalar devStressTpdt = 0.0;
 
     for (int iComp=0; iComp < tensorSize; ++iComp) {
       devStressTpdt = factor1 *
@@ -678,7 +678,7 @@
     // If state variables have already been updated, current stress is already
     // contained in stress.
   } else {
-    memcpy(&stress[0], &stateVars[s_stress], tensorSize * sizeof(double));
+    memcpy(&stress[0], &stateVars[s_stress], tensorSize * sizeof(PylithScalar));
   } // else
 
 } // _calcStressViscoelastic
@@ -686,25 +686,25 @@
 // ----------------------------------------------------------------------
 // Effective stress function that computes effective stress function only
 // (no derivative).
-double
-pylith::materials::PowerLaw3D::effStressFunc(const double effStressTpdt)
+PylithScalar
+pylith::materials::PowerLaw3D::effStressFunc(const PylithScalar effStressTpdt)
 { // effStressFunc
-  const double ae = _effStressParams.ae;
-  const double b = _effStressParams.b;
-  const double c = _effStressParams.c;
-  const double d = _effStressParams.d;
-  const double alpha = _effStressParams.alpha;
-  const double dt = _effStressParams.dt;
-  const double effStressT = _effStressParams.effStressT;
-  const double powerLawExp = _effStressParams.powerLawExp;
-  const double referenceStrainRate = _effStressParams.referenceStrainRate;
-  const double referenceStress = _effStressParams.referenceStress;
-  const double factor1 = 1.0-alpha;
-  const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
-  const double gammaTau = referenceStrainRate * 
+  const PylithScalar ae = _effStressParams.ae;
+  const PylithScalar b = _effStressParams.b;
+  const PylithScalar c = _effStressParams.c;
+  const PylithScalar d = _effStressParams.d;
+  const PylithScalar alpha = _effStressParams.alpha;
+  const PylithScalar dt = _effStressParams.dt;
+  const PylithScalar effStressT = _effStressParams.effStressT;
+  const PylithScalar powerLawExp = _effStressParams.powerLawExp;
+  const PylithScalar referenceStrainRate = _effStressParams.referenceStrainRate;
+  const PylithScalar referenceStress = _effStressParams.referenceStress;
+  const PylithScalar factor1 = 1.0-alpha;
+  const PylithScalar effStressTau = factor1 * effStressT + alpha * effStressTpdt;
+  const PylithScalar gammaTau = referenceStrainRate * 
     pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
-  const double a = ae + alpha * dt * gammaTau;
-  const double y = a * a * effStressTpdt * effStressTpdt - b +
+  const PylithScalar a = ae + alpha * dt * gammaTau;
+  const PylithScalar y = a * a * effStressTpdt * effStressTpdt - b +
     c * gammaTau - d * d * gammaTau * gammaTau;
 
   PetscLogFlops(21);
@@ -715,27 +715,27 @@
 // ----------------------------------------------------------------------
 // Effective stress function that computes effective stress function
 // derivative only (no function value).
-double
-pylith::materials::PowerLaw3D::effStressDerivFunc(const double effStressTpdt)
+PylithScalar
+pylith::materials::PowerLaw3D::effStressDerivFunc(const PylithScalar effStressTpdt)
 { // effStressDFunc
-  const double ae = _effStressParams.ae;
-  const double c = _effStressParams.c;
-  const double d = _effStressParams.d;
-  const double alpha = _effStressParams.alpha;
-  const double dt = _effStressParams.dt;
-  const double effStressT = _effStressParams.effStressT;
-  const double powerLawExp = _effStressParams.powerLawExp;
-  const double referenceStrainRate = _effStressParams.referenceStrainRate;
-  const double referenceStress = _effStressParams.referenceStress;
-  const double factor1 = 1.0-alpha;
-  const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
-  const double gammaTau = referenceStrainRate *
+  const PylithScalar ae = _effStressParams.ae;
+  const PylithScalar c = _effStressParams.c;
+  const PylithScalar d = _effStressParams.d;
+  const PylithScalar alpha = _effStressParams.alpha;
+  const PylithScalar dt = _effStressParams.dt;
+  const PylithScalar effStressT = _effStressParams.effStressT;
+  const PylithScalar powerLawExp = _effStressParams.powerLawExp;
+  const PylithScalar referenceStrainRate = _effStressParams.referenceStrainRate;
+  const PylithScalar referenceStress = _effStressParams.referenceStress;
+  const PylithScalar factor1 = 1.0-alpha;
+  const PylithScalar effStressTau = factor1 * effStressT + alpha * effStressTpdt;
+  const PylithScalar gammaTau = referenceStrainRate *
     pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
-  const double a = ae + alpha * dt * gammaTau;
-  const double dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
+  const PylithScalar a = ae + alpha * dt * gammaTau;
+  const PylithScalar dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
     pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
     (referenceStress * referenceStress);
-  const double dy = 2.0 * a * a * effStressTpdt + dGammaTau *
+  const PylithScalar dy = 2.0 * a * a * effStressTpdt + dGammaTau *
     (2.0 * a * alpha * dt * effStressTpdt * effStressTpdt +
      c - 2.0 * d * d * gammaTau);
   PetscLogFlops(36);
@@ -747,31 +747,31 @@
 // Effective stress function that computes effective stress function
 // and derivative.
 void
-pylith::materials::PowerLaw3D::effStressFuncDerivFunc(double* func,
-						      double* dfunc,
-						      const double effStressTpdt)
+pylith::materials::PowerLaw3D::effStressFuncDerivFunc(PylithScalar* func,
+						      PylithScalar* dfunc,
+						      const PylithScalar effStressTpdt)
 { // effStressFuncDFunc
-  double y = *func;
-  double dy = *dfunc;
+  PylithScalar y = *func;
+  PylithScalar dy = *dfunc;
 
-  const double ae = _effStressParams.ae;
-  const double b = _effStressParams.b;
-  const double c = _effStressParams.c;
-  const double d = _effStressParams.d;
-  const double alpha = _effStressParams.alpha;
-  const double dt = _effStressParams.dt;
-  const double effStressT = _effStressParams.effStressT;
-  const double powerLawExp = _effStressParams.powerLawExp;
-  const double referenceStrainRate = _effStressParams.referenceStrainRate;
-  const double referenceStress = _effStressParams.referenceStress;
-  const double factor1 = 1.0-alpha;
-  const double effStressTau = factor1 * effStressT + alpha * effStressTpdt;
-  const double gammaTau = referenceStrainRate *
+  const PylithScalar ae = _effStressParams.ae;
+  const PylithScalar b = _effStressParams.b;
+  const PylithScalar c = _effStressParams.c;
+  const PylithScalar d = _effStressParams.d;
+  const PylithScalar alpha = _effStressParams.alpha;
+  const PylithScalar dt = _effStressParams.dt;
+  const PylithScalar effStressT = _effStressParams.effStressT;
+  const PylithScalar powerLawExp = _effStressParams.powerLawExp;
+  const PylithScalar referenceStrainRate = _effStressParams.referenceStrainRate;
+  const PylithScalar referenceStress = _effStressParams.referenceStress;
+  const PylithScalar factor1 = 1.0-alpha;
+  const PylithScalar effStressTau = factor1 * effStressT + alpha * effStressTpdt;
+  const PylithScalar gammaTau = referenceStrainRate *
     pow((effStressTau/referenceStress), (powerLawExp - 1.0))/referenceStress;
-  const double dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
+  const PylithScalar dGammaTau = referenceStrainRate * alpha * (powerLawExp - 1.0) *
     pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
     (referenceStress * referenceStress);
-  const double a = ae + alpha * dt * gammaTau;
+  const PylithScalar a = ae + alpha * dt * gammaTau;
   y = a * a * effStressTpdt * effStressTpdt -
     b +
     c * gammaTau -
@@ -791,17 +791,17 @@
 // Compute derivative of elasticity matrix at location from properties.
 void
 pylith::materials::PowerLaw3D::_calcElasticConstsElastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsElastic
   assert(0 != elasticConsts);
@@ -817,11 +817,11 @@
   assert(0 != initialStrain);
   assert(_PowerLaw3D::tensorSize == initialStrainSize);
  
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
 
-  const double mu2 = 2.0 * mu;
-  const double lambda2mu = lambda + mu2;
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar lambda2mu = lambda + mu2;
 
   elasticConsts[ 0] = lambda2mu; // C1111
   elasticConsts[ 1] = lambda; // C1122
@@ -868,17 +868,17 @@
 // as a viscoelastic material.
 void
 pylith::materials::PowerLaw3D::_calcElasticConstsViscoelastic(
-				         double* const elasticConsts,
+				         PylithScalar* const elasticConsts,
 					 const int numElasticConsts,
-					 const double* properties,
+					 const PylithScalar* properties,
 					 const int numProperties,
-					 const double* stateVars,
+					 const PylithScalar* stateVars,
 					 const int numStateVars,
-					 const double* totalStrain,
+					 const PylithScalar* totalStrain,
 					 const int strainSize,
-					 const double* initialStress,
+					 const PylithScalar* initialStress,
 					 const int initialStressSize,
-					 const double* initialStrain,
+					 const PylithScalar* initialStrain,
 					 const int initialStrainSize)
 { // _calcElasticConstsViscoelastic
   assert(0 != elasticConsts);
@@ -896,105 +896,105 @@
 
   const int tensorSize = _tensorSize;
 
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double referenceStrainRate = properties[p_referenceStrainRate];
-  const double referenceStress = properties[p_referenceStress];
-  const double powerLawExp = properties[p_powerLawExponent];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar referenceStrainRate = properties[p_referenceStrainRate];
+  const PylithScalar referenceStress = properties[p_referenceStress];
+  const PylithScalar powerLawExp = properties[p_powerLawExponent];
     
   // State variables.
-  const double visStrainT[] = {stateVars[s_viscousStrain],
+  const PylithScalar visStrainT[] = {stateVars[s_viscousStrain],
 			       stateVars[s_viscousStrain + 1],
 			       stateVars[s_viscousStrain + 2],
 			       stateVars[s_viscousStrain + 3],
 			       stateVars[s_viscousStrain + 4],
 			       stateVars[s_viscousStrain + 5]};
-  const double stressT[] = {stateVars[s_stress],
+  const PylithScalar stressT[] = {stateVars[s_stress],
 			    stateVars[s_stress + 1],
 			    stateVars[s_stress + 2],
 			    stateVars[s_stress + 3],
 			    stateVars[s_stress + 4],
 			    stateVars[s_stress + 5]};
 
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
-  const double ae = 1.0/mu2;
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
+  const PylithScalar ae = 1.0/mu2;
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
     
   // Need to figure out how time integration parameter alpha is going to be
   // specified.  It should probably be specified in the problem definition and
   // then used only by the material types that use it.  For now we are setting
   // it to 0.5, which should probably be the default value.
-  const double alpha = 0.5;
-  const double explicitFac = 1.0 - alpha;
-  const double timeFac = _dt * explicitFac;
+  const PylithScalar alpha = 0.5;
+  const PylithScalar explicitFac = 1.0 - alpha;
+  const PylithScalar timeFac = _dt * explicitFac;
     
   /// Initial state.
   // Initial stress values.
-  const double meanStressInitial = (initialStress[0] +
+  const PylithScalar meanStressInitial = (initialStress[0] +
 				    initialStress[1] +
 				    initialStress[2])/3.0;
-  const double devStressInitial[] = { initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = { initialStress[0] - meanStressInitial,
 				      initialStress[1] - meanStressInitial,
 				      initialStress[2] - meanStressInitial,
 				      initialStress[3],
 				      initialStress[4],
 				      initialStress[5] };
-  const double stressInvar2Initial = 0.5 *
+  const PylithScalar stressInvar2Initial = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							devStressInitial);
 
   // Initial strain values.
-  const double meanStrainInitial = (initialStrain[0] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] +
 				    initialStrain[1] +
 				    initialStrain[2])/3.0;
   
   /// Values for current time step
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
-  const double meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
   
   // Note that I use the initial strain rather than the deviatoric initial
   // strain since otherwise the initial mean strain would get used twice.
   
-  const double strainPPTpdt[] =
+  const PylithScalar strainPPTpdt[] =
     { totalStrain[0] - meanStrainTpdt - visStrainT[0] - initialStrain[0],
       totalStrain[1] - meanStrainTpdt - visStrainT[1] - initialStrain[1],
       totalStrain[2] - meanStrainTpdt - visStrainT[2] - initialStrain[2],
       totalStrain[3] - visStrainT[3] - initialStrain[3],
       totalStrain[4] - visStrainT[4] - initialStrain[4],
       totalStrain[5] - visStrainT[5] - initialStrain[5] };
-  const double strainPPInvar2Tpdt = 0.5 *
+  const PylithScalar strainPPInvar2Tpdt = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							strainPPTpdt);
   
   // Values for previous time step
-  const double meanStressT = (stressT[0] + stressT[1] + stressT[2])/3.0;
-  const double devStressT[] = { stressT[0] - meanStressT,
+  const PylithScalar meanStressT = (stressT[0] + stressT[1] + stressT[2])/3.0;
+  const PylithScalar devStressT[] = { stressT[0] - meanStressT,
 				stressT[1] - meanStressT,
 				stressT[2] - meanStressT,
 				stressT[3],
 				stressT[4],
 				stressT[5] };
-  const double stressInvar2T = 0.5 *
+  const PylithScalar stressInvar2T = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(devStressT, devStressT);
-  const double effStressT = sqrt(stressInvar2T);
+  const PylithScalar effStressT = sqrt(stressInvar2T);
     
   // Finish defining parameters needed for root-finding algorithm.
-  const double b = strainPPInvar2Tpdt +
+  const PylithScalar b = strainPPInvar2Tpdt +
     ae * pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							     devStressInitial) +
     ae * ae * stressInvar2Initial;
-  const double c =
+  const PylithScalar c =
     (pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							 devStressT) +
      ae *
      pylith::materials::ElasticMaterial::scalarProduct3D(devStressT,
 							 devStressInitial)) *
     timeFac;
-  const double d = timeFac * effStressT;
+  const PylithScalar d = timeFac * effStressT;
 
   PetscLogFlops(92);
 
@@ -1015,7 +1015,7 @@
 			      initialStrain,
 			      initialStrainSize);
   } else {
-    const double stressScale = mu;
+    const PylithScalar stressScale = mu;
   
     // Put parameters into a struct and call root-finding algorithm.
     _effStressParams.ae = ae;
@@ -1029,23 +1029,23 @@
     _effStressParams.referenceStrainRate = referenceStrainRate;
     _effStressParams.referenceStress = referenceStress;
     
-    const double effStressInitialGuess = effStressT;
+    const PylithScalar effStressInitialGuess = effStressT;
     
-    const double effStressTpdt =
+    const PylithScalar effStressTpdt =
       EffectiveStress::calculate<PowerLaw3D>(effStressInitialGuess,
 					     stressScale, this);
   
     // Compute quantities at intermediate time tau used to compute values at
     // end of time step.
-    const double effStressTau = (1.0 - alpha) * effStressT +
+    const PylithScalar effStressTau = (1.0 - alpha) * effStressT +
       alpha * effStressTpdt;
-    const double gammaTau = referenceStrainRate *
+    const PylithScalar gammaTau = referenceStrainRate *
       pow((effStressTau/referenceStress),
 	  (powerLawExp - 1.0))/referenceStress;
-    const double a = ae + alpha * _dt * gammaTau;
-    const double factor1 = 1.0/a;
-    const double factor2 = timeFac * gammaTau;
-    const double devStressTpdt[] = {
+    const PylithScalar a = ae + alpha * _dt * gammaTau;
+    const PylithScalar factor1 = 1.0/a;
+    const PylithScalar factor2 = timeFac * gammaTau;
+    const PylithScalar devStressTpdt[] = {
       factor1 *
       (strainPPTpdt[0] - factor2 * devStressT[0] + ae * devStressInitial[0]),
       factor1 *
@@ -1058,30 +1058,30 @@
       (strainPPTpdt[4] - factor2 * devStressT[4] + ae * devStressInitial[4]),
       factor1 *
       (strainPPTpdt[5] - factor2 * devStressT[5] + ae * devStressInitial[5])};
-    const double devStressTau[] = {
+    const PylithScalar devStressTau[] = {
       alpha * devStressT[0] + explicitFac * devStressTpdt[0],
       alpha * devStressT[1] + explicitFac * devStressTpdt[1],
       alpha * devStressT[2] + explicitFac * devStressTpdt[2],
       alpha * devStressT[3] + explicitFac * devStressTpdt[3],
       alpha * devStressT[4] + explicitFac * devStressTpdt[4],
       alpha * devStressT[5] + explicitFac * devStressTpdt[5]};
-    const double factor3 = 0.5 * referenceStrainRate * _dt * alpha *
+    const PylithScalar factor3 = 0.5 * referenceStrainRate * _dt * alpha *
       (powerLawExp - 1.0) *
       pow((effStressTau/referenceStress), (powerLawExp - 2.0))/
       (referenceStress * referenceStress * effStressTpdt);
 
     // Compute deviatoric derivatives
-    const double dStress11dStrain11 = 1.0/
+    const PylithScalar dStress11dStrain11 = 1.0/
       (a + devStressTau[0] * devStressTpdt[0] * factor3);
-    const double dStress22dStrain22 = 1.0/
+    const PylithScalar dStress22dStrain22 = 1.0/
       (a + devStressTau[1] * devStressTpdt[1] * factor3);
-    const double dStress33dStrain33 = 1.0/
+    const PylithScalar dStress33dStrain33 = 1.0/
       (a + devStressTau[2] * devStressTpdt[2] * factor3);
-    const double dStress12dStrain12 = 1.0/
+    const PylithScalar dStress12dStrain12 = 1.0/
       (a + 2.0 * devStressTau[3] * devStressTpdt[3] * factor3);
-    const double dStress23dStrain23 = 1.0/
+    const PylithScalar dStress23dStrain23 = 1.0/
       (a + 2.0 * devStressTau[4] * devStressTpdt[4] * factor3);
-    const double dStress13dStrain13 = 1.0/
+    const PylithScalar dStress13dStrain13 = 1.0/
       (a + 2.0 * devStressTau[5] * devStressTpdt[5] * factor3);
     
     /// Compute tangent matrix.
@@ -1130,15 +1130,15 @@
 // Update state variables.
 void
 pylith::materials::PowerLaw3D::_updateStateVarsElastic(
-				    double* const stateVars,
+				    PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize)
 { // _updateStateVarsElastic
   assert(0 != stateVars);
@@ -1153,7 +1153,7 @@
   assert(_PowerLaw3D::tensorSize == initialStrainSize);
 
   const bool computeStateVars = true;
-  double stress[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+  PylithScalar stress[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
   const int stressSize = strainSize;
   _calcStressElastic(stress, stressSize,
 		     properties, numProperties,
@@ -1175,15 +1175,15 @@
 // Update state variables.
 void
 pylith::materials::PowerLaw3D::_updateStateVarsViscoelastic(
-				    double* const stateVars,
+				    PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize)
 { // _updateStateVarsViscoelastic
   assert(0 != stateVars);
@@ -1201,109 +1201,109 @@
 
   // For now, we are duplicating the functionality of _calcStressViscoelastic,
   // since otherwise we would have to redo a lot of calculations.
-  const double mu = properties[p_mu];
-  const double lambda = properties[p_lambda];
-  const double referenceStrainRate = properties[p_referenceStrainRate];
-  const double referenceStress = properties[p_referenceStress];
-  const double powerLawExp = properties[p_powerLawExponent];
+  const PylithScalar mu = properties[p_mu];
+  const PylithScalar lambda = properties[p_lambda];
+  const PylithScalar referenceStrainRate = properties[p_referenceStrainRate];
+  const PylithScalar referenceStress = properties[p_referenceStress];
+  const PylithScalar powerLawExp = properties[p_powerLawExponent];
 
-  const double visStrainT[] = {stateVars[s_viscousStrain],
+  const PylithScalar visStrainT[] = {stateVars[s_viscousStrain],
 			       stateVars[s_viscousStrain + 1],
 			       stateVars[s_viscousStrain + 2],
 			       stateVars[s_viscousStrain + 3],
 			       stateVars[s_viscousStrain + 4],
 			       stateVars[s_viscousStrain + 5]};
 
-  const double stressT[] = {stateVars[s_stress],
+  const PylithScalar stressT[] = {stateVars[s_stress],
 			    stateVars[s_stress + 1],
 			    stateVars[s_stress + 2],
 			    stateVars[s_stress + 3],
 			    stateVars[s_stress + 4],
 			    stateVars[s_stress + 5]};
   
-  const double mu2 = 2.0 * mu;
-  const double bulkModulus = lambda + mu2/3.0;
-  const double ae = 1.0/mu2;
-  const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+  const PylithScalar mu2 = 2.0 * mu;
+  const PylithScalar bulkModulus = lambda + mu2/3.0;
+  const PylithScalar ae = 1.0/mu2;
+  const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
 
   // Need to figure out how time integration parameter alpha is going to be
   // specified.  It should probably be specified in the problem definition and
   // then used only by the material types that use it.  For now we are setting
   // it to 0.5, which should probably be the default value.
-  const double alpha = 0.5;
-  const double timeFac = _dt * (1.0 - alpha);
+  const PylithScalar alpha = 0.5;
+  const PylithScalar timeFac = _dt * (1.0 - alpha);
 
   // Initial stress values
-  const double meanStressInitial = (initialStress[0] + initialStress[1] +
+  const PylithScalar meanStressInitial = (initialStress[0] + initialStress[1] +
 				    initialStress[2])/3.0;
-  const double devStressInitial[] = { initialStress[0] - meanStressInitial,
+  const PylithScalar devStressInitial[] = { initialStress[0] - meanStressInitial,
 				      initialStress[1] - meanStressInitial,
 				      initialStress[2] - meanStressInitial,
 				      initialStress[3],
 				      initialStress[4],
 				      initialStress[5] };
-  const double stressInvar2Initial = 0.5 *
+  const PylithScalar stressInvar2Initial = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(devStressInitial,
 							devStressInitial);
 
   // Initial strain values
-  const double meanStrainInitial = (initialStrain[0] + initialStrain[1] +
+  const PylithScalar meanStrainInitial = (initialStrain[0] + initialStrain[1] +
 				    initialStrain[2])/3.0;
   
   // Values for current time step
-  const double e11 = totalStrain[0];
-  const double e22 = totalStrain[1];
-  const double e33 = totalStrain[2];
-  const double meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
-  const double meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
+  const PylithScalar e11 = totalStrain[0];
+  const PylithScalar e22 = totalStrain[1];
+  const PylithScalar e33 = totalStrain[2];
+  const PylithScalar meanStrainTpdt = (e11 + e22 + e33)/3.0 - meanStrainInitial;
+  const PylithScalar meanStressTpdt = 3.0 * bulkModulus * meanStrainTpdt;
 
   // Note that I use the initial strain rather than the deviatoric initial
   // strain since otherwise the initial mean strain would get used twice.
-  const double strainPPTpdt[] =
+  const PylithScalar strainPPTpdt[] =
     { totalStrain[0] - meanStrainTpdt - visStrainT[0] - initialStrain[0],
       totalStrain[1] - meanStrainTpdt - visStrainT[1] - initialStrain[1],
       totalStrain[2] - meanStrainTpdt - visStrainT[2] - initialStrain[2],
       totalStrain[3] - visStrainT[3] - initialStrain[3],
       totalStrain[4] - visStrainT[4] - initialStrain[4],
       totalStrain[5] - visStrainT[5] - initialStrain[5] };
-  const double strainPPInvar2Tpdt = 0.5 *
+  const PylithScalar strainPPInvar2Tpdt = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							strainPPTpdt);
 
   // Values for previous time step
-  const double meanStressT = (stressT[0] + stressT[1] + stressT[2])/3.0;
-  const double devStressT[] = { stressT[0] - meanStressT,
+  const PylithScalar meanStressT = (stressT[0] + stressT[1] + stressT[2])/3.0;
+  const PylithScalar devStressT[] = { stressT[0] - meanStressT,
 				stressT[1] - meanStressT,
 				stressT[2] - meanStressT,
 				stressT[3],
 				stressT[4],
 				stressT[5] };
-  const double stressInvar2T = 0.5 *
+  const PylithScalar stressInvar2T = 0.5 *
     pylith::materials::ElasticMaterial::scalarProduct3D(devStressT,
 							devStressT);
-  const double effStressT = sqrt(stressInvar2T);
+  const PylithScalar effStressT = sqrt(stressInvar2T);
 
   // Finish defining parameters needed for root-finding algorithm.
-  const double b = strainPPInvar2Tpdt +
+  const PylithScalar b = strainPPInvar2Tpdt +
     ae * pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							     devStressInitial) +
     ae * ae * stressInvar2Initial;
-  const double c =
+  const PylithScalar c =
     (pylith::materials::ElasticMaterial::scalarProduct3D(strainPPTpdt,
 							 devStressT) +
      ae *
      pylith::materials::ElasticMaterial::scalarProduct3D(devStressT,
 							 devStressInitial)) *
     timeFac;
-  const double d = timeFac * effStressT;
+  const PylithScalar d = timeFac * effStressT;
   PetscLogFlops(92);
 
   // If b, c, and d are all zero, then the effective stress is zero and we
   // don't need a root-finding algorithm. Otherwise, use the algorithm to
   // find the effective stress.
-  double effStressTpdt = 0.0;
+  PylithScalar effStressTpdt = 0.0;
   if (b != 0.0 || c != 0.0 || d != 0.0) {
-    const double stressScale = mu;
+    const PylithScalar stressScale = mu;
 
     // Put parameters into a struct and call root-finding algorithm.
     _effStressParams.ae = ae;
@@ -1317,7 +1317,7 @@
     _effStressParams.referenceStrainRate = referenceStrainRate;
     _effStressParams.referenceStress = referenceStress;
 
-    const double effStressInitialGuess = effStressT;
+    const PylithScalar effStressInitialGuess = effStressT;
 
     effStressTpdt =
       EffectiveStress::calculate<PowerLaw3D>(effStressInitialGuess,
@@ -1326,16 +1326,16 @@
   } // if
 
   // Compute stress and viscous strain and update appropriate state variables.
-  const double effStressTau = (1.0 - alpha) * effStressT +
+  const PylithScalar effStressTau = (1.0 - alpha) * effStressT +
     alpha * effStressTpdt;
-  const double gammaTau = referenceStrainRate *
+  const PylithScalar gammaTau = referenceStrainRate *
     pow((effStressTau/referenceStress),
 	(powerLawExp - 1.0))/referenceStress;
-  const double factor1 = 1.0/(ae + alpha * _dt * gammaTau);
-  const double factor2 = timeFac * gammaTau;
-  double devStressTpdt = 0.0;
-  double devStressTau = 0.0;
-  double deltaVisStrain = 0.0;
+  const PylithScalar factor1 = 1.0/(ae + alpha * _dt * gammaTau);
+  const PylithScalar factor2 = timeFac * gammaTau;
+  PylithScalar devStressTpdt = 0.0;
+  PylithScalar devStressTau = 0.0;
+  PylithScalar deltaVisStrain = 0.0;
 
   for (int iComp=0; iComp < _tensorSize; ++iComp) {
     devStressTpdt = factor1 *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
    *
    * @param dt Current time step.
    */
-  void timeStep(const double dt);
+  void timeStep(const PylithScalar dt);
 
   /** Set whether elastic or inelastic constitutive relations are used.
    *
@@ -69,7 +69,7 @@
    *
    * @returns Effective stress function value.
    */
-  double effStressFunc(const double effStressTpdt);
+  PylithScalar effStressFunc(const PylithScalar effStressTpdt);
 
   /** Compute effective stress function derivative.
    *
@@ -77,7 +77,7 @@
    *
    * @returns Effective stress function derivative value.
    */
-  double effStressDerivFunc(const double effStressTpdt);
+  PylithScalar effStressDerivFunc(const PylithScalar effStressTpdt);
 
   /** Compute effective stress function and derivative.
    *
@@ -86,9 +86,9 @@
    * @param effStressTpdt Effective stress value.
    *
    */
-  void effStressFuncDerivFunc(double* func,
-			      double* dfunc,
-			      const double effStressTpdt);
+  void effStressFuncDerivFunc(PylithScalar* func,
+			      PylithScalar* dfunc,
+			      const PylithScalar effStressTpdt);
 
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
@@ -101,15 +101,15 @@
    * @param propValues Array of property values.
    * @param dbValues Array of database values.
    */
-  void _dbToProperties(double* const propValues,
-		       const double_array& dbValues);
+  void _dbToProperties(PylithScalar* const propValues,
+		       const scalar_array& dbValues);
 
   /** Nondimensionalize properties.
    *
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _nondimProperties(double* const values,
+  void _nondimProperties(PylithScalar* const values,
 			 const int nvalues) const;
 
   /** Dimensionalize properties.
@@ -117,7 +117,7 @@
    * @param values Array of property values.
    * @param nvalues Number of values.
    */
-  void _dimProperties(double* const values,
+  void _dimProperties(PylithScalar* const values,
 		      const int nvalues) const;
 
   /** Compute initial state variables from values in spatial database.
@@ -125,15 +125,15 @@
    * @param stateValues Array of state variable values.
    * @param dbValues Array of database values.
    */
-  void _dbToStateVars(double* const stateValues,
-		      const double_array& dbValues);
+  void _dbToStateVars(PylithScalar* const stateValues,
+		      const scalar_array& dbValues);
 
   /** Nondimensionalize state variables..
    *
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _nondimStateVars(double* const values,
+  void _nondimStateVars(PylithScalar* const values,
 			const int nvalues) const;
 
   /** Dimensionalize state variables.
@@ -141,7 +141,7 @@
    * @param values Array of state variables.
    * @param nvalues Number of values.
    */
-  void _dimStateVars(double* const values,
+  void _dimStateVars(PylithScalar* const values,
 		     const int nvalues) const;
 
   /** Compute density from properties.
@@ -152,10 +152,10 @@
    * @param stateVars State variables at location.
    * @param numStateVars Number of state variables.
    */
-  void _calcDensity(double* const density,
-		    const double* properties,
+  void _calcDensity(PylithScalar* const density,
+		    const PylithScalar* properties,
 		    const int numProperties,
-		    const double* stateVars,
+		    const PylithScalar* stateVars,
 		    const int numStateVars);
 
   /** Compute stress tensor from properties and state variables. If
@@ -177,17 +177,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state variables.
    */
-  void _calcStress(double* const stress,
+  void _calcStress(PylithScalar* const stress,
 		   const int stressSize,
-		   const double* properties,
+		   const PylithScalar* properties,
 		   const int numProperties,
-		   const double* stateVars,
+		   const PylithScalar* stateVars,
 		   const int numStateVars,
-		   const double* totalStrain,
+		   const PylithScalar* totalStrain,
 		   const int strainSize,
-		   const double* initialStress,
+		   const PylithScalar* initialStress,
 		   const int initialStressSize,
-		   const double* initialStrain,
+		   const PylithScalar* initialStrain,
 		   const int initialStrainSize,
 		   const bool computeStateVars);
 
@@ -206,17 +206,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConsts(double* const elasticConsts,
+  void _calcElasticConsts(PylithScalar* const elasticConsts,
 			  const int numElasticConsts,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-		          const double* initialStress,
+		          const PylithScalar* initialStress,
 		          const int initialStressSize,
-		          const double* initialStrain,
+		          const PylithScalar* initialStrain,
 		          const int initialStrainSize);
 
   /** Get stable time step for implicit time integration.
@@ -228,9 +228,9 @@
    *
    * @returns Time step
    */
-  double _stableTimeStepImplicit(const double* properties,
+  PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars) const;
 
   /** Update state variables (for next time step).
@@ -246,15 +246,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVars(double* const stateVars,
+  void _updateStateVars(PylithScalar* const stateVars,
 			const int numStateVars,
-			const double* properties,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* totalStrain,
+			const PylithScalar* totalStrain,
 			const int strainSize,
-			const double* initialStress,
+			const PylithScalar* initialStress,
 			const int initialStressSize,
-			const double* initialStrain,
+			const PylithScalar* initialStrain,
 			const int initialStrainSize);
 
   // PRIVATE TYPEDEFS ///////////////////////////////////////////////////
@@ -262,46 +262,46 @@
 
   /// Member prototype for _calcStress()
   typedef void (pylith::materials::PowerLaw3D::*calcStress_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
      const bool);
 
   /// Member prototype for _calcElasticConsts()
   typedef void (pylith::materials::PowerLaw3D::*calcElasticConsts_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   /// Member prototype for _updateStateVars()
   typedef void (pylith::materials::PowerLaw3D::*updateStateVars_fn_type)
-    (double* const,
+    (PylithScalar* const,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int,
-     const double*,
+     const PylithScalar*,
      const int);
 
   // PRIVATE METHODS ////////////////////////////////////////////////////
@@ -323,17 +323,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressElastic(double* const stress,
+  void _calcStressElastic(PylithScalar* const stress,
 			  const int stressSize,
-			  const double* properties,
+			  const PylithScalar* properties,
 			  const int numProperties,
-			  const double* stateVars,
+			  const PylithScalar* stateVars,
 			  const int numStateVars,
-			  const double* totalStrain,
+			  const PylithScalar* totalStrain,
 			  const int strainSize,
-			  const double* initialStress,
+			  const PylithScalar* initialStress,
 			  const int initialStressSize,
-			  const double* initialStrain,
+			  const PylithScalar* initialStrain,
 			  const int initialStrainSize,
 			  const bool computeStateVars);
 
@@ -353,17 +353,17 @@
    * @param initialStrainSize Size of initial strain array.
    * @param computeStateVars Flag indicating to compute updated state vars.
    */
-  void _calcStressViscoelastic(double* const stress,
+  void _calcStressViscoelastic(PylithScalar* const stress,
 			       const int stressSize,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* stateVars,
+			       const PylithScalar* stateVars,
 			       const int numStateVars,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize,
 			       const bool computeStateVars);
 
@@ -383,17 +383,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsElastic(double* const elasticConsts,
+  void _calcElasticConstsElastic(PylithScalar* const elasticConsts,
 				 const int numElasticConsts,
-				 const double* properties,
+				 const PylithScalar* properties,
 				 const int numProperties,
-				 const double* stateVars,
+				 const PylithScalar* stateVars,
 				 const int numStateVars,
-				 const double* totalStrain,
+				 const PylithScalar* totalStrain,
 				 const int strainSize,
-				 const double* initialStress,
+				 const PylithScalar* initialStress,
 				 const int initialStressSize,
-				 const double* initialStrain,
+				 const PylithScalar* initialStrain,
 				 const int initialStrainSize);
 
   /** Compute derivatives of elasticity matrix from properties as a
@@ -412,17 +412,17 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _calcElasticConstsViscoelastic(double* const elasticConsts,
+  void _calcElasticConstsViscoelastic(PylithScalar* const elasticConsts,
 				      const int numElasticConsts,
-				      const double* properties,
+				      const PylithScalar* properties,
 				      const int numProperties,
-				      const double* stateVars,
+				      const PylithScalar* stateVars,
 				      const int numStateVars,
-				      const double* totalStrain,
+				      const PylithScalar* totalStrain,
 				      const int strainSize,
-				      const double* initialStress,
+				      const PylithScalar* initialStress,
 				      const int initialStressSize,
-				      const double* initialStrain,
+				      const PylithScalar* initialStrain,
 				      const int initialStrainSize);
 
   /** Update state variables after solve as an elastic material.
@@ -438,15 +438,15 @@
    * @param initialStrain Initial strain values.
    * @param initialStrainSize Size of initial strain array.
    */
-  void _updateStateVarsElastic(double* const stateVars,
+  void _updateStateVarsElastic(PylithScalar* const stateVars,
 			       const int numStateVars,
-			       const double* properties,
+			       const PylithScalar* properties,
 			       const int numProperties,
-			       const double* totalStrain,
+			       const PylithScalar* totalStrain,
 			       const int strainSize,
-			       const double* initialStress,
+			       const PylithScalar* initialStress,
 			       const int initialStressSize,
-			       const double* initialStrain,
+			       const PylithScalar* initialStrain,
 			       const int initialStrainSize);
 
   /** Update state variables after solve as a viscoelastic material.
@@ -458,15 +458,15 @@
    * @param initialState Initial state values.
    * @param initialStateSize Size of initial state array.
    */
-  void _updateStateVarsViscoelastic(double* const stateVars,
+  void _updateStateVarsViscoelastic(PylithScalar* const stateVars,
 				    const int numStateVars,
-				    const double* properties,
+				    const PylithScalar* properties,
 				    const int numProperties,
-				    const double* totalStrain,
+				    const PylithScalar* totalStrain,
 				    const int strainSize,
-				    const double* initialStress,
+				    const PylithScalar* initialStress,
 				    const int initialStressSize,
-				    const double* initialStrain,
+				    const PylithScalar* initialStrain,
 				    const int initialStrainSize);
 
   /** Compute scalar product, assuming vector form of a tensor.
@@ -474,23 +474,23 @@
    * @param tensor1 First tensor.
    * @param tensor2 Second tensor.
    */
-  double _scalarProduct(const double* tensor1,
-			const double* tensor2) const;
+  PylithScalar _scalarProduct(const PylithScalar* tensor1,
+			const PylithScalar* tensor2) const;
 
   // PRIVATE STRUCTS ////////////////////////////////////////////////////
 private :
 
   struct EffStressStruct {
-    double ae;
-    double b;
-    double c;
-    double d;
-    double alpha;
-    double dt;
-    double effStressT;
-    double powerLawExp;
-    double referenceStrainRate;
-    double referenceStress;
+    PylithScalar ae;
+    PylithScalar b;
+    PylithScalar c;
+    PylithScalar d;
+    PylithScalar alpha;
+    PylithScalar dt;
+    PylithScalar effStressT;
+    PylithScalar powerLawExp;
+    PylithScalar referenceStrainRate;
+    PylithScalar referenceStress;
   };
 
   // PRIVATE MEMBERS ////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/PowerLaw3D.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,7 +26,7 @@
 // Set current time step.
 inline
 void
-pylith::materials::PowerLaw3D::timeStep(const double dt) {
+pylith::materials::PowerLaw3D::timeStep(const PylithScalar dt) {
   // Not sure what to do here.  If we are using full Newton the Jacobian will
   // always need reforming, but SNES may opt not to reform it sometimes.
   _needNewJacobian = true;
@@ -36,17 +36,17 @@
 // Compute stress tensor from parameters.
 inline
 void
-pylith::materials::PowerLaw3D::_calcStress(double* const stress,
+pylith::materials::PowerLaw3D::_calcStress(PylithScalar* const stress,
 					   const int stressSize,
-					   const double* properties,
+					   const PylithScalar* properties,
 					   const int numProperties,
-					   const double* stateVars,
+					   const PylithScalar* stateVars,
 					   const int numStateVars,
-					   const double* totalStrain,
+					   const PylithScalar* totalStrain,
 					   const int strainSize,
-					   const double* initialStress,
+					   const PylithScalar* initialStress,
 					   const int initialStressSize,
-					   const double* initialStrain,
+					   const PylithScalar* initialStrain,
 					   const int initialStrainSize,
 					   const bool computeStateVars)
 {
@@ -64,17 +64,17 @@
 inline
 void
 pylith::materials::PowerLaw3D::_calcElasticConsts(
-					double* const elasticConsts,
+					PylithScalar* const elasticConsts,
 					const int numElasticConsts,
-					const double* properties,
+					const PylithScalar* properties,
 					const int numProperties,
-					const double* stateVars,
+					const PylithScalar* stateVars,
 					const int numStateVars,
-					const double* totalStrain,
+					const PylithScalar* totalStrain,
 					const int strainSize,
-					const double* initialStress,
+					const PylithScalar* initialStress,
 					const int initialStressSize,
-					const double* initialStrain,
+					const PylithScalar* initialStrain,
 					const int initialStrainSize)
 {
   assert(0 != _calcElasticConstsFn);
@@ -89,15 +89,15 @@
 // Update state variables after solve.
 inline
 void
-pylith::materials::PowerLaw3D::_updateStateVars(double* const stateVars,
+pylith::materials::PowerLaw3D::_updateStateVars(PylithScalar* const stateVars,
 						 const int numStateVars,
-						 const double* properties,
+						 const PylithScalar* properties,
 						 const int numProperties,
-						 const double* totalStrain,
+						 const PylithScalar* totalStrain,
 						 const int strainSize,
-						 const double* initialStress,
+						 const PylithScalar* initialStress,
 						 const int initialStressSize,
-						 const double* initialStrain,
+						 const PylithScalar* initialStrain,
 						 const int initialStrainSize)
 {
   assert(0 != _updateStateVarsFn);
@@ -110,11 +110,11 @@
 
 // Compute scalar product, assuming vector form of a tensor.
 // inline
-// double
-// pylith::materials::PowerLaw3D::_scalarProduct(const double* tensor1,
-// 					      const double* tensor2)
+// PylithScalar
+// pylith::materials::PowerLaw3D::_scalarProduct(const PylithScalar* tensor1,
+// 					      const PylithScalar* tensor2)
 // {
-//   const double scalarProduct = tensor1[0] * tensor2[0] +
+//   const PylithScalar scalarProduct = tensor1[0] * tensor2[0] +
 //     tensor1[1] * tensor2[1] +
 //     tensor1[2] * tensor2[2] +
 //     2.0 * (tensor1[3] * tensor2[3] +

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,31 +26,31 @@
 
 // ----------------------------------------------------------------------
 // Compute viscous strain parameter for a linear Maxwell model.
-double
-pylith::materials::ViscoelasticMaxwell::viscousStrainParam(const double dt,
-							   const double maxwellTime)
+PylithScalar
+pylith::materials::ViscoelasticMaxwell::viscousStrainParam(const PylithScalar dt,
+							   const PylithScalar maxwellTime)
 { // viscousStrainParam
   // Check parameters
   if (maxwellTime <= 0.0)
     throw std::runtime_error("Maxwell time must be greater than 0.");
 
   // Define cutoff values
-  const double timeFrac = 1.0e-10;
+  const PylithScalar timeFrac = 1.0e-10;
 
   // Compute viscous strain parameter.  The ratio of dt and
   // maxwellTime should never approach timeFrac for any reasonable
   // computation, but I have put in alternative solutions just in
   // case.
 
-  double dq = 0.0;
+  PylithScalar dq = 0.0;
 
   // Use series expansion if dt is very small, since default solution
   // blows up otherwise.
 
   if (dt < timeFrac*maxwellTime) {
-    double fSign = 1.0;
-    double factorial = 1.0;
-    double fraction = 1.0;
+    PylithScalar fSign = 1.0;
+    PylithScalar factorial = 1.0;
+    PylithScalar fraction = 1.0;
     dq = 1.0;
 
     const int numTerms = 5;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/materials/ViscoelasticMaxwell.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,6 +27,8 @@
 // Include directives ---------------------------------------------------
 #include "materialsfwd.hh" // forward declarations
 
+#include "pylith/utils/types.hh" // USES PylithScalar
+
 // ViscoelasticMaxwell --------------------------------------------------
 /** @brief Class for basic Maxwell viscoelastic functions.
  *
@@ -46,8 +48,8 @@
    *
    * @returns Viscous strain parameter.
    */
-  static double viscousStrainParam(const double dt,
-				   const double maxwellTime);
+  static PylithScalar viscousStrainParam(const PylithScalar dt,
+				   const PylithScalar maxwellTime);
 
 }; // class ViscoelasticMaxwell
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/CellFilterAvg.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/CellFilterAvg.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/CellFilterAvg.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -95,7 +95,7 @@
   assert(0 != quadrature);
 
   const int numQuadPts = quadrature->numQuadPts();
-  const double_array& wts = quadrature->quadWts();
+  const scalar_array& wts = quadrature->quadWts();
   
   const ALE::Obj<SieveMesh>& sieveMesh = fieldIn.mesh().sieveMesh();
   assert(!sieveMesh.isNull());
@@ -128,11 +128,6 @@
     _fieldAvg->newSection(fieldIn, fiberDim);
     _fieldAvg->allocate();
   } else if (_fieldAvg->sectionSize() != cells->size()*fiberDim) {
-#if 1 // :BUG: Avoid memory leak in section->clear()
-    _fieldAvg->clear();
-#else
-    delete _fieldAvg; _fieldAvg = new field_type(fieldIn.mesh());
-#endif
     _fieldAvg->newSection(fieldIn, fiberDim);
     _fieldAvg->allocate();
   } // else
@@ -168,8 +163,8 @@
   _fieldAvg->scale(fieldIn.scale());
   _fieldAvg->addDimensionOkay(true);
 
-  double_array fieldAvgCell(fiberDim);
-  double scalar = 0.0;
+  scalar_array fieldAvgCell(fiberDim);
+  PylithScalar scalar = 0.0;
   for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
     scalar += wts[iQuad];
 
@@ -177,7 +172,7 @@
   for (typename label_sequence::iterator c_iter=cellsBegin;
        c_iter != cellsEnd;
        ++c_iter) {
-    const double* values = sectionIn->restrictPoint(*c_iter);
+    const PylithScalar* values = sectionIn->restrictPoint(*c_iter);
     assert(totalFiberDim == sectionIn->getFiberDimension(*c_iter));
     
     fieldAvgCell = 0.0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,6 +22,7 @@
 // Constructor
 template<typename mesh_type, typename field_type>
 pylith::meshio::DataWriter<mesh_type, field_type>::DataWriter(void) :
+  _timeScale(1.0),
   _numTimeSteps(0),
   _context("")
 { // constructor
@@ -43,7 +44,23 @@
 { // deallocate
 } // deallocate
   
+
 // ----------------------------------------------------------------------
+// Set time scale for simulation time.
+template<typename mesh_type, typename field_type>
+void
+pylith::meshio::DataWriter<mesh_type, field_type>::timeScale(const PylithScalar value)
+{ // timeScale
+  if (value <= 0.0) {
+    std::ostringstream msg;
+    msg << "Time scale for simulation time (" << value << " must be positive.";
+    throw std::runtime_error(msg.str());
+  } // if
+  
+  _timeScale = value;
+} // timeScale
+  
+// ----------------------------------------------------------------------
 // Prepare for writing files.
 template<typename mesh_type, typename field_type>
 void
@@ -56,8 +73,13 @@
 
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh = mesh.sieveMesh();
   assert(!sieveMesh.isNull());
-  _context = std::string("output_") + sieveMesh->getName() + 
-    ((label) ? std::string("_") + std::string(label) : std::string(""));
+
+  ostringstream s;
+  s << "output_"
+    << sieveMesh->getName();
+  if (label)
+    s << "_" << label << labelId;
+  _context = s.str();
 } // open
 
 // ----------------------------------------------------------------------
@@ -73,7 +95,7 @@
 // Prepare file for data at a new time step.
 template<typename mesh_type, typename field_type>
 void
-pylith::meshio::DataWriter<mesh_type, field_type>::openTimeStep(const double t,
+pylith::meshio::DataWriter<mesh_type, field_type>::openTimeStep(const PylithScalar t,
 						    const mesh_type& mesh,
 						    const char* label,
 						    const int labelId)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriter.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,6 +58,12 @@
   virtual
   void deallocate(void);
   
+  /** Set time scale for simulation time.
+   *
+   * @param value Time scale
+   */
+  void timeScale(const PylithScalar value);
+
   /** Prepare for writing files.
    *
    * @param mesh Finite-element mesh. 
@@ -85,7 +91,7 @@
    * @param labelId Value of label defining which cells to include.
    */
   virtual
-  void openTimeStep(const double t,
+  void openTimeStep(const PylithScalar t,
 		    const mesh_type& mesh,
 		    const char* label =0,
 		    const int labelId =0);
@@ -101,7 +107,7 @@
    * @param mesh Mesh associated with output.
   */
   virtual
-  void writeVertexField(const double t,
+  void writeVertexField(const PylithScalar t,
 			field_type& field,
 			const mesh_type& mesh) = 0;
 
@@ -114,7 +120,7 @@
    * @param labelId Value of label defining which cells to include.
    */
   virtual
-  void writeCellField(const double t,
+  void writeCellField(const PylithScalar t,
 		      field_type& field,
 		      const char* label =0,
 		      const int labelId =0) = 0;
@@ -136,6 +142,7 @@
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
+  PylithScalar _timeScale; ///< Time scale for dimensioning time in output.
   int _numTimeSteps; ///< Expected number of time steps for fields.
   std::string _context; ///< Context of scatters for DataWriter.
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -98,8 +98,9 @@
     _tstampIndex = 0;
     const int rank = sieveMesh->commRank();
     const int localSize = (!rank) ? 1 : 0;
-    err = VecCreateMPI(mesh.comm(), localSize, PETSC_DETERMINE, &_tstamp);
+    err = VecCreateMPI(mesh.comm(), localSize, 1, &_tstamp);
     CHECK_PETSC_ERROR(err);
+    assert(_tstamp);
     err = VecSetBlockSize(_tstamp, 1); CHECK_PETSC_ERROR(err);
     err = PetscObjectSetName((PetscObject) _tstamp, "time");
 
@@ -129,7 +130,7 @@
     assert(!vNumbering.isNull());
     //vNumbering->view("VERTEX NUMBERING");
 
-    coordinates.createScatterWithBC(vNumbering, context);
+    coordinates.createScatterWithBC(mesh, vNumbering, context);
     coordinates.scatterSectionToVector(context);
     PetscVec coordinatesVector = coordinates.vector(context);
     assert(coordinatesVector);
@@ -166,13 +167,14 @@
 
     const int ncells = cNumbering->getLocalSize();
     const int conesSize = ncells*numCorners;
-    PetscScalar* tmpVertices = (conesSize > 0) ? new PetscScalar[conesSize] : 0;
+    PylithScalar* tmpVertices = (conesSize > 0) ? new PylithScalar[conesSize] : 0;
 
     const Obj<sieve_type>& sieve = sieveMesh->getSieve();
     assert(!sieve.isNull());
-    ALE::ISieveVisitor::NConeRetriever<sieve_type> 
-      ncV(*sieve, (size_t) pow((double) sieve->getMaxConeSize(), 
-			       std::max(0, sieveMesh->depth())));
+    const int closureSize = 
+      int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+    assert(closureSize >= 0);
+    ALE::ISieveVisitor::NConeRetriever<sieve_type> ncV(*sieve, closureSize);
 
     int k = 0;
     const typename label_sequence::const_iterator cellsEnd = cells->end();
@@ -185,8 +187,17 @@
 	const typename ALE::ISieveVisitor::NConeRetriever<sieve_type>::oriented_point_type* cone =
 	  ncV.getOrientedPoints();
 	const int coneSize = ncV.getOrientedSize();
-          for (int c=0; c < coneSize; ++c)
-            tmpVertices[k++] = vNumbering->getIndex(cone[c].first);
+	if (coneSize != numCorners) {
+	  std::ostringstream msg;
+	  msg << "Inconsistency in topology found for mesh '"
+	      << sieveMesh->getName() << "' during output.\n"
+	      << "Number of vertices (" << coneSize << ") in cell '"
+	      << *c_iter << "' does not expected number of vertices ("
+	      << numCorners << ").";
+	  throw std::runtime_error(msg.str());
+	} // if
+	for (int c=0; c < coneSize; ++c)
+	  tmpVertices[k++] = vNumbering->getIndex(cone[c].first);
       } // if
 
     PetscVec elemVec;
@@ -201,14 +212,12 @@
     err = VecDestroy(&elemVec); CHECK_PETSC_ERROR(err);
     delete[] tmpVertices; tmpVertices = 0;
 
-    if (!rank) {
-      hid_t h5 = -1;
-      err = PetscViewerHDF5GetFileId(_viewer, &h5); CHECK_PETSC_ERROR(err);
-      assert(h5 >= 0);
-      const int cellDim = mesh.dimension();
-      HDF5::writeAttribute(h5, "/topology/cells", "cell_dim", (void*)&cellDim,
-			   H5T_NATIVE_INT);
-    } // if
+    hid_t h5 = -1;
+    err = PetscViewerHDF5GetFileId(_viewer, &h5); CHECK_PETSC_ERROR(err);
+    assert(h5 >= 0);
+    const int cellDim = mesh.dimension();
+    HDF5::writeAttribute(h5, "/topology/cells", "cell_dim", (void*)&cellDim,
+			 H5T_NATIVE_INT);
   } catch (const std::exception& err) {
     std::ostringstream msg;
     msg << "Error while opening HDF5 file "
@@ -231,16 +240,21 @@
   PetscErrorCode err = 0;
   err = PetscViewerDestroy(&_viewer); CHECK_PETSC_ERROR(err);
   err = VecDestroy(&_tstamp); CHECK_PETSC_ERROR(err);
+  assert(!_tstamp);
 
   _timesteps.clear();
   _tstampIndex = 0;
 
-  Xdmf metafile;
-  const std::string& hdf5filename = _hdf5Filename();
-  const int indexExt = hdf5filename.find(".h5");
-  std::string xdmfFilename = 
-    std::string(hdf5filename, 0, indexExt) + ".xmf";
-  metafile.write(xdmfFilename.c_str(), _hdf5Filename().c_str());
+  int rank = 0;
+  MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
+  if (!rank) {
+    Xdmf metafile;
+    const std::string& hdf5filename = _hdf5Filename();
+    const int indexExt = hdf5filename.find(".h5");
+    std::string xdmfFilename = 
+      std::string(hdf5filename, 0, indexExt) + ".xmf";
+    metafile.write(xdmfFilename.c_str(), _hdf5Filename().c_str());
+  } // if
 } // close
 
 // ----------------------------------------------------------------------
@@ -248,7 +262,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5<mesh_type,field_type>::writeVertexField(
-				            const double t,
+				            const PylithScalar t,
 					    field_type& field,
 					    const mesh_type& mesh)
 { // writeVertexField
@@ -266,7 +280,16 @@
       sieveMesh->getFactory()->getNumbering(sieveMesh, "censored depth", 0) :
       sieveMesh->getFactory()->getNumbering(sieveMesh, 0);
     assert(!vNumbering.isNull());
-    field.createScatterWithBC(vNumbering, context);
+
+#if 0
+    std::cout << "WRITE VERTEX FIELD" << std::endl;
+    mesh.view("MESH");
+    field.view("FIELD");;
+    vNumbering->view("NUMBERING");
+    std::cout << std::endl;
+#endif
+
+    field.createScatterWithBC(mesh, vNumbering, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
     assert(vector);
@@ -312,7 +335,7 @@
     err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
     err = VecSetBlockSize(vector, blockSize); CHECK_PETSC_ERROR(err);
 
-    if (!rank && 0 == istep) {
+    if (0 == istep) {
       hid_t h5 = -1;
       err = PetscViewerHDF5GetFileId(_viewer, &h5); CHECK_PETSC_ERROR(err);
       assert(h5 >= 0);
@@ -338,7 +361,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5<mesh_type,field_type>::writeCellField(
-				       const double t,
+				       const PylithScalar t,
 				       field_type& field,
 				       const char* label,
 				       const int labelId)
@@ -362,11 +385,10 @@
     const ALE::Obj<typename mesh_type::SieveMesh::numbering_type>& numbering = 
       sieveMesh->getFactory()->getNumbering(sieveMesh, labelName, depth);
     assert(!numbering.isNull());
-    field.createScatterWithBC(numbering, context);
+    field.createScatterWithBC(field.mesh(), numbering, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
     assert(vector);
-
     const ALE::Obj<typename mesh_type::RealSection>& section = field.section();
     assert(!section.isNull());      
     assert(!sieveMesh->getLabelStratum(labelName, depth).isNull());
@@ -401,7 +423,7 @@
     err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
     err = VecSetBlockSize(vector, blockSize); CHECK_PETSC_ERROR(err);
 
-    if (!rank && 0 == istep) {
+    if (0 == istep) {
       hid_t h5 = -1;
       err = PetscViewerHDF5GetFileId(_viewer, &h5); CHECK_PETSC_ERROR(err);
       assert(h5 >= 0);
@@ -446,13 +468,15 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5<mesh_type,field_type>::_writeTimeStamp(
-						    const double t,
+						    const PylithScalar t,
 						    const int rank)
 { // _writeTimeStamp
+  assert(_tstamp);
   PetscErrorCode err = 0;
 
-  if (!rank) {
-    err = VecSetValue(_tstamp, 0, t, INSERT_VALUES); CHECK_PETSC_ERROR(err);
+  if (0 == rank) {
+    const PylithScalar tDim = t * DataWriter<mesh_type, field_type>::_timeScale;
+    err = VecSetValue(_tstamp, 0, tDim, INSERT_VALUES); CHECK_PETSC_ERROR(err);
   } // if
   err = VecAssemblyBegin(_tstamp); CHECK_PETSC_ERROR(err);
   err = VecAssemblyEnd(_tstamp); CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -103,7 +103,7 @@
    * @param field Field over vertices.
    * @param mesh Mesh associated with output.
    */
-  void writeVertexField(const double t,
+  void writeVertexField(const PylithScalar t,
 			field_type& field,
 			const mesh_type& mesh);
 
@@ -115,7 +115,7 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void writeCellField(const double t,
+  void writeCellField(const PylithScalar t,
 		      field_type& field,
 		      const char* label =0,
 		      const int labelId =0);
@@ -137,7 +137,7 @@
    * @param t Time in seconds.
    * @param rank Processor rank in MPI communicator.
    */
-  void _writeTimeStamp(const double t,
+  void _writeTimeStamp(const PylithScalar t,
 		       const int rank);
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -107,6 +107,9 @@
     PetscViewer binaryViewer;
     PetscErrorCode err = 0;
     
+    const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+      H5T_IEEE_F64BE : H5T_IEEE_F32BE;
+
     const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh = mesh.sieveMesh();
     assert(!sieveMesh.isNull());
 
@@ -130,7 +133,7 @@
       sieveMesh->getFactory()->getNumbering(sieveMesh, "censored depth", 0) :
       sieveMesh->getFactory()->getNumbering(sieveMesh, 0);
     assert(!vNumbering.isNull());
-    coordinates.createScatterWithBC(vNumbering, context);
+    coordinates.createScatterWithBC(mesh, vNumbering, context);
     coordinates.scatterSectionToVector(context);
     PetscVec coordinatesVector = coordinates.vector(context);
     assert(coordinatesVector);
@@ -153,7 +156,7 @@
       dims[1] = cs->spaceDim();
       _h5->createDatasetRawExternal("/geometry", "vertices", 
 				    filenameVertices.c_str(),
-				    dims, ndims, H5T_IEEE_F64BE);
+				    dims, ndims, scalartype);
     } // if
     
     // Write cells
@@ -178,18 +181,19 @@
     err = MPI_Allreduce(&numCornersLocal, &numCorners, 1, MPI_INT, MPI_MAX,
 		     sieveMesh->comm()); CHECK_PETSC_ERROR(err);
 
-    PetscScalar* tmpVertices = 0;
+    PylithScalar* tmpVertices = 0;
     const int ncells = cNumbering->getLocalSize();
     const int conesSize = ncells*numCorners;
-    err = PetscMalloc(sizeof(PetscScalar)*conesSize, &tmpVertices);
+    err = PetscMalloc(sizeof(PylithScalar)*conesSize, &tmpVertices);
     CHECK_PETSC_ERROR(err);
 
     const Obj<sieve_type>& sieve = sieveMesh->getSieve();
     assert(!sieve.isNull());
-    ALE::ISieveVisitor::NConeRetriever<sieve_type> 
-      ncV(*sieve, (size_t) pow((double) sieve->getMaxConeSize(), 
-			       std::max(0, sieveMesh->depth())));
-
+    const int closureSize = 
+      int(pow(sieve->getMaxConeSize(), sieveMesh->depth()));
+    assert(closureSize >= 0);
+    ALE::ISieveVisitor::NConeRetriever<sieve_type> ncV(*sieve, closureSize);
+    
     int k = 0;
     const typename label_sequence::const_iterator cellsEnd = cells->end();
     for (typename label_sequence::iterator c_iter=cells->begin();
@@ -201,8 +205,17 @@
 	const typename ALE::ISieveVisitor::NConeRetriever<sieve_type>::oriented_point_type* cone =
 	  ncV.getOrientedPoints();
 	const int coneSize = ncV.getOrientedSize();
-          for (int c=0; c < coneSize; ++c)
-            tmpVertices[k++] = vNumbering->getIndex(cone[c].first);
+	if (coneSize != numCorners) {
+	  std::ostringstream msg;
+	  msg << "Inconsistency in topology found for mesh '"
+	      << sieveMesh->getName() << "' during output.\n"
+	      << "Number of vertices (" << coneSize << ") in cell '"
+	      << *c_iter << "' does not expected number of vertices ("
+	      << numCorners << ").";
+	  throw std::runtime_error(msg.str());
+	} // if
+	for (int c=0; c < coneSize; ++c)
+	  tmpVertices[k++] = vNumbering->getIndex(cone[c].first);
       } // if
 
     PetscVec elemVec;
@@ -230,7 +243,7 @@
       dims[0] = cNumbering->getGlobalSize();
       dims[1] = numCorners;
       _h5->createDatasetRawExternal("/topology", "cells", filenameCells.c_str(),
-				    dims, ndims, H5T_IEEE_F64BE);
+				    dims, ndims, scalartype);
       const int cellDim = mesh.dimension();
       _h5->writeAttribute("/topology/cells", "cell_dim", (void*)&cellDim,
 			  H5T_NATIVE_INT);
@@ -261,11 +274,15 @@
   _tstampIndex = 0;
   deallocate();
 
-  Xdmf metafile;
-  const std::string& hdf5filename = _hdf5Filename();
-  const int indexExt = hdf5filename.find(".h5");
-  std::string xdmfFilename = std::string(hdf5filename, 0, indexExt) + ".xmf";
-  metafile.write(xdmfFilename.c_str(), _hdf5Filename().c_str());
+  int rank = 0;
+  MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
+  if (!rank) {
+    Xdmf metafile;
+    const std::string& hdf5filename = _hdf5Filename();
+    const int indexExt = hdf5filename.find(".h5");
+    std::string xdmfFilename = std::string(hdf5filename, 0, indexExt) + ".xmf";
+    metafile.write(xdmfFilename.c_str(), _hdf5Filename().c_str());
+  } // if
 } // close
 
 // ----------------------------------------------------------------------
@@ -273,7 +290,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5Ext<mesh_type,field_type>::writeVertexField(
-				            const double t,
+				            const PylithScalar t,
 					    field_type& field,
 					    const mesh_type& mesh)
 { // writeVertexField
@@ -296,7 +313,7 @@
       sieveMesh->getFactory()->getNumbering(sieveMesh, "censored depth", 0) :
       sieveMesh->getFactory()->getNumbering(sieveMesh, 0);
     assert(!vNumbering.isNull());
-    field.createScatterWithBC(vNumbering, context);
+    field.createScatterWithBC(mesh, vNumbering, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
     assert(vector);
@@ -304,6 +321,9 @@
     PetscViewer binaryViewer;
     PetscErrorCode err = 0;
 
+    const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+      H5T_IEEE_F64BE : H5T_IEEE_F32BE;
+
     // Create external dataset if necessary
     bool createdExternalDataset = false;
     if (_datasets.find(field.label()) != _datasets.end()) {
@@ -362,7 +382,7 @@
 	
 	_h5->createDatasetRawExternal("/vertex_fields", field.label(),
 				      _datasetFilename(field.label()).c_str(),
-				      maxDims, ndims, H5T_IEEE_F64BE);
+				      maxDims, ndims, scalartype);
 	std::string fullName = std::string("/vertex_fields/") + field.label();
 	_h5->writeAttribute(fullName.c_str(), "vector_field_type",
 			    topology::FieldBase::vectorFieldString(field.vectorFieldType()));
@@ -405,7 +425,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5Ext<mesh_type,field_type>::writeCellField(
-				       const double t,
+				       const PylithScalar t,
 				       field_type& field,
 				       const char* label,
 				       const int labelId)
@@ -432,7 +452,7 @@
     const ALE::Obj<typename mesh_type::SieveMesh::numbering_type>& numbering = 
       sieveMesh->getFactory()->getNumbering(sieveMesh, labelName, depth);
     assert(!numbering.isNull());
-    field.createScatterWithBC(numbering, context);
+    field.createScatterWithBC(field.mesh(), numbering, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
     assert(vector);
@@ -440,6 +460,9 @@
     PetscViewer binaryViewer;
     PetscErrorCode err = 0;
 
+    const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+      H5T_IEEE_F64BE : H5T_IEEE_F32BE;
+
     // Create external dataset if necessary
     bool createdExternalDataset = false;
     if (_datasets.find(field.label()) != _datasets.end()) {
@@ -499,7 +522,7 @@
 	
 	_h5->createDatasetRawExternal("/cell_fields", field.label(),
 				      _datasetFilename(field.label()).c_str(),
-				      maxDims, ndims, H5T_IEEE_F64BE);
+				      maxDims, ndims, scalartype);
 	std::string fullName = std::string("/cell_fields/") + field.label();
 	_h5->writeAttribute(fullName.c_str(), "vector_field_type",
 			    topology::FieldBase::vectorFieldString(field.vectorFieldType()));
@@ -573,11 +596,13 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterHDF5Ext<mesh_type,field_type>::_writeTimeStamp(
-						  const double t)
+						  const PylithScalar t)
 { // _writeTimeStamp
   assert(_h5);
 
   const int ndims = 3;
+  const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+    H5T_NATIVE_DOUBLE : H5T_NATIVE_FLOAT;
 
   // Each time stamp has a size of 1.
   hsize_t dimsChunk[3]; // Use 3 dims for compatibility with PETSc viewer
@@ -593,7 +618,7 @@
     dims[1] = 1;
     dims[2] = 1;
     _h5->createDataset("/", "time", dims, dimsChunk, ndims, 
-		       H5T_NATIVE_DOUBLE);
+		       scalartype);
   } // if
   
   // Write time stamp as chunk to HDF5 file.
@@ -602,8 +627,9 @@
   dims[0] = _tstampIndex+1;
   dims[1] = 1;
   dims[2] = 1;
-  _h5->writeDatasetChunk("/", "time", &t, dims, dimsChunk, ndims, 
-			 _tstampIndex, H5T_NATIVE_DOUBLE);
+  const PylithScalar tDim = t * DataWriter<mesh_type, field_type>::_timeScale;
+  _h5->writeDatasetChunk("/", "time", &tDim, dims, dimsChunk, ndims, 
+			 _tstampIndex, scalartype);
   
   _tstampIndex++;
 } // _writeTimeStamp

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterHDF5Ext.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -104,7 +104,7 @@
    * @param field Field over vertices.
    * @param mesh Mesh associated with output.
    */
-  void writeVertexField(const double t,
+  void writeVertexField(const PylithScalar t,
 			field_type& field,
 			const mesh_type& mesh);
 
@@ -116,7 +116,7 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void writeCellField(const double t,
+  void writeCellField(const PylithScalar t,
 		      field_type& field,
 		      const char* label =0,
 		      const int labelId =0);
@@ -140,7 +140,7 @@
    *
    * @param t Time in seconds.
    */
-  void _writeTimeStamp(const double t);  
+  void _writeTimeStamp(const PylithScalar t);  
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -90,7 +90,7 @@
 // Set value used to normalize time stamp in name of VTK file.
 template<typename mesh_type, typename field_type>
 void
-pylith::meshio::DataWriterVTK<mesh_type,field_type>::timeConstant(const double value)
+pylith::meshio::DataWriterVTK<mesh_type,field_type>::timeConstant(const PylithScalar value)
 { // timeConstant
   if (value <= 0.0) {
     std::ostringstream msg;
@@ -105,7 +105,7 @@
 // Prepare file for data at a new time step.
 template<typename mesh_type, typename field_type>
 void
-pylith::meshio::DataWriterVTK<mesh_type,field_type>::openTimeStep(const double t,
+pylith::meshio::DataWriterVTK<mesh_type,field_type>::openTimeStep(const PylithScalar t,
 						       const mesh_type& mesh,
 						       const char* label,
 						       const int labelId)
@@ -175,7 +175,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterVTK<mesh_type,field_type>::writeVertexField(
-				            const double t,
+				            const PylithScalar t,
 					    field_type& field,
 					    const mesh_type& mesh)
 { // writeVertexField
@@ -237,7 +237,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::DataWriterVTK<mesh_type,field_type>::writeCellField(
-				       const double t,
+				       const PylithScalar t,
 				       field_type& field,
 				       const char* label,
 				       const int labelId)
@@ -303,7 +303,7 @@
 // Generate filename for VTK file.
 template<typename mesh_type, typename field_type>
 std::string
-pylith::meshio::DataWriterVTK<mesh_type,field_type>::_vtkFilename(const double t) const
+pylith::meshio::DataWriterVTK<mesh_type,field_type>::_vtkFilename(const PylithScalar t) const
 { // _vtkFilename
   std::ostringstream filename;
   const int indexExt = _filename.find(".vtk");

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/DataWriterVTK.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,7 +75,7 @@
    * @param value Value (time in seconds) used to normalize time stamp in
    * filename.
    */
-  void timeConstant(const double value);
+  void timeConstant(const PylithScalar value);
 
   /** Set precision of floating point values in output.
    *
@@ -91,7 +91,7 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void openTimeStep(const double t,
+  void openTimeStep(const PylithScalar t,
 		    const mesh_type& mesh,
 		    const char* label =0,
 		    const int labelId =0);
@@ -105,7 +105,7 @@
    * @param field Field over vertices.
    * @param mesh Mesh associated with output.
    */
-  void writeVertexField(const double t,
+  void writeVertexField(const PylithScalar t,
 			field_type& field,
 			const mesh_type& mesh);
 
@@ -117,7 +117,7 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void writeCellField(const double t,
+  void writeCellField(const PylithScalar t,
 		      field_type& field,
 		      const char* label =0,
 		      const int labelId =0);
@@ -135,7 +135,7 @@
    *
    * @param t Time in seconds.
    */
-  std::string _vtkFilename(const double t) const;
+  std::string _vtkFilename(const PylithScalar t) const;
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :
@@ -146,7 +146,7 @@
 private :
 
   /// Time value (in seconds) used to normalize time stamp.
-  double _timeConstant;
+  PylithScalar _timeConstant;
 
   std::string _filename; ///< Name of VTK file.
   std::string _timeFormat; ///< C style time format for time stamp.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -183,9 +183,9 @@
 } // getDim
 
 // ----------------------------------------------------------------------
-// Get values for variable as an array of doubles.
+// Get values for variable as an array of PylithScalars.
 void
-pylith::meshio::ExodusII::getVar(double* values,
+pylith::meshio::ExodusII::getVar(PylithScalar* values,
 				 int* dims,
 				 int ndims,
 				 const char* name) const

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/ExodusII.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "meshiofwd.hh" // Forward declarations
 
-#include "pylith/utils/array.hh" // USES int_array, double_array, string_vector
+#include "pylith/utils/array.hh" // USES string_vector
 
 #include <string> // HASA std::string
 
@@ -102,14 +102,14 @@
    */
   int getDim(const char* name) const;
 
-  /** Get values for variable as an array of doubles.
+  /** Get values for variable as an array of PylithScalars.
    *
    * @param values Array of values.
    * @param dims Expected dimensions for variable.
    * @param ndims Number of dimension for variable.
    * @param name Name of variable.
    */
-  void getVar(double* values,
+  void getVar(PylithScalar* values,
 	      int* dims,
 	      int ndims,
 	      const char* name) const;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "GMVFileAscii.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "journal/info.h" // USES journal::info_t
 
@@ -50,7 +50,7 @@
 // ----------------------------------------------------------------------
 // Read ASCII GMV file.
 void
-pylith::meshio::GMVFileAscii::read(double_array* coordinates,
+pylith::meshio::GMVFileAscii::read(scalar_array* coordinates,
 				   int_array* cells,
 				   int_array* materialIds,
 				   int* meshDim,
@@ -108,7 +108,7 @@
 // ----------------------------------------------------------------------
 // Write ASCII GMV file.
 void
-pylith::meshio::GMVFileAscii::write(const double_array& coordinates,
+pylith::meshio::GMVFileAscii::write(const scalar_array& coordinates,
 				    const int_array& cells,
 				    const int_array& materialIds,
 				    const int meshDim,
@@ -149,7 +149,7 @@
 // ----------------------------------------------------------------------
 void
 pylith::meshio::GMVFileAscii::_readVertices(std::ifstream& fin,
-					    double_array* coordinates,
+					    scalar_array* coordinates,
 					    int* numVertices,
 					    int* spaceDim)
 { // _readVertices
@@ -244,12 +244,12 @@
     fin >> varType;
     if (1 == varType) { // variables/attributes associated with vertices
       const int numVars = 1;
-      double_array vals(numVertices*numVars);
+      scalar_array vals(numVertices*numVars);
       for (int iVertex=0; iVertex < numVertices; ++iVertex)
 	fin >> vals[iVertex];
     } else { // variables/attributes associated with cells
       const int numVars = 1;
-      double_array vals(numCells*numVars);
+      scalar_array vals(numCells*numVars);
       for (int iCell=0; iCell < numCells; ++iCell)
 	fin >> vals[iCell];
     } // else

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileAscii.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "GMVFile.hh" // ISA GMVFile
 
-#include "pylith/utils/arrayfwd.hh" // USES int_array, double_array
+#include "pylith/utils/array.hh" // USES int_array, scalar_array
 #include <iosfwd>
 
 // GMVFileAscii ---------------------------------------------------------
@@ -64,7 +64,7 @@
    * @param numCells Number of cells in mesh.
    * @param numCorners Number of vertices in each cell.
    */
-  void read(double_array* coordinates,
+  void read(scalar_array* coordinates,
 	    int_array* cells,
 	    int_array* materialIds,
 	    int* meshDim,
@@ -84,7 +84,7 @@
    * @param numCells Number of cells in mesh.
    * @param numCorners Number of vertices in each cell.
    */
-  void write(const double_array& coordinates,
+  void write(const scalar_array& coordinates,
 	     const int_array& cells,
 	     const int_array& materialIds,
 	     const int meshDim,
@@ -109,7 +109,7 @@
    * @param numVertices Number of vertices.
    */
   void _readVertices(std::ifstream& fin,
-		     double_array* coordinates,
+		     scalar_array* coordinates,
 		     int* numVertices,
 		     int* spaceDim);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "BinaryIO.hh" // USES readString()
 
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "journal/info.h" // USES journal::info_t
 
@@ -53,7 +53,7 @@
 // ----------------------------------------------------------------------
 // Read binary GMV file.
 void
-pylith::meshio::GMVFileBinary::read(double_array* coordinates,
+pylith::meshio::GMVFileBinary::read(scalar_array* coordinates,
 				    int_array* cells,
 				    int_array* materialIds,
 				    int* meshDim,
@@ -113,7 +113,7 @@
 // ----------------------------------------------------------------------
 // Write binary GMV file.
 void
-pylith::meshio::GMVFileBinary::write(const double_array& coordinates,
+pylith::meshio::GMVFileBinary::write(const scalar_array& coordinates,
 				     const int_array& cells,
 				     const int_array& materialIds,
 				     const int meshDim,
@@ -153,7 +153,7 @@
 // ----------------------------------------------------------------------
 void
 pylith::meshio::GMVFileBinary::_readVertices(std::ifstream& fin,
-					     double_array* coordinates,
+					     scalar_array* coordinates,
 					     int* numVertices,
 					     int* spaceDim)
 { // _readVertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/GMVFileBinary.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "GMVFile.hh" // ISA GMVFile
 
-#include "pylith/utils/arrayfwd.hh" // USES int_array, double_array
+#include "pylith/utils/array.hh" // USES int_array, scalar_array
 #include <iosfwd>
 
 // GMVFileBinary --------------------------------------------------------
@@ -67,7 +67,7 @@
    * @param numCells Number of cells in mesh.
    * @param numCorners Number of vertices in each cell.
    */
-  void read(double_array* coordinates,
+  void read(scalar_array* coordinates,
 	    int_array* cells,
 	    int_array* materialIds,
 	    int* meshDim,
@@ -87,7 +87,7 @@
    * @param numCells Number of cells in mesh.
    * @param numCorners Number of vertices in each cell.
    */
-  void write(const double_array& coordinates,
+  void write(const scalar_array& coordinates,
 	     const int_array& cells,
 	     const int_array& materialIds,
 	     const int meshDim,
@@ -112,7 +112,7 @@
    * @param numVertices Number of vertices.
    */
   void _readVertices(std::ifstream& fin,
-		     double_array* coordinates,
+		     scalar_array* coordinates,
 		     int* numVertices,
 		     int* spaceDim);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,6 +41,7 @@
 	OutputManager.hh \
 	OutputManager.cc \
 	OutputSolnSubset.hh \
+	OutputSolnPoints.hh \
 	UCDFaultFile.hh \
 	VertexFilter.hh \
 	VertexFilter.cc \

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -21,7 +21,7 @@
 #include "MeshBuilder.hh" // implementation of class methods
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
 
@@ -38,7 +38,7 @@
 // Set vertices and cells in mesh.
 void
 pylith::meshio::MeshBuilder::buildMesh(topology::Mesh* mesh,
-				       double_array* coordinates,
+				       scalar_array* coordinates,
 				       const int numVertices,
 				       const int spaceDim,
 				       const int_array& cells,
@@ -197,7 +197,7 @@
 void
 pylith::meshio::MeshBuilder::buildFaultMesh(const ALE::Obj<SieveMesh>& fault,
 					    ALE::Obj<SieveFlexMesh>& faultBd,
-					    const double_array& coordinates,
+					    const scalar_array& coordinates,
 					    const int numVertices,
 					    const int spaceDim,
 					    const int_array& cells,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshBuilder.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,7 +29,7 @@
 #include "meshiofwd.hh" // forward declarations
 
 #include "pylith/topology/topologyfwd.hh" // USES Mesh
-#include "pylith/utils/arrayfwd.hh" // USES double_array, int_array,
+#include "pylith/utils/arrayfwd.hh" // USES scalar_array, int_array,
                                     // string_vector
 #include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
 
@@ -63,7 +63,7 @@
    */
   static
   void buildMesh(topology::Mesh* mesh,
-		 double_array* coordinates,
+		 scalar_array* coordinates,
 		 const int numVertices,
 		 const int spaceDim,
 		 const int_array& cells,
@@ -93,7 +93,7 @@
   static
   void buildFaultMesh(const ALE::Obj<topology::Mesh::SieveMesh>& fault,
 		      ALE::Obj<SieveFlexMesh>& faultBd,
-		      const double_array& coordinates,
+		      const scalar_array& coordinates,
 		      const int numVertices,
 		      const int spaceDim,
 		      const int_array& cells,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -21,7 +21,7 @@
 #include "MeshIO.hh" // implementation of class methods
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "Selection.hh" // USES boundary()
 
@@ -100,7 +100,7 @@
 // ----------------------------------------------------------------------
 // Get coordinates of vertices in mesh.
 void
-pylith::meshio::MeshIO::_getVertices(double_array* coordinates,
+pylith::meshio::MeshIO::_getVertices(scalar_array* coordinates,
 				     int* numVertices,
 				     int* spaceDim) const
 { // _getVertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIO.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,8 +31,7 @@
 #include "pylith/topology/topologyfwd.hh" // forward declarations
 #include "spatialdata/units/unitsfwd.hh" // forward declarations
 
-#include "pylith/utils/arrayfwd.hh" // USES double_array, int_array,
-                                    // string_vector
+#include "pylith/utils/array.hh" // USES scalar_array, int_array, string_vector
 
 // MeshIO ---------------------------------------------------------------
 /// C++ abstract base class for managing mesh input/output.
@@ -124,7 +123,7 @@
    * @param numVertices Pointer to number of vertices
    * @param spaceDim Poiner to dimension of vector space for coordinates
    */
-  void _getVertices(double_array* coordinates,
+  void _getVertices(scalar_array* coordinates,
 		    int* numVertices,
 		    int* spaceDim) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "MeshBuilder.hh" // USES MeshBuilder
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
-#include "pylith/utils/array.hh" // USES double_array, int_array, string_vector
+#include "pylith/utils/array.hh" // USES scalar_array, int_array, string_vector
 #include "spatialdata/utils/LineParser.hh" // USES LineParser
 
 #include "journal/info.h" // USES journal::info_t
@@ -76,7 +76,7 @@
   int numVertices = 0;
   int numCells = 0;
   int numCorners = 0;
-  double_array coordinates;
+  scalar_array coordinates;
   int_array cells;
   int_array materialIds;
 
@@ -223,7 +223,7 @@
 // Read mesh vertices.
 void
 pylith::meshio::MeshIOAscii::_readVertices(spatialdata::utils::LineParser& parser,
-					   double_array* coordinates,
+					   scalar_array* coordinates,
 					   int* numVertices, 
 					   int* numDims) const
 { // _readVertices
@@ -281,7 +281,7 @@
 { // _writeVertices
   int spaceDim = 0;
   int numVertices = 0;
-  double_array coordinates;
+  scalar_array coordinates;
   _getVertices(&coordinates, &numVertices, &spaceDim);
 
   fileout

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOAscii.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -83,7 +83,7 @@
    * @param spaceDim Pointer to dimension of coordinates vector space
    */
   void _readVertices(spatialdata::utils::LineParser& parser,
-		     double_array* coordinates,
+		     scalar_array* coordinates,
 		     int* numVertices,
 		     int* spaceDim) const;
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "MeshBuilder.hh" // USES MeshBuilder
 #include "ExodusII.hh" // USES ExodusII
 
-#include "pylith/utils/array.hh" // USES double_array, int_array, string_vector
+#include "pylith/utils/array.hh" // USES scalar_array, int_array, string_vector
 
 #include "petsc.h" // USES MPI_Comm
 #include "journal/info.h" // USES journal::info_t
@@ -68,7 +68,7 @@
   int numVertices = 0;
   int numCells = 0;
   int numCorners = 0;
-  double_array coordinates;
+  scalar_array coordinates;
   int_array cells;
   int_array materialIds;
 
@@ -124,7 +124,7 @@
 // Read mesh vertices.
 void
 pylith::meshio::MeshIOCubit::_readVertices(ExodusII& exofile,
-					   double_array* coordinates,
+					   scalar_array* coordinates,
 					   int* numVertices, 
 					   int* numDims) const
 { // _readVertices
@@ -148,7 +148,7 @@
     int dims[2];
     dims[0] = *numDims;
     dims[1] = *numVertices;
-    double_array buffer(*numVertices * *numDims);
+    scalar_array buffer(*numVertices * *numDims);
     exofile.getVar(&buffer[0], dims, ndims, "coord");
     
     coordinates->resize(*numVertices * *numDims);
@@ -161,7 +161,7 @@
     const char* coordNames[3] = { "coordx", "coordy", "coordz" };
 
     coordinates->resize(*numVertices * *numDims);
-    double_array buffer(*numVertices);
+    scalar_array buffer(*numVertices);
 
     const int ndims = 1;
     int dims[1];

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOCubit.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -85,7 +85,7 @@
    * @param spaceDim Pointer to dimension of coordinates vector space.
    */
   void _readVertices(ExodusII& filein,
-		     double_array* coordinates,
+		     scalar_array* coordinates,
 		     int* numVertices,
 		     int* spaceDim) const;
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
   int numVertices = 0;
   int numElements = 0;
   int numCorners = 0;
-  double* coordinates = 0;
+  PylithScalar* coordinates = 0;
   int* elements = 0;
 
   MPI_Comm_rank(comm, &rank);
@@ -152,11 +152,11 @@
 // Read mesh vertices.
 void
 MeshIOHDF5::_readVertices(hid_t& filein,
-			  double** pCoordinates,
+			  PylithScalar** pCoordinates,
 			  int* pNumVertices, 
 			  int* pNumDims) const
 { // _readVertices
-  double* coordinates = 0;
+  PylithScalar* coordinates = 0;
   int numDims = 0;
   int numVertices = 0;
 
@@ -179,7 +179,7 @@
   ALE::Obj<ALE::PetscMesh::field_type> coords_field = mesh->getCoordinates();
   ALE::Obj<ALE::PetscMesh::bundle_type> vertexBundle = mesh->getBundle(0);
   ALE::PetscMesh::field_type::patch_type patch;
-  const double* coordinates = coords_field->restrict(patch);
+  const PylithScalar* coordinates = coords_field->restrict(patch);
   const int numVertices = (vertexBundle->getGlobalOffsets()) ?
     vertexBundle->getGlobalOffsets()[mesh->commSize()] :
     mesh->getTopology()->depthStratum(0)->size();

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOHDF5.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -99,7 +99,7 @@
    * @param pNumDims Pointer to number of dimensions
    */
   void _readVertices(hid_t& filein,
-		     double** pCoordinates,
+		     PylithScalar** pCoordinates,
 		     int* pNumVertices, 
 		     int* pNumDims) const;
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOLagrit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOLagrit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/MeshIOLagrit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,7 +27,7 @@
 #include "MeshBuilder.hh" // USES MeshBuilder
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include <cassert> // USES assert()
 #include <stdexcept> // USES std::runtime_error()
@@ -70,7 +70,7 @@
   int numVertices = 0;
   int numCells = 0;
   int numCorners = 0;
-  double_array coordinates;
+  scalar_array coordinates;
   int_array cells;
   int_array materialIds;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -118,8 +118,17 @@
 						   const char* label,
 						   const int labelId)
 { // open
-  assert(0 != _writer);
+  if (!_writer) {
+    std::ostringstream msg;
+    if (label) {
+      msg << "Writer for output manager for " << label << " not set.";
+      throw std::runtime_error(msg.str());
+    } else {
+      throw std::runtime_error("Writer for output manager not set.");
+    } // if/else
+  } // if
 
+  assert(_writer);
   _writer->open(mesh, numTimeSteps, label, labelId);
 } // open
 
@@ -129,7 +138,7 @@
 void
 pylith::meshio::OutputManager<mesh_type, field_type>::close(void)
 { // close
-  assert(0 != _writer);
+  assert(_writer);
   _writer->close();
 } // close
 
@@ -138,12 +147,12 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::OutputManager<mesh_type, field_type>::openTimeStep(
-						       const double t,
+						       const PylithScalar t,
 						       const mesh_type& mesh,
 						       const char* label,
 						       const int labelId)
 { // openTimeStep
-  assert(0 != _writer);
+  assert(_writer);
   _writer->openTimeStep(t, mesh, label, labelId);
 } // openTimeStep
 
@@ -153,7 +162,7 @@
 void
 pylith::meshio::OutputManager<mesh_type, field_type>::closeTimeStep(void)
 { // closeTimeStep
-  assert(0 != _writer);
+  assert(_writer);
   _writer->closeTimeStep();
 } // closeTimeStep
 
@@ -162,7 +171,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::OutputManager<mesh_type, field_type>::appendVertexField(
-			                                const double t,
+			                                const PylithScalar t,
 							field_type& field,
 							const mesh_type& mesh)
 { // appendVertexField
@@ -178,7 +187,7 @@
 template<typename mesh_type, typename field_type>
 void
 pylith::meshio::OutputManager<mesh_type, field_type>::appendCellField(
-				                     const double t,
+				                     const PylithScalar t,
 						     field_type& field,
 						     const char* label,
 						     const int labelId)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputManager.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -91,12 +91,14 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
+  virtual
   void open(const mesh_type& mesh,
 	    const int numTimeSteps,
 	    const char* label =0,
 	    const int labelId =0);
 
   /// Close output files.
+  virtual
   void close(void);
 
   /** Setup file for writing fields at time step.
@@ -107,12 +109,14 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void openTimeStep(const double t,
+  virtual
+  void openTimeStep(const PylithScalar t,
 		    const mesh_type& mesh,
 		    const char* label =0,
 		    const int labelId =0);
 
   /// End writing fields at time step.
+  virtual
   void closeTimeStep(void);
 
   /** Append finite-element vertex field to file.
@@ -121,7 +125,8 @@
    * @param field Vertex field.
    * @param mesh Mesh for output.
    */
-  void appendVertexField(const double t,
+  virtual
+  void appendVertexField(const PylithScalar t,
 			 field_type& field,
 			 const mesh_type& mesh);
 
@@ -133,12 +138,13 @@
    *   (=0 means use all cells in mesh).
    * @param labelId Value of label defining which cells to include.
    */
-  void appendCellField(const double t,
+  virtual
+  void appendCellField(const PylithScalar t,
 		       field_type& field,
 		       const char* label =0,
 		       const int labelId =0);
 
-// PROTECTED MEMBERS ////////////////////////////////////////////////////
+// PROTECTED METHODS ////////////////////////////////////////////////////
 protected :
 
   /** Dimension field.
@@ -147,6 +153,11 @@
    */
   field_type& _dimension(field_type& fieldIn);
 
+// PROTECTED MEMBERS ////////////////////////////////////////////////////
+protected :
+
+  topology::Fields<field_type>* _fields; ///< Buffer fields.
+
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :
 
@@ -163,8 +174,6 @@
   VertexFilter<field_type>* _vertexFilter; ///< Filter applied to vertex data.
   CellFilter<mesh_type, field_type>* _cellFilter; ///< Filter applied to cell data.
 
-  topology::Fields<field_type>* _fields; ///< Buffer fields.
-
 }; // OutputManager
 
 #include "OutputManager.cc" // template methods

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.cc (from rev 19130, short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,205 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "OutputSolnPoints.hh" // implementation of class methods
+
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "MeshBuilder.hh" // USES MeshBuilder
+
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::meshio::OutputSolnPoints::OutputSolnPoints(void) :
+  _mesh(0),
+  _pointsMesh(0),
+  _interpolator(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::meshio::OutputSolnPoints::~OutputSolnPoints(void)
+{ // destructor
+  deallocate();
+} // destructor  
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void
+pylith::meshio::OutputSolnPoints::deallocate(void)
+{ // deallocate
+  OutputManager<topology::Mesh, topology::Field<topology::Mesh> >::deallocate();
+
+#if 0 // :MATT: Need DM wrapper for mesh
+  if (_interpolator) {
+    assert(_mesh);
+    const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
+    PetscErrorCode err = 
+      DMMeshInterpolationDestroy(sieveMesh, &_interpolator);
+    CHECK_PETSC_ERROR(err);
+  } // if
+#endif
+
+  _mesh = 0; // :TODO: Use shared pointer
+  delete _pointsMesh; _pointsMesh = 0;
+} // deallocate
+  
+// ----------------------------------------------------------------------
+// Get mesh associated with points.
+const pylith::topology::Mesh&
+pylith::meshio::OutputSolnPoints::pointsMesh(void)
+{ // pointsMesh
+  assert(_pointsMesh);
+  return *_pointsMesh;
+} // pointsMesh
+
+
+// ----------------------------------------------------------------------
+// Setup interpolator.
+void
+pylith::meshio::OutputSolnPoints::setupInterpolator(topology::Mesh* mesh,
+						    const PylithScalar* points,
+						    const int numPoints,
+						    const int spaceDim)
+{ // createPointsMesh
+  assert(mesh);
+  assert(points);
+
+  _mesh = mesh;
+
+  // Create mesh without cells for points.
+  const int meshDim = 0;
+  delete _pointsMesh; _pointsMesh = new topology::Mesh(meshDim);
+  _pointsMesh->createSieveMesh(0);
+  assert(_pointsMesh);
+
+  scalar_array pointsArray(points, numPoints*spaceDim);
+  int_array cells(numPoints);
+  for (int i=0; i < numPoints; ++i)
+    cells[i] = i;
+  const int numCells = numPoints;
+  const int numCorners = 1;
+  const bool interpolate = false;
+  MeshBuilder::buildMesh(_pointsMesh,
+			 &pointsArray, numPoints, spaceDim,
+			 cells, numCells, numCorners, meshDim,
+			 interpolate);
+  _pointsMesh->coordsys(_mesh->coordsys());
+
+#if 0 // :MATT: Need DM wrapper for mesh
+  // Setup interpolator object
+  PetscErrorCode err = 0;
+
+  err = DMMeshInterpolationCreate(_mesh->sieveMesh(), &_interpolator); 
+  CHECK_PETSC_ERROR(err);
+  
+  const spatialdata::geocoords::CoordSys* cs = _pointsMesh().coordsys();
+  assert(0 != cs);
+  assert(cs->spaceDim() == spaceDim);
+
+  err = DMMeshInterpolationSetDim(_mesh->sieveMesh(), spaceDim,
+				  _interpolator); CHECK_PETSC_ERROR(err);
+
+  err = DMMeshInterpolationAddPoints(_mesh->sieveMesh(), numPoints, points,
+				     _interpolator); CHECK_PETSC_ERROR(err);
+  
+  err = DMMeshInterpolationSetUp(_mesh->sieveMesh(), _interpolator);
+  CHECK_PETSC_ERROR(err);
+#endif
+} // createPointsMesh
+
+
+// ----------------------------------------------------------------------
+// Append finite-element vertex field to file.
+void
+pylith::meshio::OutputSolnPoints::appendVertexField(const PylithScalar t,
+			       topology::Field<topology::Mesh>& field,
+			       const topology::Mesh& mesh)
+{ // appendVertexField
+  assert(_mesh);
+  assert(_fields);
+
+  const ALE::Obj<SieveMesh>& pointsSieveMesh = _pointsMesh->sieveMesh();
+  assert(!pointsSieveMesh.isNull());
+  const ALE::Obj<SieveMesh::label_sequence>& vertices =
+    pointsSieveMesh->depthStratum(0);
+  assert(!vertices.isNull());
+
+  const int fiberDim = (vertices->begin() != vertices->end()) ?
+    field.section()->getFiberDimension(*vertices->begin()) : 0;
+
+  // Create field if necessary for interpolated values or recreate
+  // field if mismatch in size between buffer and field.
+  ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
+  logger.stagePush("Output");
+  if (!_fields->hasField("buffer (interpolated)")) {
+    _fields->add("buffer (interpolated)", field.label());
+  } // if
+
+  topology::Field<topology::Mesh>& fieldInterp = 
+    _fields->get("buffer (interpolated)");
+  if (vertices->size()*fiberDim != fieldInterp.sectionSize()) {
+    fieldInterp.newSection(vertices, fiberDim);
+    fieldInterp.allocate();
+  } // if
+  logger.stagePop();
+
+  fieldInterp.zero();
+  fieldInterp.vectorFieldType(field.vectorFieldType());
+  fieldInterp.scale(field.scale());
+  
+  PetscVec fieldInterpVec = fieldInterp.vector();
+  assert(fieldInterpVec);
+
+  const ALE::Obj<SieveMesh>& sieveMesh = _mesh->sieveMesh();
+  assert(!sieveMesh.isNull());
+
+#if 0 // :MATT: Need DM wrapper for mesh
+  PetscErrorCode err = 0;
+  
+  err = DMMeshInterpolationSetDof(sieveMesh, fiberDim, _interpolator);
+  CHECK_PETSC_ERROR(err);
+  
+  err = DMMeshInterpolationEvaluate(sieveMesh, field.section(), fieldInterpVec,
+				    _interpolator); CHECK_PETSC_ERROR(err);
+#endif  
+
+  OutputManager<topology::Mesh, topology::Field<topology::Mesh> >::appendVertexField(t, fieldInterp, mesh);
+} // appendVertexField
+
+
+// ----------------------------------------------------------------------
+// Append finite-element cell field to file.
+void
+pylith::meshio::OutputSolnPoints::appendCellField(const PylithScalar t,
+			   topology::Field<topology::Mesh>& field,
+			   const char* label,
+			   const int labelId)
+{ // appendCellField
+  throw std::logic_error("OutputSolnPoints::appendCellField() not implemented.");
+} // appendCellField
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.hh (from rev 19130, short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnPoints.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,116 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/meshio/OutputSolnPoints.hh
+ *
+ * @brief C++ object for managing output of finite-element data over a
+ * subdomain.
+ */
+
+#if !defined(pylith_meshio_outputsolnpoints_hh)
+#define pylith_meshio_outputsolnpoints_hh
+
+// Include directives ---------------------------------------------------
+#include "meshiofwd.hh" // forward declarations
+#include "pylith/utils/petscfwd.h"
+
+#include "pylith/topology/Mesh.hh" // ISA OutputManager<Mesh>
+#include "pylith/topology/Field.hh" // ISA OutputManager<Field<Mesh>>
+#include "OutputManager.hh" // ISA OutputManager
+
+// OutputSolnPoints -----------------------------------------------------
+/** @brief C++ object for managing output of finite-element data over
+ * a subdomain.
+ */
+class pylith::meshio::OutputSolnPoints : 
+  public OutputManager<topology::Mesh, topology::Field<topology::Mesh> >
+{ // OutputSolnPoints
+  friend class TestOutputSolnPoints; // unit testing
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+
+  /// Constructor
+  OutputSolnPoints(void);
+
+  /// Destructor
+  ~OutputSolnPoints(void);
+
+  /// Deallocate PETSc and local data structures.
+  void deallocate(void);
+  
+  /** Get mesh associated with points.
+   *
+   * @returns Mesh associated with points.
+   */
+  const topology::Mesh& pointsMesh(void);
+
+  /** Setup interpolator.
+   *
+   * @param mesh Domain mesh.
+   * @param points Array of coordinates for points [numPoints*spaceDim].
+   * @param numPoints Number of points.
+   * @param spaceDim Spatial dimension for coordinates.
+   */
+  void setupInterpolator(topology::Mesh* mesh,
+			 const PylithScalar* points,
+			 const int numPoints,
+			 const int spaceDim);
+  
+  /** Append finite-element vertex field to file.
+   *
+   * @param t Time associated with field.
+   * @param field Vertex field.
+   * @param mesh Mesh for output.
+   */
+  void appendVertexField(const PylithScalar t,
+			 topology::Field<topology::Mesh>& field,
+			 const topology::Mesh& mesh);
+
+  /** Append finite-element cell field to file.
+   *
+   * @param t Time associated with field.
+   * @param field Cell field.
+   * @param label Name of label defining cells to include in output
+   *   (=0 means use all cells in mesh).
+   * @param labelId Value of label defining which cells to include.
+   */
+  void appendCellField(const PylithScalar t,
+		       topology::Field<topology::Mesh>& field,
+		       const char* label =0,
+		       const int labelId =0);
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+  OutputSolnPoints(const OutputSolnPoints&); ///< Not implemented.
+  const OutputSolnPoints& operator=(const OutputSolnPoints&); ///< Not implemented
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+  topology::Mesh* _mesh; ///< Domain mesh.
+  topology::Mesh* _pointsMesh; ///< Mesh for points (no cells).
+  PetscDMMeshInterpolationInfo _interpolator; ///< Field interpolator.
+
+}; // OutputSolnPoints
+
+#endif // pylith_meshio_outputsolnpoints_hh
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnSubset.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnSubset.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/OutputSolnSubset.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -77,7 +77,7 @@
 pylith::meshio::OutputSolnSubset::subdomainMesh(const topology::Mesh& mesh)
 { // subdomainMesh
   delete _submesh; _submesh = new topology::SubMesh(mesh, _label.c_str());
-  assert(0 != _submesh);
+  assert(_submesh);
   return *_submesh;
 } // subdomainMesh
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileAscii.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileAscii.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileAscii.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "PsetFileAscii.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "journal/info.h" // USES journal::info_t
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileBinary.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileBinary.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/PsetFileBinary.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "BinaryIO.hh" // USES readString()
 
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include "journal/info.h" // USES journal::info_t
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/UCDFaultFile.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/UCDFaultFile.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/UCDFaultFile.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "MeshBuilder.hh" // USES MeshBuilder
 
 #include "pylith/topology/SubMesh.hh" // USES SubMesh
-#include "pylith/utils/array.hh" // USES double_array, int_array
+#include "pylith/utils/array.hh" // USES scalar_array, int_array
 
 #include <petsc.h> // USES MPI_Comm
 
@@ -73,7 +73,7 @@
   int numFVertices = 0;
   int numFCells = 0;
   int numFCorners = 0;
-  double_array fCoordinates;
+  scalar_array fCoordinates;
   int_array fCells;
   int_array fMaterialIds;
   int_array faceCells;
@@ -158,7 +158,7 @@
     vertexIDs.resize(numFVertices);
     for(int v = 0; v < numFVertices; ++v) {
       int id;
-      double dummy;
+      PylithScalar dummy;
 
       fin >> id;
       fin >> vertexIDs[v]; // global node number

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/VertexFilterVecNorm.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/VertexFilterVecNorm.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/VertexFilterVecNorm.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -125,12 +125,12 @@
     _fieldVecNorm->section();
   assert(!sectionNorm.isNull());
 
-  double norm = 0.0;
+  PylithScalar norm = 0.0;
   // Loop over vertices
   for (typename label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter) {
-    const double* values = sectionIn->restrictPoint(*v_iter);
+    const PylithScalar* values = sectionIn->restrictPoint(*v_iter);
     
     norm = 0.0;
     for (int i=0; i < fiberDimIn; ++i)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "HDF5.hh" // USES HDF5
 
 #include "pylith/topology/FieldBase.hh" // USES FieldBase enums
-#include "pylith/utils/array.hh" // USES double_arra
+#include "pylith/utils/array.hh" // USES PylithScalar_arra
 
 #include <string> // USES std::string
 #include <stdexcept> // USES std::runtime_error
@@ -57,7 +57,7 @@
   std::string cellType;
   int numVertices = 0;
   int spaceDim = 0;
-  double_array timeStamps;
+  scalar_array timeStamps;
   std::vector<FieldMetadata> fieldsMetadata;
 
   HDF5 h5(filenameHDF5, H5F_ACC_RDONLY);
@@ -203,14 +203,16 @@
 // ----------------------------------------------------------------------
 // Get timestamps from HDF5 file.
 void
-pylith::meshio::Xdmf::_getTimeStamps(double_array* timeStamps,
+pylith::meshio::Xdmf::_getTimeStamps(scalar_array* timeStamps,
 				     HDF5& h5)
 { // _getTimeStamps
   assert(timeStamps);
 
   hsize_t* dims = 0;
   int ndims = 0;
-  double* t = 0;
+  PylithScalar* t = 0;
+  const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+    H5T_NATIVE_DOUBLE : H5T_NATIVE_FLOAT;
 
   if (h5.hasDataset("/time")) {
     h5.getDatasetDims(&dims, &ndims, "/", "time");
@@ -223,7 +225,7 @@
     timeStamps->resize(numTimeStamps);
     for (int i=0; i < numTimeStamps; ++i) {
       h5.readDatasetChunk("/", "time", (char**)&t,
-			  &dims, &ndims, i, H5T_NATIVE_DOUBLE);
+			  &dims, &ndims, i, scalartype);
       assert(3 == ndims);
       assert(1 == dims[0]);
       assert(1 == dims[1]);
@@ -387,7 +389,7 @@
 // ----------------------------------------------------------------------
 // Write time stamps.
 void
-pylith::meshio::Xdmf::_writeTimeStamps(const double_array& timeStamps)
+pylith::meshio::Xdmf::_writeTimeStamps(const scalar_array& timeStamps)
 { // _writeTimeStamps
   assert(_file.is_open() && _file.good());
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/Xdmf.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
 // Include directives ---------------------------------------------------
 #include "meshiofwd.hh" // forward declarations
 
-#include "pylith/utils/array.hh" // USES double_array, std::vector
+#include "pylith/utils/array.hh" // USES scalar_array, std::vector
 
 #include <vector> // USES std::vector
 #include <fstream> // HASA std::ofstream
@@ -88,7 +88,7 @@
    * @param timeStamps Array of time stamps.
    * @param h5 HDF5 file.
    */
-  void _getTimeStamps(double_array* timeStamps,
+  void _getTimeStamps(scalar_array* timeStamps,
 		      HDF5& h5);
 
   /** Get field metadata from HDF5 file.
@@ -119,7 +119,7 @@
    *
    * @param timeStamps Array of time stamps.
    */
-  void _writeTimeStamps(const double_array& timeStamps);
+  void _writeTimeStamps(const scalar_array& timeStamps);
 
   /** Write grid topology information.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/meshiofwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/meshiofwd.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/meshio/meshiofwd.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,6 +57,7 @@
     template<typename field_type> class VertexFilter;
     template<typename field_type> class VertexFilterVecNorm;
     class OutputSolnSubset;
+    class OutputSolnPoints;
 
     class UCDFaultFile;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Explicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Explicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Explicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,9 +52,9 @@
   // acc(t) = (disp(t+dt) - 2*disp(t) + disp(t-dt)) / (dt*dt)
   //        = (dispIncr(t+dt) - disp(t) + disp(t-dt)) / (dt*dt)
 
-  const double dt = _dt;
-  const double dt2 = dt*dt;
-  const double twodt = 2.0*dt;
+  const PylithScalar dt = _dt;
+  const PylithScalar dt2 = dt*dt;
+  const PylithScalar twodt = 2.0*dt;
 
   topology::Field<topology::Mesh>& dispIncr = _fields->get("dispIncr(t->t+dt)");
   const spatialdata::geocoords::CoordSys* cs = dispIncr.mesh().coordsys();
@@ -72,12 +72,12 @@
     _fields->get("disp(t-dt)").section();
   assert(!dispTmdtSection.isNull());
 
-  double_array velVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     _fields->get("velocity(t)").section();
   assert(!velSection.isNull());
 
-  double_array accVertex(spaceDim);
+  scalar_array accVertex(spaceDim);
   const ALE::Obj<RealSection>&  accSection = 
     _fields->get("acceleration(t)").section();
   assert(!accSection.isNull());
@@ -95,13 +95,13 @@
        v_iter != verticesEnd;
        ++v_iter) {
     assert(spaceDim == dispIncrSection->getFiberDimension(*v_iter));
-    const double* dispIncrVertex = dispIncrSection->restrictPoint(*v_iter);
+    const PylithScalar* dispIncrVertex = dispIncrSection->restrictPoint(*v_iter);
 
     assert(spaceDim == dispTSection->getFiberDimension(*v_iter));
-    const double* dispTVertex = dispTSection->restrictPoint(*v_iter);
+    const PylithScalar* dispTVertex = dispTSection->restrictPoint(*v_iter);
 
     assert(spaceDim == dispTmdtSection->getFiberDimension(*v_iter));
-    const double* dispTmdtVertex = dispTmdtSection->restrictPoint(*v_iter);
+    const PylithScalar* dispTmdtVertex = dispTmdtSection->restrictPoint(*v_iter);
 
     for (int i=0; i < spaceDim; ++i) {
       velVertex[i] = 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -163,8 +163,8 @@
 void
 pylith::problems::Formulation::updateSettings(topology::Jacobian* jacobian,
 					      topology::SolutionFields* fields,
-					      const double t,
-					      const double dt)
+					      const PylithScalar t,
+					      const PylithScalar dt)
 { // updateSettings
   assert(0 != jacobian);
   assert(0 != fields);
@@ -182,8 +182,8 @@
 void
 pylith::problems::Formulation::updateSettings(topology::Field<topology::Mesh>* jacobian,
 					      topology::SolutionFields* fields,
-					      const double t,
-					      const double dt)
+					      const PylithScalar t,
+					      const PylithScalar dt)
 { // updateSettings
   assert(0 != jacobian);
   assert(0 != fields);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Formulation.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -129,8 +129,8 @@
    */
   void updateSettings(topology::Jacobian* jacobian,
 		      topology::SolutionFields* fields,
-		      const double t,
-		      const double dt);
+		      const PylithScalar t,
+		      const PylithScalar dt);
 
   /** Update handles and parameters for reforming the Jacobian and
    *  residual.
@@ -142,8 +142,8 @@
    */
   void updateSettings(topology::Field<topology::Mesh>* jacobian,
 		      topology::SolutionFields* fields,
-		      const double t,
-		      const double dt);
+		      const PylithScalar t,
+		      const PylithScalar dt);
 
   /** Reform system residual.
    *
@@ -189,8 +189,8 @@
 // PROTECTED MEMBERS ////////////////////////////////////////////////////
 protected :
 
-  double _t; ///< Current time (nondimensional).
-  double _dt; ///< Current time step (nondimensional).
+  PylithScalar _t; ///< Current time (nondimensional).
+  PylithScalar _dt; ///< Current time step (nondimensional).
   topology::Jacobian* _jacobian; ///< Handle to Jacobian of system.
   PetscMat _customConstraintPCMat; ///< Custom PETSc preconditioning matrix for constraints.
   topology::Field<topology::Mesh>* _jacobianLumped; ///< Handle to lumped Jacobian of system.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Implicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Implicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Implicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
 
   // vel(t) = (disp(t+dt) - disp(t)) / dt
   //        = dispIncr(t+dt) / dt
-  const double dt = _dt;
+  const PylithScalar dt = _dt;
 
   topology::Field<topology::Mesh>& dispIncr = _fields->get("dispIncr(t->t+dt)");
   const spatialdata::geocoords::CoordSys* cs = dispIncr.mesh().coordsys();
@@ -56,11 +56,11 @@
   const int spaceDim = cs->spaceDim();
   
   // Get sections.
-  double_array dispIncrVertex(spaceDim);
+  scalar_array dispIncrVertex(spaceDim);
   const ALE::Obj<RealSection>& dispIncrSection = dispIncr.section();
   assert(!dispIncrSection.isNull());
 	 
-  double_array velVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
   const ALE::Obj<RealSection>& velSection = 
     _fields->get("velocity(t)").section();
   assert(!velSection.isNull());

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Solver.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Solver.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/Solver.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -120,7 +120,7 @@
     // We have split fields with a custom constraint preconditioner
     // and constraints exist.
 
-    PetscInt M, N, m, n;
+    PylithInt M, N, m, n;
     PetscErrorCode err = 0;
     err = MatGetSize(jacobianMat, &M, &N);CHECK_PETSC_ERROR(err);
     err = MatGetLocalSize(jacobianMat, &m, &n);CHECK_PETSC_ERROR(err);
@@ -180,8 +180,8 @@
     if (_jacobianPCFault) {
       err = MatDestroy(&_jacobianPCFault); CHECK_PETSC_ERROR(err);
     } // if
-    PetscInt nrows = lagrangeGlobalOrder->getLocalSize();
-    PetscInt ncols = nrows;
+    PylithInt nrows = lagrangeGlobalOrder->getLocalSize();
+    PylithInt ncols = nrows;
 
     err = MatCreate(sieveMesh->comm(), &_jacobianPCFault); CHECK_PETSC_ERROR(err);
     err = MatSetSizes(_jacobianPCFault, nrows, ncols, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -136,7 +136,7 @@
     PetscPC pc = 0;
     PetscKSP *ksps = 0;
     PetscMat A = 0;
-    PetscInt num = 0;
+    PylithInt num = 0;
     
     err = KSPSetUp(_ksp); CHECK_PETSC_ERROR(err);
     err = KSPGetPC(_ksp, &pc); CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLumped.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLumped.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverLumped.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -99,7 +99,7 @@
   const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
   
   // Get sections.
-  double_array solutionVertex(spaceDim);
+  scalar_array solutionVertex(spaceDim);
   const ALE::Obj<RealSection>& solutionSection = solution->section();
   assert(!solutionSection.isNull());
 	 
@@ -116,10 +116,10 @@
        v_iter != verticesEnd;
        ++v_iter) {
     assert(spaceDim == jacobianSection->getFiberDimension(*v_iter));
-    const double* jacobianVertex = jacobianSection->restrictPoint(*v_iter);
+    const PylithScalar* jacobianVertex = jacobianSection->restrictPoint(*v_iter);
 
     assert(spaceDim == residualSection->getFiberDimension(*v_iter));
-    const double* residualVertex = residualSection->restrictPoint(*v_iter);
+    const PylithScalar* residualVertex = residualSection->restrictPoint(*v_iter);
 
     for (int i=0; i < spaceDim; ++i) {
       assert(jacobianVertex[i] != 0.0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,27 +40,6 @@
 typedef pylith::topology::Mesh::SieveMesh SieveMesh;
 typedef pylith::topology::Mesh::RealSection RealSection;
 
-namespace pylith {
-  namespace problems {
-    namespace _SolverNonlinear {
-
-      typedef struct {
-	PetscErrorCode           (*LineSearch)(PetscSNES,void*,PetscVec,PetscVec,PetscVec,PetscVec,PetscVec,PetscReal,PetscReal,PetscReal*,PetscReal*,PetscBool *);
-	void                     *lsP;                              /* user-defined line-search context (optional) */
-	/* --------------- Parameters used by line search method ----------------- */
-	PetscReal                alpha;                                                                  /* used to determine sufficient reduction */
-	PetscReal                maxstep;                                                          /* maximum step size */
-	PetscReal                minlambda;                                                        /* determines smallest line search lambda used */
-	PetscErrorCode           (*precheckstep)(PetscSNES,PetscVec,PetscVec,void*,PetscBool *);                  /* step-checking routine (optional) */
-	void                     *precheck;                                                        /* user-defined step-checking context (optional) */
-	PetscErrorCode           (*postcheckstep)(PetscSNES,PetscVec,PetscVec,PetscVec,void*,PetscBool *,PetscBool *); /* step-checking routine (optional) */
-	void                     *postcheck;                                                       /* user-defined step-checking context (optional) */
-	PetscViewer  monitor;
-      } SNES_LS;
-    } // _SolverNonlinear
-  } // problems
-} // pylith
-
 // ----------------------------------------------------------------------
 // Constructor
 pylith::problems::SolverNonlinear::SolverNonlinear(void) :
@@ -151,7 +130,7 @@
     PetscPC pc = 0;
     PetscKSP *ksps = 0;
     PetscMat A = 0;
-    PetscInt num = 0;
+    PylithInt num = 0;
 
     PetscErrorCode err = 0;
     err = SNESGetKSP(_snes, &ksp); CHECK_PETSC_ERROR(err);
@@ -248,11 +227,11 @@
 					      void *lsctx,
 					      PetscVec x,
 					      PetscVec f,
-					      PetscVec g,
 					      PetscVec y,
-					      PetscVec w,
 					      PetscReal fnorm,
 					      PetscReal xnorm,
+					      PetscVec g,
+					      PetscVec w,
 					      PetscReal *ynorm,
 					      PetscReal *gnorm,
 					      PetscBool *flag)
@@ -261,8 +240,7 @@
   // minimization problem:
   // min  z(x):  R^n -> R,
   // where z(x) = .5 * fnorm*fnorm, and fnorm = || f ||_2.
-  typedef pylith::problems::_SolverNonlinear::SNES_LS SNES_LS;
-       
+
   PetscReal      initslope,lambdaprev,gnormprev,a,b,d,t1,t2,rellength;
   PetscReal      minlambda,lambda,lambdatemp;
 #if defined(PETSC_USE_COMPLEX)
@@ -270,30 +248,38 @@
 #endif
   PetscErrorCode ierr;
   PetscInt       count;
-  SNES_LS        *neP = (SNES_LS*)snes->data;
-  PetscBool     changed_w = PETSC_FALSE,changed_y = PETSC_FALSE;
+  PetscBool      changed_w = PETSC_FALSE,changed_y = PETSC_FALSE;
+  MPI_Comm       comm;
 
   PetscFunctionBegin;
+  ierr = PetscObjectGetComm((PetscObject)snes,&comm);CHKERRQ(ierr);
   ierr = PetscLogEventBegin(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
   *flag   = PETSC_TRUE;
 
   ierr = VecNorm(y,NORM_2,ynorm);CHKERRQ(ierr);
-  if (!*ynorm) {
-    ierr = PetscInfo(snes,"Search direction and size is 0\n");CHKERRQ(ierr);
+  if (*ynorm == 0.0) {
+    if (snes->ls_monitor) {
+      ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+      ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: Initial direction and size is 0\n");CHKERRQ(ierr);
+      ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+    }
     *gnorm = fnorm;
     ierr   = VecCopy(x,w);CHKERRQ(ierr);
     ierr   = VecCopy(f,g);CHKERRQ(ierr);
     *flag  = PETSC_FALSE;
     goto theend1;
   }
-  if (*ynorm > neP->maxstep) {	/* Step too big, so scale back */
-    ierr = PetscInfo2(snes,"Scaling step by %G old ynorm %G\n",
-		      neP->maxstep/(*ynorm),*ynorm);CHKERRQ(ierr);
-    ierr = VecScale(y,neP->maxstep/(*ynorm));CHKERRQ(ierr);
-    *ynorm = neP->maxstep;
+  if (*ynorm > snes->maxstep) {	/* Step too big, so scale back */
+    if (snes->ls_monitor) {
+      ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+      ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: Scaling step by %14.12e old ynorm %14.12e\n",(double)(snes->maxstep/(*ynorm)),(double)(*ynorm));CHKERRQ(ierr);
+      ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+    }
+    ierr = VecScale(y,snes->maxstep/(*ynorm));CHKERRQ(ierr);
+    *ynorm = snes->maxstep;
   }
   ierr      = VecMaxPointwiseDivide(y,x,&rellength);CHKERRQ(ierr);
-  minlambda = neP->minlambda/rellength;
+  minlambda = snes->steptol/rellength;
   ierr      = MatMult(snes->jacobian,y,w);CHKERRQ(ierr);
 #if defined(PETSC_USE_COMPLEX)
   ierr      = VecDot(f,w,&cinitslope);CHKERRQ(ierr);
@@ -306,43 +292,36 @@
 
   ierr = VecWAXPY(w,-1.0,y,x);CHKERRQ(ierr);
   if (snes->nfuncs >= snes->max_funcs) {
-    ierr  = PetscInfo(snes,"Exceeded maximum function evaluations, "
-		      "while checking full step length!\n");CHKERRQ(ierr);
+    ierr  = PetscInfo(snes,"Exceeded maximum function evaluations, while checking full step length!\n");CHKERRQ(ierr);
     *flag = PETSC_FALSE;
     snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
     goto theend1;
-  } // if
-  // TEMPORARY: update w?
-
+  }
   ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
   if (snes->domainerror) {
     ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
     PetscFunctionReturn(0);
   }
   ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
-  if (PetscIsInfOrNanReal(*gnorm))
-    SETERRQ(PETSC_COMM_SELF,
-	    PETSC_ERR_FP, "User provided compute function generated a "
-	    "Not-a-Number");
-  ierr = PetscInfo2(snes,"Initial fnorm %G gnorm %G\n",fnorm,*gnorm);CHKERRQ(ierr);
-  if (.5*(*gnorm)*(*gnorm) <= .5*fnorm*fnorm + neP->alpha*initslope) {
-    // Sufficient reduction
-    ierr = PetscInfo2(snes,"Using full step: fnorm %G gnorm %G\n",
-		      fnorm,*gnorm);CHKERRQ(ierr);
+  if (PetscIsInfOrNanReal(*gnorm)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
+  ierr = PetscInfo2(snes,"Initial fnorm %14.12e gnorm %14.12e\n",(double)fnorm,(double)*gnorm);CHKERRQ(ierr);
+  if (.5*(*gnorm)*(*gnorm) <= .5*fnorm*fnorm + snes->ls_alpha*initslope) { /* Sufficient reduction */
+    if (snes->ls_monitor) {
+      ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+      ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: Using full step: fnorm %14.12e gnorm %14.12e\n",(double)fnorm,(double)*gnorm);CHKERRQ(ierr);
+      ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+    }
     goto theend1;
-  } // if
+  }
 
-  // Fit points with quadratic
+  /* Fit points with quadratic */
   lambda     = 1.0;
   lambdatemp = -initslope/((*gnorm)*(*gnorm) - fnorm*fnorm - 2.0*initslope);
   lambdaprev = lambda;
   gnormprev  = *gnorm;
-  if (lambdatemp > .5*lambda)
-    lambdatemp = .5*lambda;
-  if (lambdatemp <= .1*lambda)
-    lambda = .1*lambda; 
-  else
-    lambda = lambdatemp;
+  if (lambdatemp > .5*lambda)  lambdatemp = .5*lambda;
+  if (lambdatemp <= .1*lambda) lambda = .1*lambda; 
+  else                         lambda = lambdatemp;
 
   ierr  = VecWAXPY(w,-lambda,y,x);CHKERRQ(ierr);
   if (snes->nfuncs >= snes->max_funcs) {
@@ -350,47 +329,68 @@
     *flag = PETSC_FALSE;
     snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
     goto theend1;
-  } // if
-  // TEMPORARY: update w?
-
+  }
   ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
   if (snes->domainerror) {
     ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
     PetscFunctionReturn(0);
-  } // if
+  }
   ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
-  if (PetscIsInfOrNanReal(*gnorm)) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
-  ierr = PetscInfo1(snes,"gnorm after quadratic fit %G\n",*gnorm);CHKERRQ(ierr);
-  if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*neP->alpha*initslope) { /* sufficient reduction */
-    ierr = PetscInfo1(snes,"Quadratically determined step, lambda=%18.16e\n",lambda);CHKERRQ(ierr);
+  if (PetscIsInfOrNanReal(*gnorm)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
+  if (snes->ls_monitor) {
+    ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+    ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: gnorm after quadratic fit %14.12e\n",(double)*gnorm);CHKERRQ(ierr);
+    ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+  }
+  if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*snes->ls_alpha*initslope) { /* sufficient reduction */
+    if (snes->ls_monitor) {
+      ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+      ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: Quadratically determined step, lambda=%18.16e\n",lambda);CHKERRQ(ierr);
+      ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+    }
     goto theend1;
-  } // if
+  }
 
-  // Fit points with cubic
+  /* Fit points with cubic */
   count = 1;
   while (PETSC_TRUE) {
     if (lambda <= minlambda) { 
-      ierr = PetscInfo1(snes,"Unable to find good step length! After %D "
-			"tries \n",count);CHKERRQ(ierr);
-      ierr = PetscInfo6(snes,"fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, "
-			"minlambda=%18.16e, lambda=%18.16e, "
-			"initial slope=%18.16e\n",
-			fnorm,*gnorm,*ynorm,minlambda,lambda,initslope);
-      CHKERRQ(ierr);
-      ierr = PetscInfo1(snes,"Using last lambda tried %g\n",lambda);CHKERRQ(ierr);
+      if (snes->ls_monitor) {
+        ierr = PetscViewerASCIIAddTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+	ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: unable to find good step length! After %D tries \n",count);CHKERRQ(ierr);
+	ierr = PetscViewerASCIIPrintf(snes->ls_monitor,"    Line search: fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, minlambda=%18.16e, lambda=%18.16e, initial slope=%18.16e\n",(double)fnorm,(double)*gnorm,(double)*ynorm,(double)minlambda,(double)lambda,(double)initslope);CHKERRQ(ierr);
+        ierr = PetscViewerASCIISubtractTab(snes->ls_monitor,((PetscObject)snes)->tablevel);CHKERRQ(ierr);
+      }
+      *flag = PETSC_FALSE; // DIVERGED_LINE_SEARCH
       break;
     }
     t1 = .5*((*gnorm)*(*gnorm) - fnorm*fnorm) - lambda*initslope;
     t2 = .5*(gnormprev*gnormprev  - fnorm*fnorm) - lambdaprev*initslope;
     a  = (t1/(lambda*lambda) - t2/(lambdaprev*lambdaprev))/(lambda-lambdaprev);
-    b  = (-lambdaprev*t1/(lambda*lambda) + 
-	  lambda*t2/(lambdaprev*lambdaprev))/(lambda-lambdaprev);
+    b  = (-lambdaprev*t1/(lambda*lambda) + lambda*t2/(lambdaprev*lambdaprev))/(lambda-lambdaprev);
     d  = b*b - 3*a*initslope;
     if (d < 0.0) d = 0.0;
     if (a == 0.0) {
       lambdatemp = -initslope/(2.0*b);
     } else {
+
+      // MATT: Check this
+      // 
+      // Temporary fix by Brad to keep lambda in proper
+      // range. Necessary due to underflow and overflow of a, b, c,
+      // and d.
+#if 0 
       lambdatemp = (-b + sqrt(d))/(3.0*a);
+#else
+      if ((-b + sqrt(d) > 0.0 && a > 0.0) ||
+	  (-b + sqrt(d) < 0.0 && a < 0.0)) {
+	lambdatemp = (-b + sqrt(d))/(3.0*a);
+      } else {
+	lambdatemp = 0.05*lambda;
+      } // else
+#endif   
+
+ 
     } // if/else
     lambdaprev = lambda;
     gnormprev  = *gnorm;
@@ -400,69 +400,56 @@
       lambda = .1*lambda;
     else
       lambda = lambdatemp;
+
+
+
     ierr  = VecWAXPY(w,-lambda,y,x);CHKERRQ(ierr);
     if (snes->nfuncs >= snes->max_funcs) {
-      ierr = PetscInfo1(snes,"Exceeded maximum function evaluations, "
-			"while looking for good step length! %D \n",count);
-      CHKERRQ(ierr);
-      ierr = PetscInfo5(snes,"fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, "
-			"lambda=%18.16e, initial slope=%18.16e\n",
-			fnorm,*gnorm,*ynorm,lambda,initslope);CHKERRQ(ierr);
+      ierr = PetscInfo1(snes,"Exceeded maximum function evaluations, while looking for good step length! %D \n",count);CHKERRQ(ierr);
+      ierr = PetscInfo5(snes,"fnorm=%18.16e, gnorm=%18.16e, ynorm=%18.16e, lambda=%18.16e, initial slope=%18.16e\n",fnorm,*gnorm,*ynorm,lambda,initslope);CHKERRQ(ierr);
       *flag = PETSC_FALSE;
       snes->reason = SNES_DIVERGED_FUNCTION_COUNT;
       break;
-    } // if
-    // TEMPORARY: update w?
-
+    }
     ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
     if (snes->domainerror) {
       ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
       PetscFunctionReturn(0);
-    } // if
+    }
     ierr = VecNorm(g,NORM_2,gnorm);CHKERRQ(ierr);
-    if (PetscIsInfOrNanReal(*gnorm))
-      SETERRQ(PETSC_COMM_SELF, 
-	      PETSC_ERR_FP,"User provided compute function generated a "
-	      "Not-a-Number");
-    if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*neP->alpha*initslope) {
-      // is reduction enough?
-      ierr = PetscInfo2(snes,"Cubically determined step, current gnorm %G "
-			"lambda=%18.16e\n",*gnorm,lambda);CHKERRQ(ierr);
+    if (PetscIsInfOrNanReal(*gnorm)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
+    if (.5*(*gnorm)*(*gnorm) < .5*fnorm*fnorm + lambda*snes->ls_alpha*initslope) { /* is reduction enough? */
+      if (snes->ls_monitor) {
+	ierr = PetscPrintf(comm,"    Line search: Cubically determined step, current gnorm %14.12e lambda=%18.16e\n",(double)*gnorm,(double)lambda);CHKERRQ(ierr);
+      }
       break;
     } else {
-      ierr = PetscInfo2(snes,"Cubic step no good, shrinking lambda, "
-			"current gnorem %G lambda=%18.16e\n",
-			*gnorm,lambda);CHKERRQ(ierr);
-    } // if/else
+      if (snes->ls_monitor) {
+        ierr = PetscPrintf(comm,"    Line search: Cubic step no good, shrinking lambda, current gnorm %12.12e lambda=%18.16e\n",(double)*gnorm,(double)lambda);CHKERRQ(ierr);
+      }
+    }
     count++;
-  } // while
-
+  }
   theend1:
   /* Optional user-defined check for line search step validity */
-  if (neP->postcheckstep && *flag) {
-    ierr = (*neP->postcheckstep)(snes,x,y,w,neP->postcheck,&changed_y,
-				 &changed_w);CHKERRQ(ierr);
-    if (changed_y)
+  if (snes->ops->postcheckstep && *flag) {
+    ierr = (*snes->ops->postcheckstep)(snes,x,y,w,snes->postcheck,&changed_y,&changed_w);CHKERRQ(ierr);
+    if (changed_y) {
       ierr = VecWAXPY(w,-1.0,y,x);CHKERRQ(ierr);
-    // TEMPORARY: update w?
-
-    if (changed_y || changed_w) {
-      // recompute the function if the step has changed 
+    }
+    if (changed_y || changed_w) { /* recompute the function if the step has changed */
       ierr = SNESComputeFunction(snes,w,g);CHKERRQ(ierr);
       if (snes->domainerror) {
         ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
         PetscFunctionReturn(0);
       }
       ierr = VecNormBegin(g,NORM_2,gnorm);CHKERRQ(ierr);
-      if (PetscIsInfOrNanReal(*gnorm))
-	SETERRQ(PETSC_COMM_SELF, 
-		PETSC_ERR_FP, "User provided compute function generated a "
-		"Not-a-Number");
+      if (PetscIsInfOrNanReal(*gnorm)) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_FP,"User provided compute function generated a Not-a-Number");
       ierr = VecNormBegin(y,NORM_2,ynorm);CHKERRQ(ierr);
       ierr = VecNormEnd(g,NORM_2,gnorm);CHKERRQ(ierr);
       ierr = VecNormEnd(y,NORM_2,ynorm);CHKERRQ(ierr);
-    } // if
-  } // if
+    }
+  }
   ierr = PetscLogEventEnd(SNES_LineSearch,snes,x,f,g);CHKERRQ(ierr);
 
   // ======================================================================

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/problems/SolverNonlinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -132,11 +132,11 @@
 			    void *lsctx,
 			    PetscVec x,
 			    PetscVec f,
-			    PetscVec g,
 			    PetscVec y,
-			    PetscVec w,
 			    PetscReal fnorm,
 			    PetscReal xnorm,
+			    PetscVec g,
+			    PetscVec w,
 			    PetscReal *ynorm,
 			    PetscReal *gnorm,
 			    PetscBool *flag);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Distributor.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Distributor.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Distributor.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -102,17 +102,17 @@
   // Setup and allocate field
   const int fiberDim = 1;
   topology::Field<topology::Mesh> partition(mesh);
+  partition.newSection(topology::FieldBase::CELLS_FIELD, fiberDim);
+  partition.allocate();
   partition.scale(1.0);
   partition.label("partition");
   partition.vectorFieldType(topology::FieldBase::SCALAR);
-  partition.newSection(topology::FieldBase::CELLS_FIELD, fiberDim);
-  partition.allocate();
   const ALE::Obj<RealSection>& partitionSection = partition.section();
   assert(!partitionSection.isNull());
 
   const ALE::Obj<SieveMesh> sieveMesh = mesh.sieveMesh();
   assert(!sieveMesh.isNull());
-  double rankReal = double(sieveMesh->commRank());
+  PylithScalar rankReal = PylithScalar(sieveMesh->commRank());
   assert(sieveMesh->height() > 0);
   const ALE::Obj<SieveMesh::label_sequence>& cells = 
     sieveMesh->heightStratum(0);
@@ -126,7 +126,7 @@
   } // for
 
   //partition->view("PARTITION");
-  const double t = 0.0;
+  const PylithScalar t = 0.0;
   const int numTimeSteps = 0;
   writer->open(mesh, numTimeSteps);
   writer->openTimeStep(t, mesh);
@@ -206,8 +206,8 @@
   int localRecvOverlapSize = 0, recvOverlapSize;
   const int commSize = sendMeshOverlap->commSize();
   for (int p = 0; p < commSize; ++p) {
-    localSendOverlapSize += sendMeshOverlap->cone(p)->size();
-    localRecvOverlapSize += recvMeshOverlap->support(p)->size();
+    localSendOverlapSize += sendMeshOverlap->getConeSize(p);
+    localRecvOverlapSize += recvMeshOverlap->getSupportSize(p);
   } // for
   MPI_Allreduce(&localSendOverlapSize, &sendOverlapSize, 1, MPI_INT, MPI_SUM,
 		sendMeshOverlap->comm());
@@ -388,6 +388,11 @@
   logger.stagePop();
   logger.stagePop(); // Mesh
   //logger.setDebug(0);
+
+#if 0 // DEBUGGING
+  sendParallelMeshOverlap->view("SEND OVERLAP");
+  recvParallelMeshOverlap->view("RECV OVERLAP");
+#endif
 } // distribute
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "Field.hh" // implementation of class methods
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -87,6 +87,7 @@
       err = VecDestroy(&s_iter->second.scatterVec);CHECK_PETSC_ERROR(err);
     } // if
   } // for
+  _scatters.clear();
 } // deallocate
 
 // ----------------------------------------------------------------------
@@ -146,6 +147,9 @@
 void
 pylith::topology::Field<mesh_type, section_type>::newSection(void)
 { // newSection
+  // Clear memory
+  clear();
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Field");
 
@@ -167,8 +171,12 @@
 { // newSection
   typedef typename mesh_type::SieveMesh::point_type point_type;
 
+  // Clear memory
+  clear();
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Field");
+
   if (fiberDim < 0) {
     std::ostringstream msg;
     msg << "Fiber dimension (" << fiberDim << ") for field '" << _metadata.label
@@ -203,6 +211,9 @@
 { // newSection
   typedef typename mesh_type::SieveMesh::point_type point_type;
 
+  // Clear memory
+  clear();
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Field");
   if (fiberDim < 0) {
@@ -261,6 +272,9 @@
 pylith::topology::Field<mesh_type, section_type>::newSection(const Field& src,
 					       const int fiberDim)
 { // newSection
+  // Clear memory
+  clear();
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Field");
 
@@ -299,21 +313,22 @@
 void
 pylith::topology::Field<mesh_type, section_type>::cloneSection(const Field& src)
 { // cloneSection
+  std::string origLabel = _metadata.label;
+
+  // Clear memory
+  clear();
+
+  const ALE::Obj<section_type>& srcSection = src.section();
+  if (!srcSection.isNull() && _section.isNull()) {
+    newSection();
+  } // if
+
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   logger.stagePush("Field");
 
-  deallocate();
-  std::string origLabel = _metadata.label;
   _metadata = src._metadata;
   label(origLabel.c_str());
 
-  const ALE::Obj<section_type>& srcSection = src.section();
-  if (!srcSection.isNull() && _section.isNull()) {
-    logger.stagePop();
-    newSection();
-    logger.stagePush("Field");
-  }
-
   if (!_section.isNull()) {
     if (!srcSection->sharedStorage()) {
       _section->setAtlas(srcSection->getAtlas());
@@ -451,7 +466,7 @@
     // Assume fiber dimension is uniform
     const int fiberDim = (chart.size() > 0) ? 
       _section->getFiberDimension(*chartBegin) : 0;
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     values *= 0.0;
 
     for (typename chart_type::const_iterator c_iter = chartBegin;
@@ -622,7 +637,7 @@
     // Assume fiber dimension is uniform
     const int fiberDim = (chart.size() > 0) ? 
       _section->getFiberDimension(*chartBegin) : 0;
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
 
     for (typename chart_type::const_iterator c_iter = chartBegin;
 	 c_iter != chartEnd;
@@ -660,7 +675,7 @@
     // Assume fiber dimension is uniform
     const int fiberDim = (chart.size() > 0) ? 
       _section->getFiberDimension(*chart.begin()) : 0;
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
 
     spatialdata::units::Nondimensional normalizer;
 
@@ -730,12 +745,14 @@
 // information from the "global" PETSc vector view to the "local"
 // Sieve section view.
 template<typename mesh_type, typename section_type>
+template<typename scatter_mesh_type>
 void
-pylith::topology::Field<mesh_type, section_type>::createScatter(const char* context)
+pylith::topology::Field<mesh_type, section_type>::createScatter(const scatter_mesh_type& mesh,
+								const char* context)
 { // createScatter
   assert(context);
   assert(!_section.isNull());
-  assert(!_mesh.sieveMesh().isNull());
+  assert(!mesh.sieveMesh().isNull());
 
   PetscErrorCode err = 0;
   const bool createScatterOk = true;
@@ -752,7 +769,7 @@
   // Get global order (create if necessary).
   const std::string& orderLabel = _section->getName();
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh =
-    _mesh.sieveMesh();
+    mesh.sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<typename mesh_type::SieveMesh::order_type>& order = 
     sieveMesh->getFactory()->getGlobalOrder(sieveMesh, orderLabel,
@@ -760,7 +777,8 @@
   assert(!order.isNull());
 
   // Create scatter
-  err = DMMeshCreateGlobalScatter(_mesh.sieveMesh(), _section, order, false, &sinfo.scatter);
+  err = DMMeshCreateGlobalScatter(sieveMesh, _section, order, false, 
+				  &sinfo.scatter);
   CHECK_PETSC_ERROR(err);
   
   // Create scatterVec
@@ -794,14 +812,17 @@
 // DOF. Use createScatterWithBC() to include the constrained DOF in
 // the PETSc vector.
 template<typename mesh_type, typename section_type>
+template<typename scatter_mesh_type>
 void
-pylith::topology::Field<mesh_type, section_type>::createScatter(const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
-								const char* context)
+pylith::topology::Field<mesh_type, section_type>::createScatter(
+      const scatter_mesh_type& mesh,
+      const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
+      const char* context)
 { // createScatter
   assert(!numbering.isNull());
   assert(context);
   assert(!_section.isNull());
-  assert(!_mesh.sieveMesh().isNull());
+  assert(!mesh.sieveMesh().isNull());
 
   PetscErrorCode err = 0;
   const bool createScatterOk = true;
@@ -823,7 +844,7 @@
     _section->getName() + std::string("_") + std::string(context) :
     _section->getName();
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh =
-    _mesh.sieveMesh();
+    mesh.sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<typename mesh_type::SieveMesh::order_type>& order = 
     sieveMesh->getFactory()->getGlobalOrder(sieveMesh, orderLabel,
@@ -833,7 +854,8 @@
   assert(!order.isNull());
 
   // Create scatter
-  err = DMMeshCreateGlobalScatter(_mesh.sieveMesh(), _section, order, false, &sinfo.scatter); 
+  err = DMMeshCreateGlobalScatter(sieveMesh, _section, order, false, 
+				  &sinfo.scatter); 
   CHECK_PETSC_ERROR(err);
 
   // Create scatterVec
@@ -847,7 +869,7 @@
   } // if/else
 
   // Create vector
-  err = VecCreate(_mesh.comm(), &sinfo.vector);
+  err = VecCreate(mesh.comm(), &sinfo.vector);
   CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject)sinfo.vector,
 			   _metadata.label.c_str());
@@ -877,12 +899,15 @@
 // DOF. Use createScatterWithBC() to include the constrained DOF in
 // the PETSc vector.
 template<typename mesh_type, typename section_type>
+template<typename scatter_mesh_type>
 void
-pylith::topology::Field<mesh_type, section_type>::createScatterWithBC(const char* context)
+pylith::topology::Field<mesh_type, section_type>::createScatterWithBC(
+        const scatter_mesh_type& mesh,
+	const char* context)
 { // createScatterWithBC
   assert(context);
   assert(!_section.isNull());
-  assert(!_mesh.sieveMesh().isNull());
+  assert(!mesh.sieveMesh().isNull());
 
 
   PetscErrorCode err = 0;
@@ -900,7 +925,7 @@
   // Get global order (create if necessary).
   const std::string& orderLabel = _section->getName();
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh =
-    _mesh.sieveMesh();
+    mesh.sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<typename mesh_type::SieveMesh::order_type>& order = 
     sieveMesh->getFactory()->getGlobalOrderWithBC(sieveMesh, orderLabel,
@@ -908,7 +933,8 @@
   assert(!order.isNull());
 
   // Create scatter
-  err = DMMeshCreateGlobalScatter(_mesh.sieveMesh(), _section, order, true, &sinfo.scatter); 
+  err = DMMeshCreateGlobalScatter(sieveMesh, _section, order, true, 
+				  &sinfo.scatter); 
   CHECK_PETSC_ERROR(err);
   
   // Create scatterVec
@@ -922,7 +948,7 @@
   } // if/else
   
   // Create vector
-   err = VecCreate(_mesh.comm(), &sinfo.vector);
+   err = VecCreate(mesh.comm(), &sinfo.vector);
   CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject)sinfo.vector,
 			   _metadata.label.c_str());
@@ -942,9 +968,12 @@
 // createScatter() if constrained DOF should be omitted from the PETSc
 // vector.
 template<typename mesh_type, typename section_type>
+template<typename scatter_mesh_type>
 void
-pylith::topology::Field<mesh_type, section_type>::createScatterWithBC(const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
-								const char* context)
+pylith::topology::Field<mesh_type, section_type>::createScatterWithBC(
+       const scatter_mesh_type& mesh,
+       const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
+       const char* context)
 { // createScatterWithBC
   assert(!numbering.isNull());
   assert(context);
@@ -970,7 +999,7 @@
     _section->getName() + std::string("_") + std::string(context) :
     _section->getName();
   const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh =
-    _mesh.sieveMesh();
+    mesh.sieveMesh();
   assert(!sieveMesh.isNull());
   const ALE::Obj<typename mesh_type::SieveMesh::order_type>& order = 
     sieveMesh->getFactory()->getGlobalOrderWithBC(sieveMesh, orderLabel,
@@ -981,7 +1010,8 @@
   //order->view("GLOBAL ORDER"); // DEBUG
 
   // Create scatter
-  err = DMMeshCreateGlobalScatter(_mesh.sieveMesh(), _section, order, true, &sinfo.scatter); 
+  err = DMMeshCreateGlobalScatter(sieveMesh, _section, order, true, 
+				  &sinfo.scatter); 
   CHECK_PETSC_ERROR(err);
 
   // Create scatterVec
@@ -995,7 +1025,7 @@
   } // if/else
 
   // Create vector
-  err = VecCreate(_mesh.comm(), &sinfo.vector);
+  err = VecCreate(mesh.comm(), &sinfo.vector);
   CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject)sinfo.vector,
 			   _metadata.label.c_str());
@@ -1006,14 +1036,17 @@
   err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
 
 #if 0
-  std::cout << "CONTEXT: " << context 
+  std::cout << "["<<sieveMesh->commRank()<<"] CONTEXT: " << context 
 	    << ", orderLabel: " << orderLabel
 	    << ", section size w/BC: " << _section->sizeWithBC()
 	    << ", section size: " << _section->size()
 	    << ", section storage size: " << _section->getStorageSize()
 	    << ", global numbering size: " << numbering->getGlobalSize()
-	    << ", global size: " << order->getGlobalSize()
+	    << ", global order size: " << order->getGlobalSize()
+	    << ", local numbering size: " << numbering->getLocalSize()
+	    << ", local order size: " << order->getLocalSize()
 	    << ", scatter from size: " << sinfo.scatter->from_n
+	    << ", scatter: " << sinfo.scatter
 	    << std::endl;
 #endif
   
@@ -1125,8 +1158,10 @@
     for (typename chart_type::const_iterator c_iter = chart.begin();
         c_iter != chartEnd;
         ++c_iter) {
-      assert(spaceDim == _section->getFiberDimension(*c_iter));
-      _section->setFiberDimension(*c_iter, 1, fibration);
+      if (_section->getFiberDimension(*c_iter) > 0) {
+	assert(spaceDim == _section->getFiberDimension(*c_iter));
+	_section->setFiberDimension(*c_iter, 1, fibration);
+      } // if
     } // for
 } // splitDefault
 
@@ -1139,8 +1174,33 @@
 { // _getScatter
   assert(context);
 
-  const bool isNewScatter = _scatters.find(context) == _scatters.end();
+  bool isNewScatter = _scatters.find(context) == _scatters.end();
 
+  // Synchronize creation of scatter (empty sections may have
+  // leftover, reusable scatters that need to be cleared out).
+  int numNewScatterLocal = (isNewScatter) ? 1 : 0;
+  int numNewScatter = 0;
+  MPI_Allreduce(&numNewScatterLocal, &numNewScatter, 1, MPI_INT, MPI_MAX,
+		_mesh.comm());
+  if (numNewScatter && !isNewScatter) {
+    // remove old scatter
+    ScatterInfo& sinfo = _scatters[context];
+    PetscErrorCode err = 0;
+    if (sinfo.vector) {
+      err = VecDestroy(&sinfo.vector);CHECK_PETSC_ERROR(err);
+    } // if
+    if (sinfo.scatter) {
+      err = VecScatterDestroy(&sinfo.scatter);CHECK_PETSC_ERROR(err);
+    } // if
+
+    if (sinfo.scatterVec) {
+      err = VecDestroy(&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
+    } // if
+
+    _scatters.erase(context);
+    isNewScatter = true;
+  } // if
+
   if (isNewScatter && !createOk) {
     std::ostringstream msg;
     msg << "Scatter for context '" << context << "' does not exist.";

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -131,13 +131,13 @@
    *
    * @param value Scale associated with field.
    */
-  void scale(const double value);
+  void scale(const PylithScalar value);
 
   /** Get scale for dimensionalizing field.
    *
    * @returns Scale associated with field.
    */
-  double scale(void) const;
+  PylithScalar scale(void) const;
 
   /** Set flag indicating whether it is okay to dimensionalize field.
    *
@@ -267,9 +267,12 @@
    * DOF. Use createScatterWithBC() to include the constrained DOF in
    * the PETSc vector.
    *
+   * @param mesh Mesh associated with scatter.
    * @param context Label for context associated with vector.
    */
-  void createScatter(const char* context ="");
+  template<typename scatter_mesh_type>
+  void createScatter(const scatter_mesh_type& mesh,
+		     const char* context ="");
 
 
   /** Create PETSc vector scatter for field. This is used to transfer
@@ -278,10 +281,13 @@
    * DOF. Use createScatterWithBC() to include the constrained DOF in
    * the PETSc vector.
    *
+   * @param mesh Mesh associated with scatter.
    * @param numbering Numbering used to select points in section.
    * @param context Label for context associated with vector.
    */
-  void createScatter(const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
+  template<typename scatter_mesh_type>
+  void createScatter(const scatter_mesh_type& mesh,
+		     const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
 		     const char* context ="");
 
   /** Create PETSc vector scatter for field. This is used to transfer
@@ -290,9 +296,12 @@
    * DOF. Use createScatter() if constrained DOF should be omitted
    * from the PETSc vector.
    *
+   * @param mesh Mesh associated with scatter.
    * @param context Label for context associated with vector.
    */
-  void createScatterWithBC(const char* context ="");
+  template<typename scatter_mesh_type>
+  void createScatterWithBC(const scatter_mesh_type& mesh,
+			   const char* context ="");
 
 
   /** Create PETSc vector scatter for field. This is used to transfer
@@ -301,10 +310,13 @@
    * DOF. Use createScatter() if constrained DOF should be omitted
    * from the PETSc vector.
    *
+   * @param mesh Mesh associated with scatter.
    * @param numbering Numbering used to select points in section.
    * @param context Label for context associated with vector.
    */
-  void createScatterWithBC(const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
+  template<typename scatter_mesh_type>
+  void createScatterWithBC(const scatter_mesh_type& mesh,
+			   const typename ALE::Obj<typename SieveMesh::numbering_type> numbering,
 		     const char* context ="");
 
   /** Get PETSc vector associated with field.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.icc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Field.icc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,14 +67,14 @@
 template<typename mesh_type, typename section_type>
 inline
 void
-pylith::topology::Field<mesh_type, section_type>::scale(const double value) {
+pylith::topology::Field<mesh_type, section_type>::scale(const PylithScalar value) {
   _metadata.scale = value;
 }
 
 // Get scale for dimensionalizing field.
 template<typename mesh_type, typename section_type>
 inline
-double
+PylithScalar
 pylith::topology::Field<mesh_type, section_type>::scale(void) const {
   return _metadata.scale;
 }

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldBase.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldBase.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldBase.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,7 +63,7 @@
   struct Metadata {
     std::string label; // Label for field.
     VectorFieldEnum vectorFieldType; ///< Type of vector field.
-    double scale; // Dimension scale associated with values.
+    PylithScalar scale; // Dimension scale associated with values.
     bool dimsOkay; // Ok to replace nondimensionalized values 
                    // with dimensionalized values.
   }; // Metadata

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -62,7 +62,7 @@
 					  const char* label,
 					  const int fiberDim,
 					  const FieldBase::VectorFieldEnum vectorFieldType,
-					  const double scale,
+					  const PylithScalar scale,
 					  const bool dimsOkay)
 { // add
   if (hasField(name)) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/FieldsNew.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -86,7 +86,7 @@
 	   const char* label,
 	   const int fiberDim,
 	   FieldBase::VectorFieldEnum vectorFieldType =FieldBase::OTHER,
-	   const double scale =1.0,
+	   const PylithScalar scale =1.0,
 	   const bool dimsOkay =false);
 
   /** Create and allocate Sieve section.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Jacobian.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Jacobian.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Jacobian.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -191,7 +191,7 @@
   MatConvert(matSparse, MATSEQAIJ, MAT_INITIAL_MATRIX, &matSparseAIJ);
   MatConvert(matSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &matDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -199,14 +199,14 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(matDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   bool isSymmetric = true;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int indexIJ = ncols*iRow+iCol;
       const int indexJI = nrows*iCol+iRow;
-      const double valIJ = vals[indexIJ];
-      const double valJI = vals[indexJI];
+      const PylithScalar valIJ = vals[indexIJ];
+      const PylithScalar valJI = vals[indexJI];
       if (fabs(valIJ) > 1.0)
 	if (fabs(1.0 - valJI/valIJ) > tolerance) {
 	  std::cerr << "Mismatch: " 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 
 #include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <stdexcept> // USES std::runtime_error
 #include <sstream> // USES std::ostringstream
@@ -110,7 +110,7 @@
   coordsDimSection->allocateStorage();
   coordsDimSection->setBC(coordsSection->getBC());
 
-  const double lengthScale = normalizer.lengthScale();
+  const PylithScalar lengthScale = normalizer.lengthScale();
   const ALE::Obj<SieveMesh::label_sequence>& vertices = 
     _mesh->depthStratum(0);
   assert(!vertices.isNull());
@@ -119,13 +119,13 @@
   const SieveMesh::label_sequence::iterator verticesEnd = 
     vertices->end();
 
-  double coordsVertex[3];
+  PylithScalar coordsVertex[3];
   for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
       v_iter != verticesEnd;
       ++v_iter) {
     const int spaceDim = coordsSection->getFiberDimension(*v_iter);
     assert(spaceDim <= 3);
-    const double* coordsDimVertex = coordsSection->restrictPoint(*v_iter);
+    const PylithScalar* coordsDimVertex = coordsSection->restrictPoint(*v_iter);
     
     // Update section with dimensioned coordinates
     assert(spaceDim == 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/Mesh.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   /** Typedefs for basic types associated with Sieve mesh.
    * All other PyLith mesh and submesh objects should define:
    *   (1) SieveMesh - Sieve mesh
-   *   (2) RealSection - Section of doubles
+   *   (2) RealSection - Section of PylithScalars
    *   (3) IntSection - Section of ints
    * because these are used in templated code.
    * 
@@ -62,10 +62,10 @@
   typedef pylith::SieveSubMesh SieveSubMesh;
 
   typedef SieveMesh::real_section_type RealSection;
-  typedef ISectionSpaces<SieveMesh::point_type, double> RealUniformSection;
+  typedef ISectionSpaces<SieveMesh::point_type, PylithScalar> RealUniformSection;
   typedef SieveMesh::int_section_type IntSection;
 
-  typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PetscInt> IndicesVisitor;
+  typedef ALE::ISieveVisitor::IndicesVisitor<RealSection,SieveMesh::order_type,PylithInt> IndicesVisitor;
   //@}
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshOrder.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshOrder.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshOrder.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,7 +37,7 @@
 class ALE::MeshOrder
 { // MeshOrder
   typedef int point_type;
-  typedef ALE::IMesh<PetscInt,PetscScalar> mesh_type;
+  typedef ALE::IMesh<PylithInt,PylithScalar> mesh_type;
 
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public :

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/MeshRefiner.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -692,9 +692,10 @@
   Obj<mesh_type::recv_overlap_type> newRecvOverlap = newMesh->getRecvOverlap();
   const Obj<mesh_type::send_overlap_type>& sendOverlap = mesh->getSendOverlap();
   const Obj<mesh_type::recv_overlap_type>& recvOverlap = mesh->getRecvOverlap();
-  Obj<mesh_type::send_overlap_type::traits::capSequence> sendPoints  = sendOverlap->cap();
   const mesh_type::send_overlap_type::source_type localOffsetNormal = newVerticesStartNormal - oldVerticesStartNormal;
   const mesh_type::send_overlap_type::source_type localOffsetFault  = newVerticesStartFault  - oldVerticesStartFault;
+#if 0
+  Obj<mesh_type::send_overlap_type::traits::capSequence> sendPoints  = sendOverlap->cap();
   
   for(mesh_type::send_overlap_type::traits::capSequence::iterator p_iter = sendPoints->begin(); p_iter != sendPoints->end(); ++p_iter) {
     const Obj<mesh_type::send_overlap_type::traits::supportSequence>& ranks      = sendOverlap->support(*p_iter);
@@ -738,6 +739,56 @@
       }
     } // for
   } // for
+#else
+  mesh_type::send_overlap_type::baseSequence::iterator sendRanksBegin = sendOverlap->baseBegin();
+  mesh_type::send_overlap_type::baseSequence::iterator sendRanksEnd   = sendOverlap->baseEnd();
+
+  for(mesh_type::send_overlap_type::baseSequence::iterator r_iter = sendRanksBegin; r_iter != sendRanksEnd; ++r_iter) {
+    const int                                                  rank               = *r_iter;
+    const mesh_type::send_overlap_type::source_type            remoteOffsetNormal = newVerticesStartNormalP[rank] - oldVerticesStartNormalP[rank];
+    const mesh_type::send_overlap_type::source_type            remoteOffsetFault  = newVerticesStartFaultP[rank]  - oldVerticesStartFaultP[rank];
+    const mesh_type::send_overlap_type::coneSequence::iterator pointsBegin        = sendOverlap->coneBegin(rank);
+    const mesh_type::send_overlap_type::coneSequence::iterator pointsEnd          = sendOverlap->coneEnd(rank);
+
+    for(mesh_type::send_overlap_type::coneSequence::iterator p_iter = pointsBegin; p_iter != pointsEnd; ++p_iter) {
+      const mesh_type::send_overlap_type::source_type& localPoint  = *p_iter;
+      const mesh_type::send_overlap_type::source_type& remotePoint = p_iter.color();
+
+      if (localPoint >= oldVerticesStartNormal && localPoint < oldVerticesStartFault) {
+        assert(remotePoint >= oldVerticesStartNormalP[rank] && remotePoint < oldVerticesStartFaultP[rank]);
+        newSendOverlap->addArrow(localPoint+localOffsetNormal, rank, remotePoint+remoteOffsetNormal);
+      } else {
+        assert(localPoint  >= oldVerticesStartFault);
+        assert(remotePoint >= oldVerticesStartFaultP[rank]);
+        newSendOverlap->addArrow(localPoint+localOffsetFault,  rank, remotePoint+remoteOffsetFault);
+      }
+    }
+  }
+  mesh_type::recv_overlap_type::capSequence::iterator recvRanksBegin = recvOverlap->capBegin();
+  mesh_type::recv_overlap_type::capSequence::iterator recvRanksEnd   = recvOverlap->capEnd();
+
+  for(mesh_type::recv_overlap_type::capSequence::iterator r_iter = recvRanksBegin; r_iter != recvRanksEnd; ++r_iter) {
+    const int                                                     rank               = *r_iter;
+    const mesh_type::send_overlap_type::source_type               remoteOffsetNormal = newVerticesStartNormalP[rank] - oldVerticesStartNormalP[rank];
+    const mesh_type::send_overlap_type::source_type               remoteOffsetFault  = newVerticesStartFaultP[rank]  - oldVerticesStartFaultP[rank];
+    const mesh_type::recv_overlap_type::supportSequence::iterator pointsBegin        = recvOverlap->supportBegin(rank);
+    const mesh_type::recv_overlap_type::supportSequence::iterator pointsEnd          = recvOverlap->supportEnd(rank);
+
+    for(mesh_type::recv_overlap_type::supportSequence::iterator p_iter = pointsBegin; p_iter != pointsEnd; ++p_iter) {
+      const mesh_type::send_overlap_type::source_type& localPoint  = *p_iter;
+      const mesh_type::send_overlap_type::source_type& remotePoint = p_iter.color();
+
+      if (localPoint >= oldVerticesStartNormal && localPoint < oldVerticesStartFault) {
+        assert(remotePoint >= oldVerticesStartNormalP[rank] && remotePoint < oldVerticesStartFaultP[rank]);
+        newRecvOverlap->addArrow(rank, localPoint+localOffsetNormal, remotePoint+remoteOffsetNormal);
+      } else {
+        assert(localPoint  >= oldVerticesStartFault);
+        assert(remotePoint >= oldVerticesStartFaultP[rank]);
+        newRecvOverlap->addArrow(rank, localPoint+localOffsetFault, remotePoint+remoteOffsetFault);
+      }
+    }
+  }
+#endif
   newMesh->setCalculatedOverlap(true);
   delete [] oldVerticesStartNormalP; oldVerticesStartNormalP = PETSC_NULL;
   delete [] oldVerticesStartFaultP;  oldVerticesStartFaultP  = PETSC_NULL;
@@ -745,6 +796,9 @@
   delete [] newVerticesStartFaultP;  newVerticesStartFaultP  = PETSC_NULL;
 
   refiner.overlapAddNewVertices(newMesh, *_orderNewMesh, mesh, *_orderOldMesh);
+  // We have to do flexible assembly since we add the new vertices separately
+  newSendOverlap->assemble();
+  newRecvOverlap->assemble();
 } // _calcNewOverlap
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineEdges2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineEdges2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineEdges2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   assert(!newCoordsSection.isNull());
   assert(!oldCoordsSection.isNull());
 
-  double coordinatesVertex[3];
+  PylithScalar coordinatesVertex[3];
 
   assert(_edgeToVertex.size() > 0);
   const int spaceDim = newCoordsSection->getFiberDimension(_edgeToVertex.begin()->second);
@@ -187,10 +187,10 @@
     const point_type right = e_iter->first.second;
     
     if (oldSendOverlap->capContains(left) && oldSendOverlap->capContains(right)) {
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanksSeq = oldSendOverlap->support(left);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanksSeq = oldSendOverlap->support(left);
       assert(!leftRanksSeq.isNull());
       std::set<int> leftRanks(leftRanksSeq->begin(), leftRanksSeq->end());
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
       assert(!rightRanksSeq.isNull());
       std::set<int> rightRanks(rightRanksSeq->begin(), rightRanksSeq->end());
       std::set<int> ranks;
@@ -257,16 +257,16 @@
       const int  rank       = *r_iter;
       
       const int localFirstOffset = (orderOldMesh.verticesNormal().hasPoint(e_iter->first.first)) ? localNormalOffset : localCensoredOffset;
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localFirstOffset);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localFirstOffset);
+      for(mesh_type::send_overlap_type::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
         if (rank == *lr_iter) {
           remoteLeft = lr_iter.color();
           break;
         } // if
       } // for
       const int localSecondOffset = (orderOldMesh.verticesNormal().hasPoint(e_iter->first.second)) ? localNormalOffset : localCensoredOffset;
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localSecondOffset);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localSecondOffset);
+      for(mesh_type::send_overlap_type::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
         if (rank == *rr_iter) {
           remoteRight = rr_iter.color();
           break;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineFace4Edges2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineFace4Edges2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineFace4Edges2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   assert(!newCoordsSection.isNull());
   assert(!oldCoordsSection.isNull());
 
-  double coordinatesVertex[3];
+  PylithScalar coordinatesVertex[3];
 
   assert(_edgeToVertex.size() > 0);
   const int spaceDim = newCoordsSection->getFiberDimension(_edgeToVertex.begin()->second);
@@ -255,10 +255,10 @@
     const point_type right = e_iter->first.second;
     
     if (oldSendOverlap->capContains(left) && oldSendOverlap->capContains(right)) {
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanksSeq  = oldSendOverlap->support(left);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanksSeq  = oldSendOverlap->support(left);
       assert(!leftRanksSeq.isNull());
       std::set<int> leftRanks(leftRanksSeq->begin(), leftRanksSeq->end());
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
       assert(!rightRanksSeq.isNull());
       std::set<int> rightRanks(rightRanksSeq->begin(), rightRanksSeq->end());
       std::set<int> ranks;
@@ -311,16 +311,16 @@
       const int  rank         = *r_iter;
       const int  localOffsetL = orderOldMesh.verticesNormal().hasPoint(e_iter->first.first) ? localNormalOffset : localCensoredOffset;
       
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localOffsetL);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localOffsetL);
+      for(mesh_type::send_overlap_type::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
         if (rank == *lr_iter) {
           remoteLeft = lr_iter.color();
           break;
         } // if
       } // for
       const int  localOffsetR = orderOldMesh.verticesNormal().hasPoint(e_iter->first.second) ? localNormalOffset : localCensoredOffset;
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localOffsetR);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localOffsetR);
+      for(mesh_type::send_overlap_type::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
         if (rank == *rr_iter) {
           remoteRight = rr_iter.color();
           break;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineVol8Face4Edges2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineVol8Face4Edges2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/RefineVol8Face4Edges2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   assert(!newCoordsSection.isNull());
   assert(!oldCoordsSection.isNull());
 
-  double coordinatesVertex[3];
+  PylithScalar coordinatesVertex[3];
 
   assert(_edgeToVertex.size() > 0);
   const int spaceDim = newCoordsSection->getFiberDimension(_edgeToVertex.begin()->second);
@@ -323,10 +323,10 @@
     const point_type right = e_iter->first.second;
     
     if (oldSendOverlap->capContains(left) && oldSendOverlap->capContains(right)) {
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanksSeq  = oldSendOverlap->support(left);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanksSeq  = oldSendOverlap->support(left);
       assert(!leftRanksSeq.isNull());
       std::set<int> leftRanks(leftRanksSeq->begin(), leftRanksSeq->end());
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanksSeq = oldSendOverlap->support(right);
       assert(!rightRanksSeq.isNull());
       std::set<int> rightRanks(rightRanksSeq->begin(), rightRanksSeq->end());
       std::set<int> ranks;
@@ -386,7 +386,7 @@
       const point_type first     = f_iter->first.points[0];
       point_type       minVertex = first;
 
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& firstRanksSeq  = oldSendOverlap->support(first);
+      const Obj<mesh_type::send_overlap_type::supportSequence>& firstRanksSeq  = oldSendOverlap->support(first);
       assert(!firstRanksSeq.isNull());
       std::set<int> firstRanks(firstRanksSeq->begin(), firstRanksSeq->end());
       std::set<int> ranks, curRanks;
@@ -395,7 +395,7 @@
       for(int i = 1; i < 4; ++i) {
         const point_type nextVertex = f_iter->first.points[i];
 
-        const Obj<mesh_type::send_overlap_type::traits::supportSequence>& nextRanksSeq = oldSendOverlap->support(nextVertex);
+        const Obj<mesh_type::send_overlap_type::supportSequence>& nextRanksSeq = oldSendOverlap->support(nextVertex);
         assert(!nextRanksSeq.isNull());
         std::set<int> nextRanks(nextRanksSeq->begin(), nextRanksSeq->end());
 
@@ -482,8 +482,8 @@
       const int  localOffsetL = orderOldMesh.verticesNormal().hasPoint(e_iter->first.first) ? localNormalOffset : localCensoredOffset;
 
       // Find the rank which owns the left edge point, and return the remotePoint in the new mesh
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localOffsetL);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanks = newSendOverlap->support(e_iter->first.first+localOffsetL);
+      for(mesh_type::send_overlap_type::supportSequence::iterator lr_iter = leftRanks->begin(); lr_iter != leftRanks->end(); ++lr_iter) {
         if (rank == *lr_iter) {
           remoteLeft = lr_iter.color();
           break;
@@ -493,8 +493,8 @@
       const int  localOffsetR = orderOldMesh.verticesNormal().hasPoint(e_iter->first.second) ? localNormalOffset : localCensoredOffset;
 
       // Find the rank which owns the right edge point, and return the remotePoint in the new mesh
-      const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localOffsetR);
-      for(mesh_type::send_overlap_type::traits::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
+      const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanks = newSendOverlap->support(e_iter->first.second+localOffsetR);
+      for(mesh_type::send_overlap_type::supportSequence::iterator rr_iter = rightRanks->begin(); rr_iter != rightRanks->end(); ++rr_iter) {
         if (rank == *rr_iter) {
           remoteRight = rr_iter.color();
           break;
@@ -521,15 +521,15 @@
         for(int d = 0; d < remoteSize; ++d) {
           std::cout << "["<<oldMesh->commRank()<<"]     remote val " << remoteVals[d] << std::endl;
         }
-        const Obj<mesh_type::send_overlap_type::traits::supportSequence>& leftRanks2 = oldSendOverlap->support(e_iter->first.first);
-        for(mesh_type::send_overlap_type::traits::supportSequence::iterator lr_iter = leftRanks2->begin(); lr_iter != leftRanks2->end(); ++lr_iter) {
+        const Obj<mesh_type::send_overlap_type::supportSequence>& leftRanks2 = oldSendOverlap->support(e_iter->first.first);
+        for(mesh_type::send_overlap_type::supportSequence::iterator lr_iter = leftRanks2->begin(); lr_iter != leftRanks2->end(); ++lr_iter) {
           if (rank == *lr_iter) {
             std::cout << "["<<oldMesh->commRank()<<"]     left match:  old vertex " << lr_iter.color() << std::endl;
             break;
           }
         }
-        const Obj<mesh_type::send_overlap_type::traits::supportSequence>& rightRanks2 = oldSendOverlap->support(e_iter->first.second);
-        for(mesh_type::send_overlap_type::traits::supportSequence::iterator rr_iter = rightRanks2->begin(); rr_iter != rightRanks2->end(); ++rr_iter) {
+        const Obj<mesh_type::send_overlap_type::supportSequence>& rightRanks2 = oldSendOverlap->support(e_iter->first.second);
+        for(mesh_type::send_overlap_type::supportSequence::iterator rr_iter = rightRanks2->begin(); rr_iter != rightRanks2->end(); ++rr_iter) {
           if (rank == *rr_iter) {
             std::cout << "["<<oldMesh->commRank()<<"]     right match: old vertex " << rr_iter.color() << std::endl;
             break;
@@ -554,8 +554,8 @@
 
       for(int i = 0; i < 4; ++i) {
         const int localOffset = orderOldMesh.verticesNormal().hasPoint(f_iter->first.points[i]) ? localNormalOffset : localCensoredOffset;
-        const Obj<mesh_type::send_overlap_type::traits::supportSequence>& faceRanks = newSendOverlap->support(f_iter->first.points[i]+localOffset);
-        for(mesh_type::send_overlap_type::traits::supportSequence::iterator fr_iter = faceRanks->begin(); fr_iter != faceRanks->end(); ++fr_iter) {
+        const Obj<mesh_type::send_overlap_type::supportSequence>& faceRanks = newSendOverlap->support(f_iter->first.points[i]+localOffset);
+        for(mesh_type::send_overlap_type::supportSequence::iterator fr_iter = faceRanks->begin(); fr_iter != faceRanks->end(); ++fr_iter) {
           if (rank == *fr_iter) {
             remoteVertices.points[i] = fr_iter.color();
             break;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/SubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/SubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/SubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -17,7 +17,6 @@
 //
 
 #include <portinfo>
-#include <stdexcept>
 
 #include "SubMesh.hh" // implementation of class methods
 
@@ -25,6 +24,8 @@
 
 #include <Selection.hh> // USES ALE::Selection
 
+#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
+
 #include <stdexcept> // USES std::runtime_error
 #include <sstream> // USES std::ostringstream
 #include <cassert> // USES assert()
@@ -139,6 +140,19 @@
   // Set name
   std::string meshLabel = "subdomain_" + std::string(label);
   _mesh->setName(meshLabel);
+
+  int maxConeSizeLocal = sieve->getMaxConeSize();
+  int maxConeSize = 0;
+  int err = MPI_Allreduce(&maxConeSizeLocal, &maxConeSize, 1, MPI_INT, MPI_MAX,
+			  sieve->comm()); CHECK_PETSC_ERROR(err);
+
+  if (maxConeSize <= 0) {
+    std::ostringstream msg;
+    msg << "Error while creating submesh. Submesh '" 
+	<< label << "' does not contain any cells.\n"
+	<< "Submeshes must be one dimension lower than the domain mesh.";
+    throw std::runtime_error(msg.str());
+  } // if
 } // createSubMesh
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/topologyfwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/topologyfwd.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/topology/topologyfwd.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,6 +28,7 @@
 #define pylith_topology_topologyfwd_hh
 
 #include "pylith/utils/sievetypes.hh"
+#include "pylith/utils/types.hh"
 
 namespace ALE {
   template<typename point_type, 
@@ -57,7 +58,7 @@
 
     class FieldBase;
     template<typename mesh_type, 
-	     typename section_type =ALE::IGeneralSection<pylith::SieveMesh::point_type, double> > class Field;
+	     typename section_type =ALE::IGeneralSection<pylith::SieveMesh::point_type, PylithScalar> > class Field;
     template<typename field_type> class Fields;
     template<typename mesh_type> class FieldsNew;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 #include "TestArray.hh" // implementation of class methods
 
-#include "array.hh" // USES double_array
+#include "array.hh" // USES scalar_array
 
 #include <iostream> // USES std::cerr
 #include <cassert> // USES assert()
@@ -28,10 +28,10 @@
 // ----------------------------------------------------------------------
 // Check to make sure array of values match expected values.
 bool
-pylith::utils::TestArray::check(const double* valuesE,
+pylith::utils::TestArray::check(const PylithScalar* valuesE,
 				const int nvalues,
-				const double_array& values)
-{ // check(double)
+				const scalar_array& values)
+{ // check(PylithScalar)
   assert( (0 == nvalues && 0 == valuesE) ||
 	  (0 < nvalues && 0 != valuesE) );
 
@@ -41,7 +41,7 @@
     return false;
   } // if
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   bool okay = true;
   for (int i=0; i < nvalues; ++i) {
     okay = true;
@@ -59,7 +59,7 @@
   } // for
 
   return true;
-} // check(double)
+} // check(PylithScalar)
 
 
 // End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/TestArray.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 // Include directives ---------------------------------------------------
 #include "utilsfwd.hh" // forward declarations
 
-#include "arrayfwd.hh" // USES double_array
+#include "array.hh" // USES scalar_array
 
 // TestArray ------------------------------------------------------------
 /** @brief C++ object for testing array values.
@@ -53,9 +53,9 @@
    */
   static
   bool
-  check(const double* valuesE,
+  check(const PylithScalar* valuesE,
 	const int nvalues,
-	const double_array& values);
+	const scalar_array& values);
 
 }; // EventLogger
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/array.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/array.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/array.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,6 +28,7 @@
 #if !defined(pylith_utils_array_hh)
 #define pylith_utils_array_hh
 
+#include "types.hh"
 #include "arrayfwd.hh"
 
 #include "sievetypes.hh" // ensure we include petscsys.h BEFORE valarray to prevent clash over isinf() and isnan().
@@ -35,6 +36,10 @@
 #include <vector>
 #include <valarray>
 
+namespace pylith {
+  typedef std::valarray<PylithScalar> scalar_array;
+} // namespace pylith
+
 #endif // pylith_utils_array_hh
 
 // End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/arrayfwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/arrayfwd.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/arrayfwd.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
  *
  * These are generally just forward declarations for C++ STL objects.
  *
- * For simple types (i.e., int and double) std::valarray provides some
+ * For simple types (i.e., int and PylithScalar) std::valarray provides some
  * features that std::vector does not have, such as operating on the
  * whole array at once.
  */
@@ -48,7 +48,7 @@
   /// Alias for std::vector<int>
   typedef std::vector<int, std::allocator<int> > int_vector;
 
-  /// Alias for std::vector<double>
+  /// Alias for std::vector<PylithScalar>
   typedef std::vector<double, std::allocator<double> > double_vector;
 
   /// Alias for std::vector<std::string>

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/constdefs.h
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/constdefs.h	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/constdefs.h	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,9 +25,12 @@
 #if !defined(pylith_utils_constdefs_h)
 #define pylith_utils_constdefs_h
 
+#include "types.hh" // HASA PylithScalar
+
 namespace pylith {
   static const double PYLITH_MAXDOUBLE = 1.0e+30;
   static const float PYLITH_MAXFLOAT = 1.0e+30;
+  static const PylithScalar PYLITH_MAXSCALAR = 1.0e+30;
 }
     
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/petscfwd.h
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/petscfwd.h	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/petscfwd.h	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,6 +25,8 @@
 #if !defined(pylith_utils_petscfwd_h)
 #define pylith_utils_petscfwd_h
 
+/// forward declaration for PETSc PetscErrorCode
+typedef int PetscErrorCode;
 
 /// forward declaration for PETSc Mat
 typedef struct _p_Mat* PetscMat;
@@ -35,9 +37,6 @@
 /// forward declaration for PETSc VecScatter
 typedef struct _p_VecScatter* PetscVecScatter;
 
-/// forward declaration for PETSc ISLocalToGlobalMapping
-typedef struct _p_ISLocalToGlobalMapping* PetscISLocalToGlobalMapping;
-
 /// forward declaration for PETSc KSP
 typedef struct _p_KSP* PetscKSP;
 
@@ -47,9 +46,13 @@
 /// forward declaration for PETSc PC
 typedef struct _p_PC* PetscPC;
 
-/// forward declaration for PETSc PetscErrorCode
-typedef int PetscErrorCode;
+/// forward declaration for PETSc ISLocalToGlobalMapping
+typedef struct _p_ISLocalToGlobalMapping* PetscISLocalToGlobalMapping;
 
+/// forward declaration for PETSc DMMeshInterpolationInfo
+typedef struct _DMMeshInterpolationInfo* PetscDMMeshInterpolationInfo;
+
+
 #endif // pylith_utils_petscfwd_h
 
 // End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievefwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievefwd.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievefwd.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,12 +25,13 @@
 #if !defined(pylith_utils_sievefwd_hh)
 #define pylith_utils_sievefwd_hh
 
+#include "types.hh"
 
 /// Namespace for Sieve package.
 namespace ALE {
  
   /// PETSc mesh
-  template class Mesh<PetscInt,PetscScalar>;
+  template class Mesh<PylithInt,PylithScalar>;
 } // ALE
 
 #endif // pylith_utils_sievefwd_hh

Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievetypes.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievetypes.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/sievetypes.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,18 +25,20 @@
 #if !defined(pylith_utils_sievetypes_hh)
 #define pylith_utils_sievetypes_hh
 
+#include "types.hh"
+
 #include <petscdmmesh.hh> // PETSc Mesh
 
 namespace pylith {
 
   /// Sieve mesh (default, fast access with set sizes).
-  typedef ALE::IMesh<PetscInt,PetscScalar> SieveMesh;
+  typedef ALE::IMesh<PylithInt,PylithScalar> SieveMesh;
 
   /// Sieve mesh (flexible, slower access without set sizes).
-  typedef ALE::Mesh<PetscInt,PetscScalar> SieveFlexMesh;
+  typedef ALE::Mesh<PylithInt,PylithScalar> SieveFlexMesh;
 
   /// Sieve submesh.
-  typedef ALE::IMesh<PetscInt,PetscScalar,ALE::LabelSifter<int, SieveMesh::point_type> > SieveSubMesh;
+  typedef ALE::IMesh<PylithInt,PylithScalar,ALE::LabelSifter<int, SieveMesh::point_type> > SieveSubMesh;
 
 } // pylith
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/types.hh (from rev 19130, short/3D/PyLith/trunk/libsrc/pylith/utils/types.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/types.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/pylith/utils/types.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,36 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/utils/pylithtypes.h
+ *
+ * @brief Type definitions for PyLith.
+ */
+
+#if !defined(pylith_utils_pylithtypes_h)
+#define pylith_utils_pylithtypes_h
+
+#include "petsc.h"
+
+typedef PetscScalar PylithScalar;
+typedef PetscInt PylithInt;
+
+#endif // pylith_utils_pylithtypes_h
+
+
+// End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/AbsorbingDampers.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/AbsorbingDampers.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/AbsorbingDampers.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
        *   direction that is not collinear with surface normal.
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator.
        *
@@ -61,7 +61,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -72,7 +72,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* mat,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -83,7 +83,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/BoundaryCondition.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/BoundaryCondition.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/BoundaryCondition.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
        */
       virtual
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]) = 0;
+		      const PylithScalar upDir[3]) = 0;
 
     }; // class BoundaryCondition
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
        * @param upDir Vertical direction (somtimes used in 3-D problems).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Set number of degrees of freedom that are constrained at
        * points in field.
@@ -74,7 +74,7 @@
        * @param t Current time
        * @param field Solution field
        */
-      void setField(const double t,
+      void setField(const PylithScalar t,
 		    const pylith::topology::Field<pylith::topology::Mesh>& field);
       
       /** Set values in field.
@@ -83,8 +83,8 @@
        * @param t1 Time t+dt.
        * @param field Solution field
        */
-      void setFieldIncr(const double t0,
-			const double t1,
+      void setFieldIncr(const PylithScalar t0,
+			const PylithScalar t1,
 			const pylith::topology::Field<pylith::topology::Mesh>& field);
       
       // PROTECTED METHODS //////////////////////////////////////////////

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBoundary.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBoundary.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBoundary.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
        * @param upDir Vertical direction (somtimes used in 3-D problems).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
 
       /** Get boundary mesh.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,7 +64,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/bc_wrap.cxx $(srcdir)/bc.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Neumann.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Neumann.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/Neumann.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
        *   direction that is not collinear with surface normal.
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
 
       /** Integrate contributions to residual term (r) for operator.
        *
@@ -56,7 +56,7 @@
        * @param fields Solution fields.
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -67,7 +67,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
        * @param upDir Vertical direction (somtimes used in 3-D problems).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator.
        *
@@ -55,7 +55,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/bc.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/bc.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/bc.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,7 +45,7 @@
  } // exception
 
 %include "typemaps.i"
-%include "../include/doublearray.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/BruneSlipFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/BruneSlipFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/BruneSlipFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
        */
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0);
+		      const PylithScalar originTime =0.0);
       
       /** Get slip on fault surface at time t.
        *
@@ -77,7 +77,7 @@
        * @returns Slip vector as left-lateral/reverse/normal.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
       
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -88,8 +88,8 @@
        * @returns Increment in slip vector as left-lateral/reverse/normal.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
 
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/ConstRateSlipFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/ConstRateSlipFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/ConstRateSlipFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
        */
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0);
+		      const PylithScalar originTime =0.0);
       
       /** Get slip on fault surface at time t.
        *
@@ -71,7 +71,7 @@
        * @returns Slip vector as left-lateral/reverse/normal.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
   
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -82,8 +82,8 @@
        * @returns Increment in slip vector as left-lateral/reverse/normal.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/EqKinSrc.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/EqKinSrc.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/EqKinSrc.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,13 +44,13 @@
        *
        * @param value Origin time for earthquake source.
        */
-      void originTime(const double value);
+      void originTime(const PylithScalar value);
       
       /** Get origin time for earthquake source.
        *
        * @returns Origin time for earthquake source.
        */
-      double originTime(void) const;
+      PylithScalar originTime(void) const;
       
       /** Set slip time function.
        *
@@ -72,7 +72,7 @@
        * @param t Time t.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
 
       /** Get increment of slip on fault surface between time t0 and t1.
        *
@@ -81,8 +81,8 @@
        * @param t1 Time for end of slip increment.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Fault.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -97,7 +97,7 @@
        */
       virtual
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]) = 0;
+		      const PylithScalar upDir[3]) = 0;
       
       /** Get mesh associated with fault fields.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,6 +53,12 @@
        */
       void frictionModel(pylith::friction::FrictionModel* const model);
 
+      /** Nondimensional tolerance for detecting near zero values.
+       *
+       * @param value Nondimensional tolerance
+       */
+      void zeroTolerance(const PylithScalar value);
+
       /** Initialize fault. Determine orientation and setup boundary
        * condition parameters.
        *
@@ -62,7 +68,7 @@
        *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator that
        * do not require assembly across processors.
@@ -76,7 +82,7 @@
        */
       virtual
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-				      const double t,
+				      const PylithScalar t,
 				      pylith::topology::SolutionFields* const fields);
 
       /** Update state variables as needed.
@@ -85,7 +91,7 @@
        * @param fields Solution fields
        * @param mesh Finite-element mesh
        */
-      void updateStateVars(const double t,
+      void updateStateVars(const PylithScalar t,
 			   pylith::topology::SolutionFields* const fields);
       
       /** Constrain solution space based on friction.
@@ -95,7 +101,7 @@
        * @param jacobian Sparse matrix for system Jacobian.
        */
       void constrainSolnSpace(pylith::topology::SolutionFields* const fields,
-			      const double t,
+			      const PylithScalar t,
 			      const pylith::topology::Jacobian& jacobian);
 
       /** Adjust solution from solver with lumped Jacobian to match Lagrange

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
        *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Integrate contributions to residual term (r) for operator that
        * do not require assembly across cells, vertices, or processors.
@@ -77,7 +77,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Get vertex field associated with integrator.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,7 +51,7 @@
        */
       virtual
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
       
       /** Split solution field for separate preconditioning.
        *
@@ -68,7 +68,7 @@
        */
       virtual
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -80,7 +80,7 @@
        * @param mesh Finite-element mesh
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -91,7 +91,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Adjust solution from solver with lumped Jacobian to match Lagrange

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveTract.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
        *   be up-dip direction; applies to fault surfaces in 2-D and 3-D).
        */
       void initialize(const pylith::topology::Mesh& mesh,
-		      const double upDir[3]);
+		      const PylithScalar upDir[3]);
 
       /** Integrate contribution of cohesive cells to residual term.
        *
@@ -65,7 +65,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -76,7 +76,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
   
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/LiuCosSlipFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/LiuCosSlipFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/LiuCosSlipFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -69,7 +69,7 @@
        */
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0);
+		      const PylithScalar originTime =0.0);
       
       /** Get slip on fault surface at time t.
        *
@@ -79,7 +79,7 @@
        * @returns Slip vector as left-lateral/reverse/normal.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
   
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -90,8 +90,8 @@
        * @returns Increment in slip vector as left-lateral/reverse/normal.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/faults_wrap.cxx $(srcdir)/faults.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/SlipTimeFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/SlipTimeFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/SlipTimeFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,7 +51,7 @@
       virtual
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0) = 0;
+		      const PylithScalar originTime =0.0) = 0;
 
       /** Get slip on fault surface at time t.
        *
@@ -62,7 +62,7 @@
        */
       virtual
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t) = 0;
+		const PylithScalar t) = 0;
   
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -74,8 +74,8 @@
        */
       virtual
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1) = 0;
+		    const PylithScalar t0,
+		    const PylithScalar t1) = 0;
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/StepSlipFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/StepSlipFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/StepSlipFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
        */
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0);
+		      const PylithScalar originTime =0.0);
       
       /** Get slip on fault surface at time t.
        *
@@ -71,7 +71,7 @@
        * @returns Slip vector as left-lateral/reverse/normal.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
       
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -82,8 +82,8 @@
        * @returns Increment in slip vector as left-lateral/reverse/normal.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/TimeHistorySlipFn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/TimeHistorySlipFn.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/TimeHistorySlipFn.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
        */
       void initialize(const pylith::topology::SubMesh& faultMesh,
 		      const spatialdata::units::Nondimensional& normalizer,
-		      const double originTime =0.0);
+		      const PylithScalar originTime =0.0);
       
       /** Get slip on fault surface at time t.
        *
@@ -77,7 +77,7 @@
        * @returns Slip vector as left-lateral/reverse/normal.
        */
       void slip(pylith::topology::Field<pylith::topology::SubMesh>* const slipField,
-		const double t);
+		const PylithScalar t);
   
       /** Get slip increment on fault surface between time t0 and t1.
        *
@@ -88,8 +88,8 @@
        * @returns Increment in slip vector as left-lateral/reverse/normal.
        */
       void slipIncr(pylith::topology::Field<pylith::topology::SubMesh>* slipField,
-		    const double t0,
-		    const double t1);
+		    const PylithScalar t0,
+		    const PylithScalar t1);
       
       /** Get final slip.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/faults.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/faults.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/faults.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
  } // exception
 
 %include "typemaps.i"
-%include "../include/doublearray.i"
+%include "../include/scalartypemaps.i"
 %include "../include/chararray.i"
 %include "../include/eqkinsrcarray.i"
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/CellGeometry.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/CellGeometry.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/CellGeometry.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -87,7 +87,7 @@
        *
        * @returns Array of coordinates of vertices in reference cell
        */
-      const pylith::double_array& vertices(void) const;
+      const pylith::scalar_array& vertices(void) const;
       
       /** Get cell geometry for lower dimension cell.
        *
@@ -106,9 +106,9 @@
        * @param npts Number of points to transform.
        */
       virtual
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts) const = 0;
       
@@ -120,10 +120,10 @@
        * @param location Location in reference cell at which to compute Jacobian.
        */
       virtual
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const = 0;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const = 0;
       
       /** Compute Jacobian at location in cell.
        *
@@ -135,10 +135,10 @@
        * @param npts Number of points to transform.
        */
       virtual
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts) const = 0;
       
@@ -156,10 +156,10 @@
        * @param upDir Direction perpendicular to horizontal direction that is 
        *   not collinear with cell normal (usually "up" direction).
        */
-      void orientation(pylith::double_array* orientation,
-		       const pylith::double_array& jacobian,
-		       const double jacobianDet,
-		       const pylith::double_array& upDir) const;
+      void orientation(pylith::scalar_array* orientation,
+		       const pylith::scalar_array& jacobian,
+		       const PylithScalar jacobianDet,
+		       const pylith::scalar_array& upDir) const;
 
     }; // CellGeometry
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -83,7 +83,7 @@
        * @param field Solution field
        */
       virtual
-      void setField(const double t,
+      void setField(const PylithScalar t,
 		    const pylith::topology::Field<pylith::topology::Mesh>& field) = 0;
       
       /** Set increment in values from t0 to t1 in field.
@@ -93,8 +93,8 @@
        * @param field Solution field
        */
       virtual
-      void setFieldIncr(const double t0,
-			const double t1,
+      void setFieldIncr(const PylithScalar t0,
+			const PylithScalar t1,
 			const pylith::topology::Field<pylith::topology::Mesh>& field) = 0;
 
     }; // class Constraint

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicit.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicit.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicit.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,13 +43,13 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set normalized viscosity for numerical damping.
        *
        * @param viscosity Nondimensional viscosity.
        */
-      void normViscosity(const double viscosity);
+      void normViscosity(const PylithScalar viscosity);
 
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -65,7 +65,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to residual term (r) for operator.
@@ -75,7 +75,7 @@
        * @param fields Solution fields
        */
       void integrateResidualLumped(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-				   const double t,
+				   const PylithScalar t,
 				   pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -86,7 +86,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated
@@ -98,7 +98,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
     }; // ElasticityExplicit

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitLgDeform.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitLgDeform.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitLgDeform.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,13 +43,13 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
 
       /** Set normalized viscosity for numerical damping.
        *
        * @param viscosity Nondimensional viscosity.
        */
-      void normViscosity(const double viscosity);
+      void normViscosity(const PylithScalar viscosity);
 
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -65,7 +65,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to residual term (r) for operator.
@@ -75,7 +75,7 @@
        * @param fields Solution fields
        */
       void integrateResidualLumped(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-				   const double t,
+				   const PylithScalar t,
 				   pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -86,7 +86,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated
@@ -98,7 +98,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
     }; // ElasticityExplicitLgDeform

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTet4.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTet4.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTet4.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,13 +43,13 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set normalized viscosity for numerical damping.
        *
        * @param viscosity Nondimensional viscosity.
        */
-      void normViscosity(const double viscosity);
+      void normViscosity(const PylithScalar viscosity);
 
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -65,7 +65,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to residual term (r) for operator.
@@ -75,7 +75,7 @@
        * @param fields Solution fields
        */
       void integrateResidualLumped(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-				   const double t,
+				   const PylithScalar t,
 				   pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -86,7 +86,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated
@@ -98,7 +98,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
     }; // ElasticityExplicitTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,13 +43,13 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set normalized viscosity for numerical damping.
        *
        * @param viscosity Nondimensional viscosity.
        */
-      void normViscosity(const double viscosity);
+      void normViscosity(const PylithScalar viscosity);
 
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -65,7 +65,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to residual term (r) for operator.
@@ -75,7 +75,7 @@
        * @param fields Solution fields
        */
       void integrateResidualLumped(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-				   const double t,
+				   const PylithScalar t,
 				   pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -86,7 +86,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated
@@ -98,7 +98,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
     }; // ElasticityExplicitTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicit.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicit.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicit.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Get stable time step for advancing from time t to time t+dt.
        *
@@ -52,7 +52,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStep(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStep(const pylith::topology::Mesh& mesh);
       
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -76,7 +76,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -87,7 +87,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
   
     }; // ElasticityImplicit

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitCUDA.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitCUDA.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitCUDA.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Get stable time step for advancing from time t to time t+dt.
        *
@@ -52,7 +52,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStep(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStep(const pylith::topology::Mesh& mesh);
       
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -76,7 +76,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -87,7 +87,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
   
     }; // ElasticityImplicitCUDA

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitLgDeform.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitLgDeform.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityImplicitLgDeform.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
        *
        * @param dt Time step
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
 
       /** Get stable time step for advancing from time t to time t+dt.
        *
@@ -52,7 +52,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStep(const pylith::topology::Mesh& mesh) const;
+      PylithScalar stableTimeStep(const pylith::topology::Mesh& mesh) const;
 
       /** Set flag for setting constraints for total field solution or
        *  incremental field solution.
@@ -76,7 +76,7 @@
        * @param fields Solution fields
        */
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -87,7 +87,7 @@
        * @param fields Solution fields
        */
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
     }; // ElasticityImplicitLgDeform

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryHex3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryHex3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryHex3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine1D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine1D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine2D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine2D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine2D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryLine3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint1D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint1D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint2D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint2D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint2D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryPoint3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad2D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad2D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad2D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryQuad3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTet3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTet3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTet3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri2D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri2D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri2D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/GeometryTri3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,9 +57,9 @@
        * @param dim Dimension of global coordinate system.
        * @param npts Number of points to transform.
        */
-      void ptsRefToGlobal(double* ptsGlobal,
-			  const double* ptsRef,
-			  const double* vertices,
+      void ptsRefToGlobal(PylithScalar* ptsGlobal,
+			  const PylithScalar* ptsRef,
+			  const PylithScalar* vertices,
 			  const int dim,
 			  const int npts =1) const;
       
@@ -70,10 +70,10 @@
        * @param vertices Coordinates of vertices of cell.
        * @param location Location in reference cell at which to compute Jacobian.
        */
-      void jacobian(pylith::double_array* jacobian,
-		    double* det,
-		    const pylith::double_array& vertices,
-		    const pylith::double_array& location) const;
+      void jacobian(pylith::scalar_array* jacobian,
+		    PylithScalar* det,
+		    const pylith::scalar_array& vertices,
+		    const pylith::scalar_array& location) const;
       
       /** Compute Jacobian at location in cell.
        *
@@ -84,10 +84,10 @@
        * @param dim Dimension of coordinate system.
        * @param npts Number of points to transform.
        */
-      void jacobian(double* jacobian,
-		    double* det,
-		    const double* vertices,
-		    const double* ptsRef,
+      void jacobian(PylithScalar* jacobian,
+		    PylithScalar* det,
+		    const PylithScalar* vertices,
+		    const PylithScalar* ptsRef,
 		    const int dim,
 		    const int npts =1) const;
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
        * @param dt Time step
        */
       virtual
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Get stable time step for advancing from time t to time t+dt.
        *
@@ -83,7 +83,7 @@
        * @returns Time step
        */
       virtual
-      double stableTimeStep(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStep(const pylith::topology::Mesh& mesh);
       
       /** Check whether Jacobian needs to be recomputed.
        *
@@ -129,7 +129,7 @@
        */
       virtual 
       void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -141,7 +141,7 @@
        */
       virtual
       void integrateJacobian(pylith::topology::Jacobian* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
 
       /** Integrate contributions to Jacobian matrix (A) associated with
@@ -153,7 +153,7 @@
        */
       virtual
       void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
-			     const double t,
+			     const PylithScalar t,
 			     pylith::topology::SolutionFields* const fields);
       
       /** Update state variables as needed.
@@ -163,7 +163,7 @@
        * @param mesh Finite-element mesh
        */
       virtual
-      void updateStateVars(const double t,
+      void updateStateVars(const PylithScalar t,
 			   pylith::topology::SolutionFields* const fields);
 
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticity.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticity.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticity.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,7 +75,7 @@
        * @param fields Solution fields
        * @param mesh Finite-element mesh
        */
-      void updateStateVars(const double t,
+      void updateStateVars(const PylithScalar t,
 			   pylith::topology::SolutionFields* const fields);
       
       /** Verify configuration is acceptable.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticityLgDeform.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticityLgDeform.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/IntegratorElasticityLgDeform.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
        * @param fields Solution fields
        * @param mesh Finite-element mesh
        */
-      void updateStateVars(const double t,
+      void updateStateVars(const PylithScalar t,
 			   pylith::topology::SolutionFields* const fields);
       
     }; // IntegratorElasticityLgDeform

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,7 +76,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/feassemble_wrap.cxx $(srcdir)/feassemble.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/QuadratureRefCell.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/QuadratureRefCell.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/QuadratureRefCell.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,45 +76,45 @@
        * @param numQuadPts Number of quadrature points
        * @param spaceDim Number of dimensions in coordinates of cell vertices
        */
-      %apply(double* IN_ARRAY2, int DIM1, int DIM2) {
-	(const double* basis,
+      %apply(PylithScalar* IN_ARRAY2, int DIM1, int DIM2) {
+	(const PylithScalar* basis,
 	 const int numQuadPts1,
 	 const int numBasis1)
 	  };
-      %apply(double* IN_ARRAY3, int DIM1, int DIM2, int DIM3) {
-	(const double* basisDerivRef,
+      %apply(PylithScalar* IN_ARRAY3, int DIM1, int DIM2, int DIM3) {
+	(const PylithScalar* basisDerivRef,
 	 const int numQuadPts2,
 	 const int numBasis2,
 	 const int cellDim2)
 	  };
-      %apply(double* IN_ARRAY2, int DIM1, int DIM2) {
-	(const double* quadPtsRef,
+      %apply(PylithScalar* IN_ARRAY2, int DIM1, int DIM2) {
+	(const PylithScalar* quadPtsRef,
 	 const int numQuadPts3,
 	 const int cellDim3)
 	  };
-      %apply(double* IN_ARRAY1, int DIM1) {
-	(const double* quadWts,
+      %apply(PylithScalar* IN_ARRAY1, int DIM1) {
+	(const PylithScalar* quadWts,
 	 const int numQuadPts4)
 	  };
-      void initialize(const double* basis,
+      void initialize(const PylithScalar* basis,
 		      const int numQuadPts1,
 		      const int numBasis1,
-		      const double* basisDerivRef,
+		      const PylithScalar* basisDerivRef,
 		      const int numQuadPts2,
 		      const int numBasis2,
 		      const int cellDim2,
-		      const double* quadPtsRef,
+		      const PylithScalar* quadPtsRef,
 		      const int numQuadPts3,
 		      const int cellDim3,
-		      const double* quadWts,
+		      const PylithScalar* quadWts,
 		      const int numQuadPts4,
 		      const int spaceDim);
-      %clear(const double* basis, const int numQuadPts, const int numBasis);
-      %clear(const double* basisDerivRef, const int numQuadPts,
+      %clear(const PylithScalar* basis, const int numQuadPts, const int numBasis);
+      %clear(const PylithScalar* basisDerivRef, const int numQuadPts,
 	     const int numBasis, const int spaceDim);
-      %clear(const double* quadPtsRef, const int numQuadPts,
+      %clear(const PylithScalar* quadPtsRef, const int numQuadPts,
 	     const int cellDim);
-      %clear(const double* quadWts, const int numQuadPts);
+      %clear(const PylithScalar* quadWts, const int numQuadPts);
       
       /** Set geometry associated with reference cell.
        *
@@ -132,38 +132,38 @@
        *
        * @param tolerance Minimum allowable value for Jacobian
        */
-      void minJacobian(const double min);
+      void minJacobian(const PylithScalar min);
       
       /** Get minimum allowable determinant of Jacobian.
        *
        * @returns Minimum allowable value for Jacobian
        */
-      double minJacobian(void) const;
+      PylithScalar minJacobian(void) const;
       
       /** Get coordinates of quadrature points in reference cell.
        *
        * @returns Array of coordinates of quadrature points in reference cell.
        */
-      const pylith::double_array& quadPtsRef(void) const;
+      const pylith::scalar_array& quadPtsRef(void) const;
       
       /** Get weights of quadrature points.
        *
        * @returns Weights of quadrature points
        */
-      const pylith::double_array& quadWts(void) const;
+      const pylith::scalar_array& quadWts(void) const;
       
       /** Get basis fns evaluated at quadrature points.
        *
        * @returns Array of basis fns evaluated at quadrature points
        */
-      const pylith::double_array& basis(void) const;
+      const pylith::scalar_array& basis(void) const;
       
       /** Get derivates of basis fns evaluated at quadrature points.
        *
        * @returns Array of derivates of basis fns evaluated at
        * quadrature points
        */
-      const pylith::double_array& basisDerivRef(void) const;
+      const pylith::scalar_array& basisDerivRef(void) const;
       
       /** Get number of dimensions in reference cell.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,7 +63,7 @@
  } // exception
 
 %include "typemaps.i"
-%include "../include/doublearray.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/FrictionModel.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,13 +61,13 @@
        * @param dt Current time step.
        */
       virtual
-      void timeStep(const double dt);
+      void timeStep(const float dt);
 
       /** Get current time step.
        *
        * @returns Current time step.
        */
-      double timeStep(void) const;
+      PylithScalar timeStep(void) const;
 
       /** Set database for physical property parameters.
        *
@@ -95,12 +95,10 @@
        *
        * @param mesh Finite-element mesh of subdomain.
        * @param quadrature Quadrature for finite-element integration
-       * @param area Area at vertices of subdomain.
        */
       virtual
       void initialize(const pylith::topology::SubMesh& mesh,
-		      pylith::feassemble::Quadrature<pylith::topology::SubMesh>* quadrature,
-		      const pylith::topology::Field<pylith::topology::SubMesh>& area);
+		      pylith::feassemble::Quadrature<pylith::topology::SubMesh>* quadrature);
   
       /** Check whether friction model has a field as a property or
        * state variable.
@@ -144,9 +142,9 @@
        *
        * @returns Friction (magnitude of shear traction) at vertex.
        */
-      double calcFriction(const double slip,
-			  const double slipRate,
-			  const double normalTraction);
+      PylithScalar calcFriction(const PylithScalar slip,
+			  const PylithScalar slipRate,
+			  const PylithScalar normalTraction);
   
 
       /** Compute friction at vertex.
@@ -159,9 +157,9 @@
        * @param normalTraction Normal traction at location.
        * @param vertex Finite-element vertex on friction interface.
        */
-      void updateStateVars(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
+      void updateStateVars(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
 			   const int vertex);
   
       // PROTECTED METHODS //////////////////////////////////////////////
@@ -175,8 +173,8 @@
        * @param dbValues Array of database values.
        */
       virtual
-      void _dbToProperties(double* const propValues,
-			   const double_array& dbValues) const = 0;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const = 0;
 
       /** Nondimensionalize properties.
        *
@@ -184,7 +182,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const = 0;
 
       /** Dimensionalize properties.
@@ -193,7 +191,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const = 0;
 
       /** Compute initial state variables from values in spatial database.
@@ -202,8 +200,8 @@
        * @param dbValues Array of database values.
        */
       virtual
-      void _dbToStateVars(double* const stateValues,
-			  const double_array& dbValues) const;
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const scalar_array& dbValues) const;
 
       /** Nondimensionalize state variables.
        *
@@ -211,7 +209,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _nondimStateVars(double* const values,
+      void _nondimStateVars(PylithScalar* const values,
 			    const int nvalues) const;
   
       /** Dimensionalize state variables.
@@ -220,7 +218,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _dimStateVars(double* const values,
+      void _dimStateVars(PylithScalar* const values,
 			 const int nvalues) const;
 
       /** Compute friction from properties and state variables.
@@ -234,12 +232,12 @@
        * @param numStateVars Number of state variables.
        */
       virtual
-      double _calcFriction(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
-			   const double* properties,
+      PylithScalar _calcFriction(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
+			   const PylithScalar* properties,
 			   const int numProperties,
-			   const double* stateVars,
+			   const PylithScalar* stateVars,
 			   const int numStateVars) = 0;
 
       /** Update state variables (for next time step).
@@ -250,11 +248,11 @@
        * @param numProperties Number of properties.
        */
       virtual
-      void _updateStateVars(const double slip,
-			    const double slipRate,
-			    double* const stateVars,
+      void _updateStateVars(const PylithScalar slip,
+			    const PylithScalar slipRate,
+			    PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties);
 
     }; // class FrictionModel

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/friction_wrap.cxx $(srcdir)/friction.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/RateStateAgeing.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,6 +36,13 @@
       /// Destructor.
       ~RateStateAgeing(void);
 
+      /** Set floor for slip rate used in computing friction. Used to
+       *  avoid zero friction at zero slip rate.
+       *
+       * @param value Floor for slip rate.
+       */
+      void minSlipRate(const PylithScalar value);
+
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
 
@@ -44,15 +51,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const double_array& dbValues) const;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -60,7 +67,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute friction from properties and state variables.
@@ -73,12 +80,12 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      double _calcFriction(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
-			   const double* properties,
+      PylithScalar _calcFriction(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
+			   const PylithScalar* properties,
 			   const int numProperties,
-			   const double* stateVars,
+			   const PylithScalar* stateVars,
 			   const int numStateVars);
 
     }; // class RateStateAgeing

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/SlipWeakening.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,15 +44,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const double_array& dbValues) const;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -60,7 +60,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute friction from properties and state variables.
@@ -73,12 +73,12 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      double _calcFriction(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
-			   const double* properties,
+      PylithScalar _calcFriction(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
+			   const PylithScalar* properties,
 			   const int numProperties,
-			   const double* stateVars,
+			   const PylithScalar* stateVars,
 			   const int numStateVars);
 
     }; // class SlipWeakening

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/StaticFriction.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,15 +44,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const double_array& dbValues) const;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -60,7 +60,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute friction from properties and state variables.
@@ -73,12 +73,12 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      double _calcFriction(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
-			   const double* properties,
+      PylithScalar _calcFriction(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
+			   const PylithScalar* properties,
 			   const int numProperties,
-			   const double* stateVars,
+			   const PylithScalar* stateVars,
 			   const int numStateVars);
 
     }; // class StaticFriction

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/TimeWeakening.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,15 +44,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const double_array& dbValues) const;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const scalar_array& dbValues) const;
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -60,7 +60,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute friction from properties and state variables.
@@ -73,12 +73,12 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      double _calcFriction(const double slip,
-			   const double slipRate,
-			   const double normalTraction,
-			   const double* properties,
+      PylithScalar _calcFriction(const PylithScalar slip,
+			   const PylithScalar slipRate,
+			   const PylithScalar normalTraction,
+			   const PylithScalar* properties,
 			   const int numProperties,
-			   const double* stateVars,
+			   const PylithScalar* stateVars,
 			   const int numStateVars);
 
     }; // class TimeWeakening

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/friction/friction.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,7 +32,8 @@
 #include "pylith/friction/RateStateAgeing.hh"
 #include "pylith/friction/TimeWeakening.hh"
 
-#include "pylith/utils/arrayfwd.hh"
+#include "pylith/utils/types.hh"
+#include "pylith/utils/array.hh"
 #include "pylith/utils/sievetypes.hh"
 %}
 
@@ -48,7 +49,7 @@
  } // exception
 
 %include "typemaps.i"
-%include "../include/doublearray.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 dist_subpkgdata_DATA = \
 	numpy.i \
 	chararray.i \
-	doublearray.i \
+	scalartypemaps.i \
 	eqkinsrcarray.i \
 	integratorarray.i \
 	submeshfield.i

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/doublearray.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/doublearray.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/doublearray.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -1,55 +0,0 @@
-// -*- C++ -*-
-//
-// ======================================================================
-//
-// Brad T. Aagaard, U.S. Geological Survey
-// Charles A. Williams, GNS Science
-// Matthew G. Knepley, University of Chicago
-//
-// This code was developed as part of the Computational Infrastructure
-// for Geodynamics (http://geodynamics.org).
-//
-// Copyright (c) 2010-2011 University of California, Davis
-//
-// See COPYING for license information.
-//
-// ======================================================================
-//
-
-%{
-static
-int
-convert_doublearray(PyObject* input,
-		    double* const values,
-		    const int size) {
-  if (!PySequence_Check(input)) {
-    PyErr_SetString(PyExc_TypeError, "Expecting a sequence of floats.");
-    return 0;
-  } // if
-  if (PyObject_Length(input) != size) {
-    PyErr_SetString(PyExc_ValueError, "Sequence size mismatch.");
-    return 0;
-  } // if
-  for (int i=0; i < size; i++) {
-    PyObject *o = PySequence_GetItem(input,i);
-    if (!PyFloat_Check(o)) {
-      Py_XDECREF(o);
-      PyErr_SetString(PyExc_ValueError,"Expecting a sequence of floats.");
-      return 0;
-    } // if
-    values[i] = PyFloat_AsDouble(o);
-    Py_DECREF(o);
-  } // for
-  return 1;
-} // convert_doublearray
-%}
-
-// Map a Python sequence of floats into a C double array.
-%typemap(in) double [ANY] (double values[$1_dim0]) {
-  if (!convert_doublearray($input, values, $1_dim0))
-    return NULL;
-  $1 = &values[0];
- } // typemap
-
-
-// End of file

Copied: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/scalartypemaps.i (from rev 19130, short/3D/PyLith/trunk/modulesrc/include/scalartypemaps.i)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/scalartypemaps.i	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/include/scalartypemaps.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,169 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+// Map a Python float scalar to PylistScalar.
+%typemap(in) PylithScalar {
+  $1 = PyFloat_AsDouble($input);
+ } // typemap
+
+// Map a PylithScalar to a Python float
+%typemap(out) PylithScalar {
+  $result = PyFloat_FromDouble($1);
+ } // typemap
+
+
+%typemap(typecheck,precedence=SWIG_TYPECHECK_FLOAT) PylithScalar {
+   $1 = PyFloat_Check($input) ? 1 : 0;
+}
+
+
+
+%{
+static
+int
+convert_scalararray(PyObject* input,
+		    PylithScalar* const values,
+		    const int size) {
+  if (!PySequence_Check(input)) {
+    PyErr_SetString(PyExc_TypeError, "Expecting a sequence of floats.");
+    return 0;
+  } // if
+  if (PyObject_Length(input) != size) {
+    PyErr_SetString(PyExc_ValueError, "Sequence size mismatch.");
+    return 0;
+  } // if
+  for (int i=0; i < size; i++) {
+    PyObject *o = PySequence_GetItem(input,i);
+    if (!PyFloat_Check(o)) {
+      Py_XDECREF(o);
+      PyErr_SetString(PyExc_ValueError,"Expecting a sequence of floats.");
+      return 0;
+    } // if
+    values[i] = PyFloat_AsDouble(o);
+    Py_DECREF(o);
+  } // for
+  return 1;
+} // convert_scalararray
+%}
+
+// Map a Python sequence of floats into a C PylithScalar array.
+%typemap(in) PylithScalar [ANY] (PylithScalar values[$1_dim0]) {
+  if (!convert_scalararray($input, values, $1_dim0))
+    return NULL;
+  $1 = &values[0];
+ } // typemap
+
+
+// Typemap suite for (PylithScalar* IN_ARRAY1, int DIM1)
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY)
+  (PylithScalar* IN_ARRAY1, int DIM1)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in)
+  (PylithScalar* IN_ARRAY1, int DIM1)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  if (sizeof(float) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_FLOAT, &is_new_object);
+  } else if (sizeof(double) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_DOUBLE, &is_new_object);
+  } else {
+    PyErr_Format(PyExc_TypeError, 
+		 "Unknown size for PyLithscalar.  '%ld' given.", 
+		 sizeof(PylithScalar));
+  } // if/else
+  npy_intp size[1] = { -1 };
+  if (!array || !require_dimensions(array, 1) || !require_size(array, size, 1)) SWIG_fail;
+  $1 = (PylithScalar*) array_data(array);
+  $2 = (int) array_size(array,0);
+  
+}
+%typemap(freearg)
+(PylithScalar* IN_ARRAY1, int DIM1)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+
+/* Typemap suite for (DATA_TYPE* IN_ARRAY2, int DIM1, int DIM2)
+ */
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY)
+  (PylithScalar* IN_ARRAY2, int DIM1, int DIM2)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in)
+  (PylithScalar* IN_ARRAY2, int DIM1, int DIM2)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  if (sizeof(float) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_FLOAT, &is_new_object);
+  } else if (sizeof(double) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_DOUBLE, &is_new_object);
+  } else {
+  } // if/else
+  npy_intp size[2] = { -1, -1 };
+  if (!array || !require_dimensions(array, 2) || !require_size(array, size, 2)) SWIG_fail;
+  $1 = (PylithScalar*) array_data(array);
+  $2 = (int) array_size(array,0);
+  $3 = (int) array_size(array,1);
+}
+%typemap(freearg)
+  (PylithScalar* IN_ARRAY2, int DIM1, int DIM2)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+
+// Typemap suite for (PylithScalar* IN_ARRAY3, int DIM1, int DIM2, int DIM3)
+%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY)
+  (PylithScalar* IN_ARRAY3, int DIM1, int DIM2, int DIM3)
+{
+  $1 = is_array($input) || PySequence_Check($input);
+}
+%typemap(in)
+  (PylithScalar* IN_ARRAY3, int DIM1, int DIM2, int DIM3)
+  (PyArrayObject* array=NULL, int is_new_object=0)
+{
+  if (sizeof(float) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_FLOAT, &is_new_object);
+  } else if (sizeof(double) == sizeof(PylithScalar)) {
+    array = obj_to_array_contiguous_allow_conversion($input, NPY_DOUBLE, &is_new_object);
+  } else {
+    
+  } // if/else
+  npy_intp size[3] = { -1, -1, -1 };
+  if (!array || !require_dimensions(array, 3) || !require_size(array, size, 3)) SWIG_fail;
+  $1 = (PylithScalar*) array_data(array);
+  $2 = (int) array_size(array,0);
+  $3 = (int) array_size(array,1);
+  $4 = (int) array_size(array,2);
+}
+%typemap(freearg)
+  (PylithScalar* IN_ARRAY3, int DIM1, int DIM2, int DIM3)
+{
+  if (is_new_object$argnum && array$argnum)
+    { Py_DECREF(array$argnum); }
+}
+
+
+
+// End of file

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,15 +83,15 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize state variables..
        *
        * @param values Array of state variables.
        * @param nvalues Number of values.
        */
-      void _nondimStateVars(double* const values,
+      void _nondimStateVars(PylithScalar* const values,
 			    const int nvalues) const;
       
       /** Dimensionalize state variables.
@@ -99,7 +99,7 @@
        * @param values Array of state variables.
        * @param nvalues Number of values.
        */
-      void _dimStateVars(double* const values,
+      void _dimStateVars(PylithScalar* const values,
 			 const int nvalues) const;
       
       /** Compute density from properties.
@@ -110,10 +110,10 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -136,17 +136,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -165,17 +165,17 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -187,9 +187,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
       
       /** Update state variables (for next time step).
@@ -205,15 +205,15 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
 
     }; // class DruckerPrager3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
@@ -57,15 +57,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -73,7 +73,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute density from properties.
@@ -82,10 +82,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
 
       /** Compute stress tensor from properties and state variables. If
@@ -109,17 +109,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
 
@@ -138,17 +138,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
 
       /** Get stable time step for implicit time integration.
@@ -160,9 +160,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class ElasticIsotropic3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticMaterial.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticMaterial.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticMaterial.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -79,7 +79,7 @@
        * @returns Time step
        */
       virtual
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -104,10 +104,10 @@
        * @param numProperties Number of properties.
        */
       virtual
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars) = 0;
       
       /** Compute stress tensor from properties and state variables. If
@@ -132,17 +132,17 @@
        * state variables.
        */
       virtual
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars) = 0;
       
@@ -162,17 +162,17 @@
        * @param initialStrainSize Size of initial strain array.
        */
       virtual
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize) = 0;
       
       /** Get stable time step for implicit time integration.
@@ -185,9 +185,9 @@
        * @returns Time step
        */
       virtual
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const = 0;
       
     }; // class ElasticMaterial

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
@@ -57,15 +57,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -73,7 +73,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute density from properties.
@@ -82,10 +82,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
 
       /** Compute stress tensor from properties and state variables. If
@@ -109,17 +109,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
 
@@ -138,17 +138,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
 
       /** Get stable time step for implicit time integration.
@@ -160,9 +160,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class ElasticPlaneStrain

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
@@ -57,15 +57,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
 
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
 
       /** Dimensionalize properties.
@@ -73,7 +73,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
 
       /** Compute density from properties.
@@ -82,10 +82,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
 
       /** Compute stress tensor from properties and state variables. If
@@ -109,17 +109,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
 
@@ -138,17 +138,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
 
       /** Get stable time step for implicit time integration.
@@ -160,9 +160,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class ElasticPlaneStress

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
@@ -57,15 +57,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -73,7 +73,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute density from properties.
@@ -82,10 +82,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -109,17 +109,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -138,17 +138,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -160,9 +160,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class ElasticStrain1D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
        * @param mesh Finite-element mesh.
        * @returns Time step
        */
-      double stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
+      PylithScalar stableTimeStepImplicit(const pylith::topology::Mesh& mesh);
 
       // PROTECTED METHODS //////////////////////////////////////////////
     protected :
@@ -57,15 +57,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -73,7 +73,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute density from properties.
@@ -82,10 +82,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -109,17 +109,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -138,17 +138,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -160,9 +160,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class ElasticStress1D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,8 +83,8 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       /** Compute density from properties.
        *
@@ -94,10 +94,10 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -120,17 +120,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -149,17 +149,17 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Update state variables (for next time step).
@@ -175,15 +175,15 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -195,9 +195,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class GenMaxwellIsotropic3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellPlaneStrain.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellPlaneStrain.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellPlaneStrain.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,8 +83,8 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       /** Compute density from properties.
        *
@@ -94,10 +94,10 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -120,17 +120,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -149,17 +149,17 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Update state variables (for next time step).
@@ -175,15 +175,15 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -195,9 +195,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class GenMaxwellPlaneStrain

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellQpQsIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellQpQsIsotropic3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellQpQsIsotropic3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,8 +83,8 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       /** Compute density from properties.
        *
@@ -94,10 +94,10 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -120,17 +120,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -149,17 +149,17 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Update state variables (for next time step).
@@ -175,15 +175,15 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -195,9 +195,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class GenMaxwellQpQsIsotropic3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -70,7 +70,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/materials_wrap.cxx $(srcdir)/materials.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -83,13 +83,13 @@
        * @param dt Current time step.
        */
       virtual
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Get current time step.
        *
        * @returns Current time step.
        */
-      double timeStep(void) const;
+      PylithScalar timeStep(void) const;
       
       /** Set database for physical property parameters.
        *
@@ -162,8 +162,8 @@
        * @param dbValues Array of database values.
        */
       virtual
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues) = 0;
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues) = 0;
       
       /** Nondimensionalize properties.
        *
@@ -171,7 +171,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const = 0;
       
       /** Dimensionalize properties.
@@ -180,7 +180,7 @@
        * @param nvalues Number of values.
        */
       virtual
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const = 0;
 
     }; // class Material

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
 
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,8 +83,8 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       // Note: We do not need to dimensionalize or nondimensionalize state
       // variables because there are strains, which are dimensionless.
@@ -96,10 +96,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -122,17 +122,17 @@
        * @param initialStrainSize Size of initial strain array.
        * @param computeStateVars Flag indicating to compute updated state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -151,17 +151,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Update state variables (for next time step).
@@ -177,15 +177,15 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -197,9 +197,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class MaxwellIsotropic3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
 
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,8 +83,8 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       // Note: We do not need to dimensionalize or nondimensionalize state
       // variables because there are strains, which are dimensionless.
@@ -96,10 +96,10 @@
        * @param properties Properties at location.
        * @param numProperties Number of properties.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -122,17 +122,17 @@
        * @param initialStrainSize Size of initial strain array.
        * @param computeStateVars Flag indicating to compute updated state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -151,17 +151,17 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Update state variables (for next time step).
@@ -177,15 +177,15 @@
        * @param initialStrain Initial strain tensor at location.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -197,9 +197,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
 
     }; // class MaxwellPlaneStrain

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
        *
        * @param dt Current time step.
        */
-      void timeStep(const double dt);
+      void timeStep(const PylithScalar dt);
       
       /** Set whether elastic or inelastic constitutive relations are used.
        *
@@ -59,15 +59,15 @@
        * @param propValues Array of property values.
        * @param dbValues Array of database values.
        */
-      void _dbToProperties(double* const propValues,
-			   const pylith::double_array& dbValues);
+      void _dbToProperties(PylithScalar* const propValues,
+			   const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize properties.
        *
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _nondimProperties(double* const values,
+      void _nondimProperties(PylithScalar* const values,
 			     const int nvalues) const;
       
       /** Dimensionalize properties.
@@ -75,7 +75,7 @@
        * @param values Array of property values.
        * @param nvalues Number of values.
        */
-      void _dimProperties(double* const values,
+      void _dimProperties(PylithScalar* const values,
 			  const int nvalues) const;
       
       /** Compute initial state variables from values in spatial database.
@@ -83,15 +83,15 @@
        * @param stateValues Array of state variable values.
        * @param dbValues Array of database values.
        */
-      void _dbToStateVars(double* const stateValues,
-			  const pylith::double_array& dbValues);
+      void _dbToStateVars(PylithScalar* const stateValues,
+			  const pylith::scalar_array& dbValues);
       
       /** Nondimensionalize state variables..
        *
        * @param values Array of state variables.
        * @param nvalues Number of values.
        */
-      void _nondimStateVars(double* const values,
+      void _nondimStateVars(PylithScalar* const values,
 			    const int nvalues) const;
       
       /** Dimensionalize state variables.
@@ -99,7 +99,7 @@
        * @param values Array of state variables.
        * @param nvalues Number of values.
        */
-      void _dimStateVars(double* const values,
+      void _dimStateVars(PylithScalar* const values,
 			 const int nvalues) const;
       
       /** Compute density from properties.
@@ -110,10 +110,10 @@
        * @param stateVars State variables at location.
        * @param numStateVars Number of state variables.
        */
-      void _calcDensity(double* const density,
-			const double* properties,
+      void _calcDensity(PylithScalar* const density,
+			const PylithScalar* properties,
 			const int numProperties,
-			const double* stateVars,
+			const PylithScalar* stateVars,
 			const int numStateVars);
       
       /** Compute stress tensor from properties and state variables. If
@@ -136,17 +136,17 @@
        * @param computeStateVars Flag indicating to compute updated
        * state variables.
        */
-      void _calcStress(double* const stress,
+      void _calcStress(PylithScalar* const stress,
 		       const int stressSize,
-		       const double* properties,
+		       const PylithScalar* properties,
 		       const int numProperties,
-		       const double* stateVars,
+		       const PylithScalar* stateVars,
 		       const int numStateVars,
-		       const double* totalStrain,
+		       const PylithScalar* totalStrain,
 		       const int strainSize,
-		       const double* initialStress,
+		       const PylithScalar* initialStress,
 		       const int initialStressSize,
-		       const double* initialStrain,
+		       const PylithScalar* initialStrain,
 		       const int initialStrainSize,
 		       const bool computeStateVars);
       
@@ -165,17 +165,17 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _calcElasticConsts(double* const elasticConsts,
+      void _calcElasticConsts(PylithScalar* const elasticConsts,
 			      const int numElasticConsts,
-			      const double* properties,
+			      const PylithScalar* properties,
 			      const int numProperties,
-			      const double* stateVars,
+			      const PylithScalar* stateVars,
 			      const int numStateVars,
-			      const double* totalStrain,
+			      const PylithScalar* totalStrain,
 			      const int strainSize,
-			      const double* initialStress,
+			      const PylithScalar* initialStress,
 			      const int initialStressSize,
-			      const double* initialStrain,
+			      const PylithScalar* initialStrain,
 			      const int initialStrainSize);
       
       /** Get stable time step for implicit time integration.
@@ -187,9 +187,9 @@
        *
        * @returns Time step
        */
-      double _stableTimeStepImplicit(const double* properties,
+      PylithScalar _stableTimeStepImplicit(const PylithScalar* properties,
 				     const int numProperties,
-				     const double* stateVars,
+				     const PylithScalar* stateVars,
 				     const int numStateVars) const;
       
       /** Update state variables (for next time step).
@@ -205,15 +205,15 @@
        * @param initialStrain Initial strain values.
        * @param initialStrainSize Size of initial strain array.
        */
-      void _updateStateVars(double* const stateVars,
+      void _updateStateVars(PylithScalar* const stateVars,
 			    const int numStateVars,
-			    const double* properties,
+			    const PylithScalar* properties,
 			    const int numProperties,
-			    const double* totalStrain,
+			    const PylithScalar* totalStrain,
 			    const int strainSize,
-			    const double* initialStress,
+			    const PylithScalar* initialStress,
 			    const int initialStressSize,
-			    const double* initialStrain,
+			    const PylithScalar* initialStrain,
 			    const int initialStrainSize);
 
     }; // class PowerLaw3D

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/materials.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/materials.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/materials.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
  } // exception
 
 %include "typemaps.i"
-%include "../include/doublearray.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriter.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriter.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriter.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,6 +50,12 @@
       virtual
       void deallocate(void);
   
+      /** Set time scale for simulation time.
+       *
+       * @param value Time scale
+       */
+      void timeScale(const PylithScalar value);
+
       /** Prepare for writing files.
        *
        * @param mesh Finite-element mesh. 
@@ -77,7 +83,7 @@
        * @param labelId Value of label defining which cells to include.
        */
       virtual
-      void openTimeStep(const double t,
+      void openTimeStep(const PylithScalar t,
 			const mesh_type& mesh,
 			const char* label =0,
 			const int labelId =0);
@@ -93,7 +99,7 @@
        * @param mesh Mesh for output.
        */
       virtual
-      void writeVertexField(const double t,
+      void writeVertexField(const PylithScalar t,
 			    field_type& field,
 			    const mesh_type& mesh) = 0;
       
@@ -106,7 +112,7 @@
        * @param labelId Value of label defining which cells to include.
        */
       virtual
-      void writeCellField(const double t,
+      void writeCellField(const PylithScalar t,
 			  field_type& field,
 			  const char* label =0,
 			  const int labelId =0) = 0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,7 +76,7 @@
        * @param field Field over vertices.
        * @param mesh Mesh for output.
        */
-      void writeVertexField(const double t,
+      void writeVertexField(const PylithScalar t,
 			    field_type& field,
 			    const mesh_type& mesh);
       
@@ -88,7 +88,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void writeCellField(const double t,
+      void writeCellField(const PylithScalar t,
 			  field_type& field,
 			  const char* label =0,
 			  const int labelId =0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5Ext.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5Ext.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterHDF5Ext.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,7 +76,7 @@
        * @param field Field over vertices.
        * @param mesh Mesh for output.
        */
-      void writeVertexField(const double t,
+      void writeVertexField(const PylithScalar t,
 			    field_type& field,
 			    const mesh_type& mesh);
       
@@ -88,7 +88,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void writeCellField(const double t,
+      void writeCellField(const PylithScalar t,
 			  field_type& field,
 			  const char* label =0,
 			  const int labelId =0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterVTK.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterVTK.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/DataWriterVTK.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -67,7 +67,7 @@
        * @param value Value (time in seconds) used to normalize time stamp in
        * filename.
        */
-      void timeConstant(const double value);
+      void timeConstant(const PylithScalar value);
       
 	  /** Set precision of floating point values in output.
    	   *	
@@ -83,7 +83,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void openTimeStep(const double t,
+      void openTimeStep(const PylithScalar t,
 			const mesh_type& mesh,
 			const char* label =0,
 			const int labelId =0);
@@ -97,7 +97,7 @@
        * @param field Field over vertices.
        * @param mesh Mesh for output.
        */
-      void writeVertexField(const double t,
+      void writeVertexField(const PylithScalar t,
 			    field_type& field,
 			    const mesh_type& mesh);
       
@@ -109,7 +109,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void writeCellField(const double t,
+      void writeCellField(const PylithScalar t,
 			  field_type& field,
 			  const char* label =0,
 			  const int labelId =0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -64,7 +64,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/meshio_wrap.cxx $(srcdir)/meshio.py: $(swig_sources)
-	$(SWIG) $(PYLITH_SWIG_CPPFLAGS) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) $(PYLITH_SWIG_CPPFLAGS) -Wall -c++ -python $<
 endif
 
 if ENABLE_HDF5

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/OutputManager.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/OutputManager.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/OutputManager.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -98,7 +98,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void openTimeStep(const double t,
+      void openTimeStep(const PylithScalar t,
 			const mesh_type& mesh,
 			const char* label =0,
 			const int labelId =0);
@@ -112,7 +112,7 @@
        * @param field Vertex field.
        * @param mesh Mesh for output.
        */
-      void appendVertexField(const double t,
+      void appendVertexField(const PylithScalar t,
 			     field_type& field,
 			     const mesh_type& mesh);
       
@@ -124,7 +124,7 @@
        *   (=0 means use all cells in mesh).
        * @param labelId Value of label defining which cells to include.
        */
-      void appendCellField(const double t,
+      void appendCellField(const PylithScalar t,
 			   field_type& field,
 			   const char* label =0,
 			   const int labelId =0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/meshio.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/meshio.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/meshio.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,6 +58,7 @@
  } // exception
 
 %include "typemaps.i"
+%include "../include/scalartypemaps.i"
 
 // Interfaces
 %include "MeshIOObj.i"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/mpi/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/mpi_wrap.cxx $(srcdir)/mpi.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -104,8 +104,8 @@
        */
       void updateSettings(pylith::topology::Jacobian* jacobian,
 			  pylith::topology::SolutionFields* fields,
-			  const double t,
-			  const double dt);
+			  const PylithScalar t,
+			  const PylithScalar dt);
       
       /** Update handles and parameters for reforming the Jacobian and
        *  residual.
@@ -118,8 +118,8 @@
        */
       void updateSettings(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
 			  pylith::topology::SolutionFields* fields,
-			  const double t,
-			  const double dt);
+			  const PylithScalar t,
+			  const PylithScalar dt);
 
       /** Reform system residual.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,7 +59,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/problems_wrap.cxx $(srcdir)/problems.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/problems.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/problems.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/problems.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,6 +50,7 @@
 
 %include "typemaps.i"
 %include "../include/integratorarray.i"
+%include "../include/scalartypemaps.i"
 
 // Interfaces
 %include "Formulation.i"

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Field.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Field.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Field.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -101,13 +101,13 @@
        *
        * @param value Scale associated with field.
        */
-      void scale(const double value);
+      void scale(const PylithScalar value);
 
       /** Get scale for dimensionalizing field.
        *
        * @returns Scale associated with field.
        */
-      double scale(void) const;
+      PylithScalar scale(void) const;
       
       /** Set flag indicating whether it is okay to dimensionalize field.
        *
@@ -203,9 +203,12 @@
        * information from the "global" PETSc vector view to the "local"
        * Sieve section view.
        *
+       * @param mesh Mesh associated with scatter.
        * @param context Label for context associated with vector.
        */
-      void createScatter(const char* context ="");
+      template<typename scatter_mesh_type>
+      void createScatter(const scatter_mesh_type& mesh,
+			 const char* context ="");
 
       /** Get PETSc vector associated with field.
        *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/FieldsNew.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/FieldsNew.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/FieldsNew.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,7 +63,7 @@
 	       const char* label,
 	       const int fiberDim,
 	       FieldBase::VectorFieldEnum vectorFieldType =FieldBase::OTHER,
-	       const double scale =1.0,
+	       const PylithScalar scale =1.0,
 	       const bool dimsOkay =false);
 
       /** Create and allocate Sieve section.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 if ENABLE_SWIG
 $(srcdir)/topology_wrap.cxx $(srcdir)/topology.py: $(swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/topology.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/topology.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/topology/topology.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,6 +49,7 @@
 %include "typemaps.i"
 %include "../include/chararray.i"
 %include "../include/submeshfield.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{
@@ -74,6 +75,7 @@
 %include "ReverseCuthillMcKee.i"
 
 // Template instatiation
+
 %template(MeshField) pylith::topology::Field<pylith::topology::Mesh>;
 %template(SubMeshField) pylith::topology::Field<pylith::topology::SubMesh>;
 %template(MeshFields) pylith::topology::Fields<pylith::topology::Field<pylith::topology::Mesh> >;
@@ -82,5 +84,12 @@
 %template(MeshFieldsNew) pylith::topology::FieldsNew<pylith::topology::Mesh>;
 %template(SubMeshFieldsNew) pylith::topology::FieldsNew<pylith::topology::SubMesh>;
 
+%extend pylith::topology::Field<pylith::topology::Mesh> {
+  %template(createScatterMesh) createScatter<pylith::topology::Mesh>;
+ }
+%extend pylith::topology::Field<pylith::topology::Mesh> {
+  %template(createScatterSubMesh) createScatter<pylith::topology::SubMesh>;
+ }
+
 // End of file
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,6 +39,7 @@
 
 utils_swig_sources = \
 	utils.i \
+	pylith_general.i \
 	EventLogger.i \
 	TestArray.i
 
@@ -88,7 +89,7 @@
 	$(SWIG) -Wall -c++ -python $<
 
 $(srcdir)/utils_wrap.cxx $(srcdir)/utils.py: $(utils_swig_sources)
-	$(SWIG) -Wall -c++ -python $<
+	$(SWIG) $(PETSC_CC_INCLUDES) -Wall -c++ -python $<
 endif
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/TestArray.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/TestArray.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/TestArray.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,8 +22,8 @@
  * @brief Python interface to C++ TestArray object.
  */
 
-%apply(double* IN_ARRAY1, int DIM1) {
-  (const double* valuesE,
+%apply(PylithScalar* IN_ARRAY1, int DIM1) {
+  (const PylithScalar* valuesE,
    const int nvalues)
     };
 %inline %{
@@ -34,13 +34,13 @@
    * @param values Array of values to check.
    */
   bool
-  TestArray_checkDouble(const double* valuesE,
+  TestArray_checkScalar(const PylithScalar* valuesE,
 			const int nvalues,
-			const pylith::double_array& values) {
+			const pylith::scalar_array& values) {
     pylith::utils::TestArray::check(valuesE, nvalues, values);
-  } // check(double)
+  } // check(PylithScalar)
 %} // inline
-%clear(const double* valuesE, const int nvalues);
+%clear(const PylithScalar* valuesE, const int nvalues);
 
 
 // End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/petsc_general.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/petsc_general.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/petsc_general.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,15 +41,31 @@
 %} // inline
 
 // ----------------------------------------------------------------------
-// sizeofVoidPtr
+// PetscOptionsSetValue
 %inline %{
   int
-  sizeofVoidPtr(void)
-  { // sizeofVoidPtr
-    return sizeof(void*);
-  } // sizeofVoidPtr
+  optionsSetValue(const char* name,
+		  const char* value)
+  { // optionsSetValue
+    PetscErrorCode err = PetscOptionsSetValue(name, value); CHKERRQ(err);
+    return 0;
+  } // optionsSetValue
 %} // inline
 
+// ----------------------------------------------------------------------
+// PetscOptionsHasName
+%inline %{
+  bool
+  optionsHasName(const char* name)
+  { // optionsHasName
+    PetscBool hasName = PetscBool(0);
+    PetscErrorCode err =
+      PetscOptionsHasName(PETSC_NULL, name, &hasName);
 
+    return (hasName) ? true : false;
+  } // optionsHasName
+%} // inline
+
+
 // End of file
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/pylith_general.i (from rev 19130, short/3D/PyLith/trunk/modulesrc/utils/pylith_general.i)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/pylith_general.i	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/pylith_general.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ======================================================================
+//
+
+// ----------------------------------------------------------------------
+// sizeofVoidPtr
+%inline %{
+  int
+  sizeofVoidPtr(void)
+  { // sizeofVoidPtr
+    return sizeof(void*);
+  } // sizeofVoidPtr
+%} // inline
+
+// ----------------------------------------------------------------------
+// sizeofPylithScalar
+%inline %{
+  int
+  sizeofPylithScalar(void)
+  { // sizeofPylithScalar
+    return sizeof(PylithScalar);
+  } // sizeofPylithScalar
+%} // inline
+
+
+// ----------------------------------------------------------------------
+// isCUDAEnabled
+%inline %{
+  bool
+  isCUDAEnabled(void)
+  { // isCUDAEnabled
+#if ENABLE_CUDA
+    return true;
+#else
+    return false;
+#endif
+  } // isCUDAEnabled
+%} // inline
+
+
+// End of file
+

Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/utils.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/utils.i	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/utils/utils.i	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,7 +25,7 @@
 #include "pylith/utils/TestArray.hh"
 
 #include <petsclog.h> // USES PetscLogEventBegin/End() in inline methods
-#include "pylith/utils/arrayfwd.hh" // USES double_array
+#include "pylith/utils/arrayfwd.hh" // USES scalar_array
 #include "pylith/utils/sievetypes.hh"
 %}
 
@@ -41,6 +41,7 @@
  } // exception
 
 %include "typemaps.i"
+%include "../include/scalartypemaps.i"
 
 // Numpy interface stuff
 %{
@@ -52,6 +53,7 @@
 %}
 
 // Interfaces
+%include "pylith_general.i"
 %include "EventLogger.i"
 %include "TestArray.i"
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/checkfaultpc.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -3,7 +3,7 @@
 import numpy
 import numpy.linalg as linalg
 
-A = numpy.array([[4/3.0, -0.5, 1/6.0, 0,   0,0,0,0],
+K = numpy.array([[4/3.0, -0.5, 1/6.0, 0,   0,0,0,0],
                  [-0.5, 4/3.0, 0, -5/6.0,  0,0,0,0],
                  [1/6.0, 0, 4/3.0, 0.5,    0,0,0,0],
                  [0, -5/6.0, 0.5, 4/3.0,   0,0,0,0],
@@ -12,47 +12,79 @@
                  [0,0,0,0, 1/6.0, 0, 4/3.0, -0.5],
                  [0,0,0,0, 0, -5/6.0, -0.5, 4/3.0]],
                 dtype=numpy.float64)
-Ai = linalg.inv(A)
+Ki = linalg.inv(K)
 
-C = numpy.array([[0,-1,  0,0,  0,1, 0,0],
-                 [-1,0,  0,0,  1,0, 0,0],
-                 [0,0,  0,-1,  0,0, 0,1],
-                 [0,0, -1,0,   0,0, 1,0]],
+# Gauss quadrature
+L = numpy.array([[-2/3.0,0.0, -1/3.0,0.0,  +2/3.0,0.0, +1/3.0,0.0],
+                 [0.0,-2/3.0, 0.0,-1/3.0,  0.0,+2/3.0, 0.0,+1/3.0],
+                 [-1/3.0,0.0, -2/3.0,0.0,  +1/3.0,0.0, +2/3.0,0.0],
+                 [0.0,-1/3.0, 0.0,-2/3.0,  0.0,+1/3.0, 0.0,+2/3.0]],
                 dtype=numpy.float64)
+
+# Collocated vertices and quadrature
+Lc = numpy.array([[-1.0,0.0, 0.0,0.0,  +1.0,0.0, 0.0,0.0],
+                  [0.0,-1.0, 0.0,0.0,  0.0,+1.0, 0.0,0.0],
+                  [0.0,0.0, -1.0,0.0,  0.0,0.0, +1.0,0.0],
+                  [0.0,0.0, 0.0,-1.0,  0.0,0.0, 0.0,+1.0]],
+                  dtype=numpy.float64)
+
 Z = numpy.zeros( (4,4), dtype=numpy.float64)
 
-J = numpy.vstack( (numpy.hstack( (A, C.transpose()) ),
-                   numpy.hstack( (C, Z) ) ) )
-Jinv = linalg.inv(J)
+A = numpy.vstack( (numpy.hstack( (K, L.transpose()) ),
+                   numpy.hstack( (L, Z) ) ) )
+Ainv = linalg.inv(A)
 
-# Compute [C] [A]^(-1) [C]^T and its inverse.
-CAC = numpy.dot(numpy.dot(C, Ai), C.transpose())
-CACi = numpy.linalg.inv(CAC)
+Ac = numpy.vstack( (numpy.hstack( (K, Lc.transpose()) ),
+                     numpy.hstack( (Lc, Z) ) ) )
+Acinv = linalg.inv(Ac)
 
-# Compute diagonal approximation of CAC and its inverse
-Aid = 1.0 / A.diagonal() * numpy.identity(A.shape[0])
-CACd = numpy.dot(numpy.dot(C, Aid), C.transpose())
-CACdi = 1.0 / CACd.diagonal() * numpy.identity(CACd.shape[0])
+# Compute [L] [K]^(-1) [L]^T and its inverse.
+LKiL = numpy.dot(numpy.dot(L, Ki), L.transpose())
+LKiLi = numpy.linalg.inv(LKiL)
 
+LKiLc = numpy.dot(numpy.dot(Lc, Ki), Lc.transpose())
+LKiLic = numpy.linalg.inv(LKiLc)
+
+# Compute diagonal approximation of LKiL and its inverse
+Kid = 1.0 / K.diagonal() * numpy.identity(K.shape[0])
+LKidL = numpy.dot(numpy.dot(L, Kid), L.transpose())
+LKidLd = LKidL.diagonal() * numpy.identity(LKidL.shape[0])
+
+LKidLc = numpy.dot(numpy.dot(Lc, Kid), Lc.transpose())
+LKidLdc = LKidLc.diagonal() * numpy.identity(LKidLc.shape[0])
+
 # Compute preconditioner using full matrices (no approximations)
-P = J
+P = A
 Pi = numpy.linalg.inv(P)
 
 # Compute condition number
-evals, evecs = numpy.linalg.eig(numpy.dot(J, Pi))
+evals, evecs = numpy.linalg.eig(numpy.dot(Pi, A))
 print numpy.abs(evals)
 print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
 
-# Compute preconditioner using diagonal approximations (but full A)
-Pd = numpy.zeros(J.shape)
-Pd[0:8,0:8] = A
+# Compute preconditioner using diagonal approximations for K
+Pd = numpy.zeros(A.shape)
+Pd[0:8,0:8] = K
 Pd[0:8,8:12] = 0.0
 Pd[8:12,0:8] = 0.0
-Pd[8:12,8:12] = -CACd
+Pd[8:12,8:12] = -LKidL
+print LKidL
 
-Pdi = numpy.linalg.inv(Pd)
+# Compute preconditioner using diagonal approximations for K
+Pdc = numpy.zeros(Ac.shape)
+Pdc[0:8,0:8] = K
+Pdc[0:8,8:12] = 0.0
+Pdc[8:12,0:8] = 0.0
+Pdc[8:12,8:12] = -LKidLc
+print LKidLc
 
 # Compute condition number for diagonal approximations
-evals, evecs = numpy.linalg.eig(numpy.dot(Pdi, J))
+Pdi = numpy.linalg.inv(Pd)
+evals, evecs = numpy.linalg.eig(numpy.dot(Pdi, A))
 print numpy.abs(evals)
 print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))
+
+Pdci = numpy.linalg.inv(Pdc)
+evals, evecs = numpy.linalg.eig(numpy.dot(Pdci, Ac))
+print numpy.abs(evals)
+print numpy.max(numpy.abs(evals))/numpy.min(numpy.abs(evals))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/notes.tex	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,57 +35,58 @@
 
 We have a Jacobian of the form
 \begin{equation}
-  J = \left( \begin{array}{cc}
-    A & C^T \\
-    C & 0
+  A = \left( \begin{array}{cc}
+    K & L^T \\
+    L & 0
   \end{array} \right).
 \end{equation}
-We use the Schur complement of block A to examine the form of $J^{-1}$,
+We use the Schur complement of block K to examine the form of $A^{-1}$,
 \begin{equation}
-  J^{-1} = \left( \begin{array}{cc}
-    A^{-1}+A^{-1} C^{T}(-C A^{-1} C^{T})^{-1} C A^{-1} & 
-    -A^{-1}C^{T}(-C A^{-1} C^{T})^{-1} \\
-    -(-C A^{-1} C^{T})^{-1} C A^{-1} & -(C A^{-1} C^T)^{-1}
+  A^{-1} = \left( \begin{array}{cc}
+    K^{-1}+K^{-1} L^{T}(-L K^{-1} L^{T})^{-1} L K^{-1} & 
+    -K^{-1}L^{T}(-L K^{-1} L^{T})^{-1} \\
+    -(-L K^{-1} L^{T})^{-1} L K^{-1} & -(L K^{-1} L^T)^{-1}
   \end{array} \right),
 \end{equation}
-A suitable block diagonal $P^{-1}$ is
+A suitable block diagonal approximation of $A^{-1}$ is
 \begin{equation}
   P^{-1} = \left( \begin{array}{cc}
-    A^{-1} & 0 \\
-    0 & -(C A^{-1} C^T)^{-1}
+    K^{-1} & 0 \\
+    0 & -(L K^{-1} L^T)^{-1}
   \end{array} \right),
 \end{equation}
 which leads to
 \begin{equation}
   P = \left( \begin{array}{cc}
-    A & 0 \\
-    0 & C A^{-1} C^T
+    K & 0 \\
+    0 & L K^{-1} L^T
   \end{array} \right).
 \end{equation}
 
-We provide PETSc with $P$ so that it can create $P^{-1}$. Using the
-field split preconditioner, we form
+We provide PETSc with preconditioning matrix $P$ so that it can create
+$P^{-1}$. Using the field split preconditioner, we form
 \begin{equation}
   P = \left( \begin{array}{cc}
-    A_\mathit{ml} & 0 \\
+    K_\mathit{ml} & 0 \\
     0 & P_f
   \end{array} \right),
 \end{equation}
-where we use the ML package to form $A_\mathit{ml}$ and we create a
-custom matrix for the portion of the preconditioner associated with
+where we use the ML package to form $K_\mathit{ml}$ and we create a
+custom matrix for the portion of the preconditioning matrix associated with
 the Lagrange constraints, $P_f$. Let $n$ be the number of conventional
 degrees of freedom and $l$ be the number of Lagrange constraints. This
-means $A$ and $P$ are $(n+l) \times (n+l)$, $A$ and $A_\mathit{ml}$
-are $n \times n$, $C$ is $l \times n$, and $P_f$ is $l \times l$.
-We let $P_f$ be the the diagonal approximation of $C A^{-1} C^T$,
+means $K$ and $P$ are $(n+l) \times (n+l)$, $K$ and $K_\mathit{ml}$
+are $n \times n$, $L$ is $l \times n$, and $P_f$ is $l \times l$.
+
+We let $P_f$ be the the diagonal approximation of $L K^{-1} L^T$,
 \begin{equation}
-  P_f = \text{diagonal}(C A_\mathit{diag}^{-1} C^T).
+  P_f = \text{diagonal}(L K_\mathit{diag}^{-1} L^T).
 \end{equation}
 Using the {\tt multiplicative} field split type, PETSc will form
 $P^{-1}$ as
 \begin{equation}
   P^{-1} = \left( \begin{array}{cc}
-    A_\mathit{ml}^{-1} & -A_\mathit{ml}^{-1} C^T ?? \\
+    K_\mathit{ml}^{-1} & -K_\mathit{ml}^{-1} L^T ?? \\
     0 & P_f^{-1}
   \end{array} \right).
 \end{equation}

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -6,3 +6,7 @@
 vtk_output_file = ../../examples/3d/hex8/output/step01-lower_crust_princstress_t0.vtk
 vtk_tensor_index = 1
 vtk_tensor_components_order = [0,1,2,3,4,5]
+add_regional_field = True
+regional_sigma1 = [-1.5e7, 1.0, 0.0, 0.0]
+regional_sigma2 = [-1.0e7, 0.0, 0.0, 1.0]
+regional_sigma3 = [-5.0e6, 0.0, 1.0, 0.0]

Modified: short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/playpen/postproc/princaxes.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,8 +43,12 @@
     ## \b Properties
     ## @li \b vtk_input_file  Name of VTK input file.
     ## @li \b vtk_output_file Name of VTK output file.
-    ## @li \b vtk_tensor_index Index indicating which VTK field array contains desired tensor.
-    ## @li \b vtk_tensor_components_order Indices corresponding to xx,yy,zz,xy,yz,xz.
+    ## @li \b vtk_tensor_index Index of desired VTK field array.
+    ## @li \b vtk_tensor_components_order Indices of xx,yy,zz,xy,yz,xz.
+    ## @li \b add_regional_field Add regional stress/strain field?
+    ## @li \b regional_sigma1 Value and direction cosines for sigma_1.
+    ## @li \b regional_sigma2 Value and direction cosines for sigma_2.
+    ## @li \b regional_sigma3 Value and direction cosines for sigma_3.
 
     import pyre.inventory
 
@@ -56,11 +60,26 @@
     vtkOutputFile.meta['tip'] = "Name of VTK output file."
 
     vtkTensorIndex = pyre.inventory.int("vtk_tensor_index", default=1)
-    vtkTensorIndex.meta['tip'] = "Index indicating which VTK field array contains desired tensor."
+    vtkTensorIndex.meta['tip'] = "Index of desired VTK field array."
 
-    vtkTensorComponentsOrder = pyre.inventory.list("vtk_tensor_components_order",
-                                                default=[0, 1, 2, 3, 4, 5])
-    vtkTensorComponentsOrder.meta['tip'] = "Indices corresponding to xx, yy, zz, xy, yz, xz."
+    vtkTensorComponentsOrder = pyre.inventory.list(
+      "vtk_tensor_components_order", default=[0, 1, 2, 3, 4, 5])
+    vtkTensorComponentsOrder.meta['tip'] = "Indices of xx, yy, zz, xy, yz, xz."
+
+    addRegionalField = pyre.inventory.bool("add_regional_field", default=False)
+    addRegionalField.meta['tip'] = "Add regional field?"
+
+    regionalSigma1 = pyre.inventory.list("regional_sigma1",
+                                         default=[-1.5e7, 1.0, 0.0, 0.0])
+    regionalSigma1.meta['tip'] = "Value and direction cosines of sigma1."
+
+    regionalSigma2 = pyre.inventory.list("regional_sigma2",
+                                         default=[-1.0e7, 0.0, 0.0, 1.0])
+    regionalSigma2.meta['tip'] = "Value and direction cosines of sigma2."
+
+    regionalSigma3 = pyre.inventory.list("regional_sigma3",
+                                         default=[-5.0e6, 0.0, 1.0, 0.0])
+    regionalSigma3.meta['tip'] = "Value and direction cosines of sigma3."
     
   
   # PUBLIC METHODS /////////////////////////////////////////////////////
@@ -82,6 +101,8 @@
     self.minEigenvalue = None
     self.intEigenvalue = None
     self.maxEigenvalue = None
+
+    self.regionalField = numpy.zeros((3, 3), dtype=numpy.float64)
     return
 
 
@@ -89,6 +110,8 @@
     # import pdb
     # pdb.set_trace()
     self._readVtkFile()
+    if (self.addRegionalField):
+      self._getRegionalField()
     self._getPrincAxes()
     self._writeVtkFile()
     return
@@ -112,7 +135,29 @@
     self.vtkTensorIndex = self.inventory.vtkTensorIndex
     self.vtkTensorComponentsOrder = self.inventory.vtkTensorComponentsOrder
 
+    # Regional field
+    s1 = float(self.inventory.regionalSigma1[0])
+    s2 = float(self.inventory.regionalSigma1[0])
+    s3 = float(self.inventory.regionalSigma1[0])
+    sVec = numpy.array([s1, s2, s3], dtype=numpy.float64)
+    self.regionalSigma = numpy.diag(sVec)
+    self.regionalAxes = numpy.zeros((3,3), dtype=numpy.float64)
+    for i in range(3):
+      self.regionalAxes[0,i] = float(self.inventory.regionalSigma1[i+1])
+      self.regionalAxes[1,i] = float(self.inventory.regionalSigma2[i+1])
+      self.regionalAxes[2,i] = float(self.inventory.regionalSigma3[i+1])
+
     return
+
+
+  def _getRegionalField(self):
+    """
+    Function to transform regional field from principal axes to mesh
+    coordinates.
+    """
+    t1 = numpy.dot(self.regionalAxes, self.regionalSigma)
+    self.regionalField = numpy.dot(t1, numpy.transpose(self.regionalAxes))
+    return
       
 
   def _readVtkFile(self):
@@ -136,7 +181,6 @@
     self.cellType = data.get_cell_type(0)
     (numVerts, self.spaceDim) = self.vertArray.shape
 
-
     # Get cell fields and extract tensor.
     cellData = data._get_cell_data()
     numCellDataArrays = cellData._get_number_of_arrays()
@@ -173,9 +217,9 @@
     for point in xrange(self.numTensorPoints):
       tensor = self.tensorSorted[point, :]
       tensorOrdered, eigenValuesOrdered = self._compPrincAxes(tensor)
-      self.minPrincAxis[point,:] = tensorOrdered[0]
-      self.intPrincAxis[point,:] = tensorOrdered[1]
-      self.maxPrincAxis[point,:] = tensorOrdered[2]
+      self.minPrincAxis[point,:] = tensorOrdered[:,0]
+      self.intPrincAxis[point,:] = tensorOrdered[:,1]
+      self.maxPrincAxis[point,:] = tensorOrdered[:,2]
       self.minEigenValue[point] = eigenValuesOrdered[0]
       self.intEigenValue[point] = eigenValuesOrdered[1]
       self.maxEigenValue[point] = eigenValuesOrdered[2]
@@ -185,22 +229,22 @@
 
   def _compPrincAxes(self, tensor):
     """
-    Function to compute 3D principal axes, sort them, and multiply by
-    corresponding eigenvalue.
+    Function to compute 3D principal axes and sort them.
     """
     tensorMat = numpy.array([(tensor[0], tensor[3], tensor[5]),
                              (tensor[3], tensor[1], tensor[4]),
                              (tensor[5], tensor[4], tensor[2])],
                             dtype=numpy.float64)
+    tensorMat += self.regionalField
     (eigenValue, princAxes) = numpy.linalg.eigh(tensorMat)
     idx = eigenValue.argsort()
     eigenValuesOrdered = eigenValue[idx]
     princAxesOrdered = princAxes[:,idx]
-    tensorOrdered = numpy.empty_like(princAxesOrdered)
-    tensorOrdered[0,:] = eigenValuesOrdered[0] * princAxesOrdered[0,:]
-    tensorOrdered[1,:] = eigenValuesOrdered[1] * princAxesOrdered[1,:]
-    tensorOrdered[2,:] = eigenValuesOrdered[2] * princAxesOrdered[2,:]
-    return tensorOrdered, eigenValuesOrdered
+    # tensorOrdered = numpy.empty_like(princAxesOrdered)
+    # tensorOrdered[0,:] = eigenValuesOrdered[0] * princAxesOrdered[0,:]
+    # tensorOrdered[1,:] = eigenValuesOrdered[1] * princAxesOrdered[1,:]
+    # tensorOrdered[2,:] = eigenValuesOrdered[2] * princAxesOrdered[2,:]
+    return princAxesOrdered, eigenValuesOrdered
   
 
   def _writeVtkFile(self):

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,6 +54,7 @@
 	feassemble/ElasticityExplicitLgDeform.py \
 	feassemble/ElasticityImplicit.py \
 	feassemble/ElasticityImplicitLgDeform.py \
+	feassemble/FIATQuadrature.py \
 	feassemble/FIATLagrange.py \
 	feassemble/FIATSimplex.py \
 	feassemble/Integrator.py \
@@ -93,6 +94,7 @@
 	meshio/DataWriterVTKMesh.py \
 	meshio/DataWriterVTKSubMesh.py \
 	meshio/DataWriterVTKSubSubMesh.py \
+	meshio/DataWriterVTKPoints.py \
 	meshio/MeshIOObj.py \
 	meshio/MeshIOAscii.py \
 	meshio/MeshIOLagrit.py \
@@ -107,6 +109,8 @@
 	meshio/OutputMatElastic.py \
 	meshio/OutputNeumann.py \
 	meshio/OutputSolnSubset.py \
+	meshio/OutputSolnPoints.py \
+	meshio/PointsList.py \
 	meshio/SingleOutput.py \
 	meshio/VertexFilter.py \
 	meshio/VertexFilterVecNormMesh.py \
@@ -195,8 +199,7 @@
 
 if ENABLE_CUDA
   nobase_pkgpyexec_PYTHON += \
-	feassemble/ElasticityImplicitCUDA.py \
-	problems/ImplicitCUDA.py
+	feassemble/ElasticityImplicitCUDA.py
 endif
 
 if ENABLE_TETGEN

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/apps/PetscApplication.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/apps/PetscApplication.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/apps/PetscApplication.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,18 +60,8 @@
     """
     self.petsc.initialize()
 
-    # Test for CUDA
     try:
-      import pycuda
-      import pycuda.autoinit
-      self._info.log('Initialized CUDA')
-    except ImportError:
-      self._info.log('Could not initialize CUDA')
-      # :TODO: Set some flag here to disable CUDA. Optionally also
-      # allow user to turn off use of CUDA.
 
-    try:
-
       self.main(*args, **kwds)
 
     except Exception, err:

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/BoundaryCondition.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/BoundaryCondition.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/BoundaryCondition.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -147,7 +147,7 @@
       ModuleBoundaryCondition.label(self, self.inventory.label)
       self.upDir = map(float, self.inventory.upDir)
       self.perfLogger = self.inventory.perfLogger
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring boundary condition "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/bc/DirichletBC.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -117,7 +117,7 @@
     try:
       BoundaryCondition._configure(self)
       TimeDependentPoints._configure(self)
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring Dirichlet boundary condition "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/Fault.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -233,7 +233,7 @@
       ModuleFault.id(self, self.inventory.matId)
       ModuleFault.label(self, self.inventory.faultLabel)
       self.perfLogger = self.inventory.perfLogger
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring fault "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesive.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesive.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesive.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -92,6 +92,12 @@
     # TEMPORARY
     ModuleFaultCohesive.faultMeshFilename(self, 
                                           self.inventory.meshFilename)
+
+    # Hardwire collocated quadrature
+    self.faultQuadrature.inventory.cell._configure()
+    self.faultQuadrature._configure()
+    self.faultQuadrature.cell.collocateQuad = True
+    self.faultQuadrature.cell.order = self.faultQuadrature.cell.degree
     return
 
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveDyn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveDyn.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveDyn.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,7 +42,7 @@
   Python object for managing FaultCohesiveDyn facilities and properties.
   
   \b Properties
-  @li None
+  @li \b zero_tolerance Tolerance for detecting zero values.
   
   \b Facilities
   @li \b db_initial_tractions Spatial database for initial tractions.
@@ -56,6 +56,10 @@
 
   import pyre.inventory
 
+  zeroTolerance = pyre.inventory.float("zero_tolerance", default=1.0e-10,
+                                       validator=pyre.inventory.greaterEqual(0.0))
+  zeroTolerance.meta['tip'] = "Tolerance for detecting zero values."
+
   db = pyre.inventory.facility("db_initial_tractions", family="spatial_database",
                                factory=NullComponent)
   db.meta['tip'] = "Spatial database for initial tractions."
@@ -192,6 +196,7 @@
     if not isinstance(self.inventory.db, NullComponent):
       ModuleFaultCohesiveDyn.dbInitialTract(self, self.inventory.db)
     ModuleFaultCohesiveDyn.frictionModel(self, self.inventory.friction)
+    ModuleFaultCohesiveDyn.zeroTolerance(self, self.inventory.zeroTolerance)
     self.output = self.inventory.output
     return
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveKin.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/faults/FaultCohesiveKin.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,6 @@
   output = pyre.inventory.facility("output", family="output_manager",
                                    factory=OutputFaultKin)
   output.meta['tip'] = "Output manager associated with fault data."
-  
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATLagrange.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATLagrange.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,6 +35,7 @@
     raise ValueError("Dimension of Lagrange element must be 1, 2, or 3.")
   return dim
 
+
 # FIATLagrange class
 class FIATLagrange(ReferenceCell):
   """
@@ -53,9 +54,10 @@
     ## Python object for managing FIATLagrange facilities and properties.
     ##
     ## \b Properties
-    ## @li \b dimension Dimension of finite-element cell
-    ## @li \b degree Degree of finite-element cell 
-    ## @li \b quad_order Order of quadrature rule
+    ## @li \b dimension Dimension of finite-element cell.
+    ## @li \b degree Degree of finite-element cell.
+    ## @li \b quad_order Order of quadrature rule.
+    ## @li \b collocate_quad Collocate quadrature points with vertices.
     ##
     ## \b Facilities
     ## @li None
@@ -72,7 +74,10 @@
     order = pyre.inventory.int("quad_order", default=-1)
     order.meta['tip'] = "Order of quadrature rule."
     
+    collocateQuad = pyre.inventory.bool("collocate_quad", default=False)
+    collocateQuad.meta['tip'] = "Collocate quadrature points with vertices."
 
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="fiatlagrange"):
@@ -411,10 +416,11 @@
       self.cellDim = self.inventory.dimension
       self.degree = self.inventory.degree
       self.order = self.inventory.order
+      self.collocateQuad = self.inventory.collocateQuad
       
       if self.order == -1:
         self.order = self.degree+1
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring quadrature "
                        "(%s):\n%s" % (aliases, err.message))
@@ -460,11 +466,18 @@
     """
     Setup quadrature rule for reference cell.
     """
+    from FIAT.reference_element import default_simplex
     from FIAT.quadrature import make_quadrature
-    from FIAT.reference_element import default_simplex
-    return make_quadrature(default_simplex(1), self.order)
+    from FIATQuadrature import CollocatedQuadratureRule
+      
+    if not self.collocateQuad:
+      q = make_quadrature(default_simplex(1), self.order)
+    else:
+      q = CollocatedQuadratureRule(default_simplex(1), self.order)
 
+    return q
 
+
   def _setupElement(self):
     """
     Setup the finite element for reference cell.

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATQuadrature.py (from rev 19130, short/3D/PyLith/trunk/pylith/feassemble/FIATQuadrature.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATQuadrature.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATQuadrature.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/feassemble/FIATQuadrature.py
+##
+## @brief Python object for special FIAT quadrature schemes.
+
+from FIAT.quadrature import QuadratureRule
+class CollocatedQuadratureRule(QuadratureRule):
+  """
+  Quadrature points colocated with vertices.
+  """
+  def __init__(self, ref_el, m):
+    from FIAT.lagrange import Lagrange
+    vertices = Lagrange(ref_el, m).dual.get_nodes()
+    pts = [v.get_point_dict().keys()[0] for v in vertices]
+    npts = len(pts)
+    wts = (ref_el.volume()/npts,)*npts
+    
+    QuadratureRule.__init__(self, ref_el, pts, wts)
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,6 +39,7 @@
                      name)
   return name
 
+
 # FIATSimplex class
 class FIATSimplex(ReferenceCell):
   """
@@ -76,6 +77,9 @@
     order = pyre.inventory.int("quad_order", default=-1)
     order.meta['tip'] = "Order of quadrature rule [-1, order = degree]."
     
+    collocateQuad = pyre.inventory.bool("collocate_quad", default=False)
+    collocateQuad.meta['tip'] = "Collocate quadrature points with vertices."
+    
 
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
@@ -163,9 +167,10 @@
       self.shape = self.inventory.shape
       self.degree = self.inventory.degree
       self.order = self.inventory.order
+      self.collocateQuad = self.inventory.collocateQuad
       if self.order == -1:
         self.order = self.degree
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring quadrature "
                        "(%s):\n%s" % (aliases, err.message))
@@ -254,11 +259,18 @@
     """
     Setup quadrature rule for reference cell.
     """
-    
-    import FIAT.quadrature
-    return FIAT.quadrature.make_quadrature(self._getShape(), self.order)
+    from FIAT.reference_element import default_simplex
+    from FIAT.quadrature import make_quadrature
+    from FIATQuadrature import CollocatedQuadratureRule
+      
+    if not self.collocateQuad:
+      q = make_quadrature(self._getShape(), self.order)
+    else:
+      q = CollocatedQuadratureRule(self._getShape(), self.order)
 
+    return q
 
+
   def _setupBasisFns(self):
     """
     Setup basis functions for reference cell.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Quadrature.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Quadrature.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Quadrature.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -133,9 +133,23 @@
     """
     Initialize C++ quadrature object.
     """
-    ModuleMeshQuadrature.initialize(self, cell.basis, cell.basisDeriv,
-                                    cell.quadPts, cell.quadWts,
-                                    cell.geometry.spaceDim())
+    import numpy
+    from pylith.utils.utils import sizeofPylithScalar
+    size = sizeofPylithScalar()
+    if 8 == size:
+        ModuleMeshQuadrature.initialize(self, cell.basis,
+                                        cell.basisDeriv,
+                                        cell.quadPts,
+                                        cell.quadWts,
+                                        cell.geometry.spaceDim())
+    elif 4 == size:
+        ModuleMeshQuadrature.initialize(self, numpy.float32(cell.basis),
+                                        numpy.float32(cell.basisDeriv),
+                                        numpy.float32(cell.quadPts),
+                                        numpy.float32(cell.quadWts),
+                                        cell.geometry.spaceDim())
+    else:
+        raise ValueError("Unknown size for PylithScalar")
     return
 
 
@@ -165,9 +179,23 @@
     """
     Initialize C++ quadrature object.
     """
-    ModuleSubMeshQuadrature.initialize(self, cell.basis, cell.basisDeriv,
-                                       cell.quadPts, cell.quadWts,
-                                       cell.geometry.spaceDim())
+    import numpy
+    from pylith.utils.utils import sizeofPylithScalar
+    size = sizeofPylithScalar()
+    if 8 == size:
+        ModuleSubMeshQuadrature.initialize(self, cell.basis,
+                                           cell.basisDeriv,
+                                           cell.quadPts,
+                                           cell.quadWts,
+                                           cell.geometry.spaceDim())
+    elif 4 == size:
+        ModuleSubMeshQuadrature.initialize(self, numpy.float32(cell.basis),
+                                           numpy.float32(cell.basisDeriv),
+                                           numpy.float32(cell.quadPts),
+                                           numpy.float32(cell.quadWts),
+                                           cell.geometry.spaceDim())
+    else:
+        raise ValueError("Unknown size for PylithScalar")
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/__init__.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/__init__.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/__init__.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -26,6 +26,7 @@
            'ElasticityExplicitLgDeform',
            'ElasticityImplicit',
            'ElasticityImplicitLgDeform',
+           'FIATQuadrature',
            'FIATLagrange',
            'FIATSimplex',
            'IntegratorElasticity',

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/FrictionModel.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
   Validate descriptive label.
   """
   if 0 == len(value):
-    raise ValueError("Discriptive label for friction model not specified.")
+    raise ValueError("Descriptive label for friction model not specified.")
   return value
 
 
@@ -128,7 +128,7 @@
         self.dbInitialState(self.inventory.dbInitialState)
 
       self.perfLogger = self.inventory.perfLogger
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring friction model "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/friction/RateStateAgeing.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,6 +33,30 @@
   Factory: friction_model.
   """
 
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(FrictionModel.Inventory):
+    """
+    Python object for managing RateStateAgeing facilities and properties.
+    """
+    
+    ## @class Inventory
+    ## Python object for managing RateStateAgeing facilities and properties.
+    ##
+    ## \b Properties
+    ## @li \b min_slip_rate Floor for nondimensional slip rate used in 
+    ##   friction calculation.
+    ##
+    ## \b Facilities
+    ## @li None
+
+    import pyre.inventory
+
+    minSlipRate = pyre.inventory.float("min_slip_rate", default=1.0e-12,
+                                       validator=pyre.inventory.greaterEqual(0.0))
+    minSlipRate.meta['tip'] = "Floor for nondimensional slip rate used in "\
+        "friction calculation."
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="ratestateageing"):
@@ -58,6 +82,20 @@
 
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
+  def _configure(self):
+    """
+    Setup members using inventory.
+    """
+    try:
+      FrictionModel._configure(self)
+      ModuleRateStateAgeing.minSlipRate(self, self.inventory.minSlipRate)
+    except ValueError, err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring friction model "
+                       "(%s):\n%s" % (aliases, err.message))
+    return
+
+  
   def _createModuleObj(self):
     """
     Call constructor for module object for access to C++ object.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/Material.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/Material.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/materials/Material.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -150,8 +150,9 @@
               "    number of corners: %d" % \
               (self.label(),
                self.quadrature.cellDim(), self.quadrature.spaceDim(),
+               self.quadrature.cell.numCorners, 
                self.mesh.dimension(), self.mesh.coordsys().spaceDim(),
-               self.quadrature.cell.numCorners, self.mesh.coneSize())
+               self.mesh.coneSize())
     self._eventLogger.eventEnd(logEvent)
     return
   
@@ -190,7 +191,7 @@
 
       self.quadrature = self.inventory.quadrature
       self.perfLogger = self.inventory.perfLogger
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring material "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,12 +53,4 @@
     return
 
 
-  def initialize(self, normalizer):
-    """
-    Initialize writer.
-    """
-    DataWriter.initialize(self, normalizer)
-    return
-
-
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,10 @@
     """
     DataWriterHDF5Ext.initialize(self, normalizer)
     
+    timeScale = normalizer.timeScale()
+
     ModuleDataWriterHDF5Ext.filename(self, self.filename)
+    ModuleDataWriterHDF5Ext.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,10 @@
     """
     DataWriterHDF5Ext.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+
     ModuleDataWriterHDF5Ext.filename(self, self.filename)
+    ModuleDataWriterHDF5Ext.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubSubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5ExtSubSubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,10 @@
     """
     DataWriterHDF5Ext.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+
     ModuleDataWriterHDF5Ext.filename(self, self.filename)
+    ModuleDataWriterHDF5Ext.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5Mesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5Mesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5Mesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,8 +49,11 @@
     Initialize writer.
     """
     DataWriterHDF5.initialize(self, normalizer)
+
+    timeScale = normalizer.timeScale()
     
     ModuleDataWriterHDF5.filename(self, self.filename)
+    ModuleDataWriterHDF5.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,10 @@
     """
     DataWriterHDF5.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+    
     ModuleDataWriterHDF5.filename(self, self.filename)
+    ModuleDataWriterHDF5.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubSubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterHDF5SubSubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,10 @@
     """
     DataWriterHDF5.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+    
     ModuleDataWriterHDF5.filename(self, self.filename)
+    ModuleDataWriterHDF5.timeScale(self, timeScale.value)
     return
   
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTK.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTK.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -69,19 +69,6 @@
     return
 
 
-  def initialize(self, normalizer):
-    """
-    Initialize writer.
-    """
-    DataWriter.initialize(self, normalizer)
-
-    # Nondimensionalize
-    timeScale = normalizer.timeScale()
-    self.timeConstantN = normalizer.nondimensionalize(self.timeConstant,
-                                                timeScale)
-    return
-
-
   # PRIVATE METHODS ////////////////////////////////////////////////////
 
   def _configure(self):
@@ -90,7 +77,7 @@
     """
     try:
       DataWriter._configure(self)
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring VTK output "
                        "(%s):\n%s" % (aliases, err.message))

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,9 +50,14 @@
     """
     DataWriterVTK.initialize(self, normalizer)
     
+    timeScale = normalizer.timeScale()
+    timeConstantN = normalizer.nondimensionalize(self.timeConstant,
+                                                 timeScale)
+
     ModuleDataWriterVTK.filename(self, self.filename)
+    ModuleDataWriterVTK.timeScale(self, timeScale.value)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
-    ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.timeConstant(self, timeConstantN)
     ModuleDataWriterVTK.precision(self, self.precision)
     return
   

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKPoints.py (from rev 19130, short/3D/PyLith/trunk/pylith/meshio/DataWriterVTKPoints.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKPoints.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKPoints.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pyre/meshio/DataWriterVTKPoints.py
+##
+## @brief Python object for writing finite-element solution at
+## arbitrary points to VTK file.
+
+from DataWriterVTK import DataWriterVTK
+from meshio import PointsDataWriterVTK as ModuleDataWriterVTK
+
+# DataWriterVTKPoints class
+class DataWriterVTKPoints(DataWriterVTK, ModuleDataWriterVTK):
+  """
+  Python object for writing finite-element data to VTK file.
+
+  Inventory
+
+  Factory: output_data_writer
+  """
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="datawritervtkpoints"):
+    """
+    Constructor.
+    """
+    DataWriterVTK.__init__(self, name)
+    ModuleDataWriterVTK.__init__(self)
+    return
+
+
+  def initialize(self, normalizer):
+    """
+    Initialize writer.
+    """
+    DataWriterVTK.initialize(self, normalizer)
+
+    timeScale = normalizer.timeScale()
+    timeConstantN = normalizer.nondimensionalize(self.timeConstant,
+                                                 timeScale)
+
+    ModuleDataWriterVTK.filename(self, self.filename)
+    ModuleDataWriterVTK.timeScale(self, timeScale.value)
+    ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
+    ModuleDataWriterVTK.timeConstant(self, timeConstantN)
+    ModuleDataWriterVTK.precision(self, self.precision)
+    return
+  
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def data_writer():
+  """
+  Factory associated with DataWriter.
+  """
+  return DataWriterVTKPoints()
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,9 +50,14 @@
     """
     DataWriterVTK.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+    timeConstantN = normalizer.nondimensionalize(self.timeConstant,
+                                                 timeScale)
+
     ModuleDataWriterVTK.filename(self, self.filename)
+    ModuleDataWriterVTK.timeScale(self, timeScale.value)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
-    ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.timeConstant(self, timeConstantN)
     ModuleDataWriterVTK.precision(self, self.precision)
     return
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubSubMesh.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubSubMesh.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/DataWriterVTKSubSubMesh.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,9 +50,14 @@
     """
     DataWriterVTK.initialize(self, normalizer)
 
+    timeScale = normalizer.timeScale()
+    timeConstantN = normalizer.nondimensionalize(self.timeConstant,
+                                                 timeScale)
+
     ModuleDataWriterVTK.filename(self, self.filename)
+    ModuleDataWriterVTK.timeScale(self, timeScale.value)
     ModuleDataWriterVTK.timeFormat(self, self.timeFormat)
-    ModuleDataWriterVTK.timeConstant(self, self.timeConstantN)
+    ModuleDataWriterVTK.timeConstant(self, timeConstantN)
     ModuleDataWriterVTK.precision(self, self.precision)
     return
   

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnPoints.py (from rev 19130, short/3D/PyLith/trunk/pylith/meshio/OutputSolnPoints.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnPoints.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnPoints.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,242 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pyre/meshio/OutputSolnPoints.py
+##
+## @brief Python object for managing output of finite-element solution
+## information over a subdomain.
+##
+## Factory: output_manager
+
+from OutputManager import OutputManager
+from meshio import OutputSolnPoints as ModuleOutputSolnPoints
+
+# Validator for filename
+def validateFilename(value):
+  """
+  Validate filename with list of points.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for list of points not specified.")
+  return value
+
+
+# OutputSolnPoints class
+class OutputSolnPoints(OutputManager, ModuleOutputSolnPoints):
+  """
+  Python object for managing output of finite-element solution
+  information over a subdomain.
+
+  @class Inventory
+  Python object for managing OutputSolnPoints facilities and properties.
+  
+  \b Properties
+  @li \b vertex_data_fields Names of vertex data fields to output.
+  
+  \b Facilities
+  @li \b reader Reader for list of points.
+  @li \b writer Writer for data.
+
+  Factory: output_manager
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  vertexDataFields = pyre.inventory.list("vertex_data_fields", 
+                                         default=["displacement"])
+  vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
+  
+  from PointsList import PointsList
+  reader = pyre.inventory.facility("reader", factory=PointsList, family="points_list")
+  reader.meta['tip'] = "Reader for points list."
+
+  from DataWriterVTKPoints import DataWriterVTKPoints
+  writer = pyre.inventory.facility("writer", factory=DataWriterVTKPoints,
+                                 family="data_writer")
+  writer.meta['tip'] = "Writer for data."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="outputsolnpoints"):
+    """
+    Constructor.
+    """
+    OutputManager.__init__(self, name)
+    self.availableFields = \
+        {'vertex': \
+           {'info': [],
+            'data': ["displacement","velocity"]},
+         'cell': \
+           {'info': [],
+            'data': []}}
+    return
+
+
+  def preinitialize(self):
+    """
+    Do
+    """
+    OutputManager.preinitialize(self, dataProvider=self)
+    return
+  
+
+  def verifyConfiguration(self, mesh):
+    """
+    Verify compatibility of configuration.
+    """
+    OutputManager.verifyConfiguration(self, mesh)
+    ModuleOutputSolnPoints.verifyConfiguration(self, mesh)
+    return
+
+
+  def initialize(self, mesh, normalizer):
+    """
+    Initialize output manager.
+    """
+    logEvent = "%sinit" % self._loggingPrefix
+    self._eventLogger.eventBegin(logEvent)    
+
+    points = self.reader.read()
+    ModuleOutputSolnPoints.setupInterpolator(self, mesh, points)
+    self.mesh = ModuleOutputSolnPoints.createPointsMesh(self)
+    OutputManager.initialize(self, normalizer)
+
+    self._eventLogger.eventEnd(logEvent)
+    return
+
+
+  def getDataMesh(self):
+    """
+    Get mesh associated with data fields.
+    """
+    return (self.mesh, None, None)
+
+
+  def getVertexField(self, name, fields):
+    """
+    Get vertex field.
+    """
+    field = None
+    fieldType = None
+    if name == "displacement":
+      field = fields.get("disp(t)")
+    elif name == "velocity":
+      field = fields.get("velocity(t)")
+    else:
+      raise ValueError, "Vertex field '%s' not available." % name
+    return field
+
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    try:
+      OutputManager._configure(self)
+      ModuleOutputSolnPoints.label(self, self.label)
+      ModuleOutputSolnPoints.coordsys(self, self.inventory.coordsys)
+      ModuleOutputSolnPoints.writer(self, self.inventory.writer)
+      from pylith.utils.NullComponent import NullComponent
+      if not isinstance(self.inventory.vertexFilter, NullComponent):
+        ModuleOutputSolnPoints.vertexFilter(self, self.inventory.vertexFilter)
+      if not isinstance(self.inventory.cellFilter, NullComponent):
+        ModuleOutputSolnPoints.cellFilter(self, self.inventory.cellFilter)
+    except ValueError, err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring output over points "
+                       "(%s):\n%s" % (aliases, err.message))
+
+    return
+
+
+  def _createModuleObj(self):
+    """
+    Create handle to C++ object.
+    """
+    ModuleOutputSolnPoints.__init__(self)
+    return
+
+
+  def _open(self, mesh, nsteps, label, labelId):
+    """
+    Call C++ open();
+    """
+    if label != None and labelId != None:
+      ModuleOutputSolnPoints.open(self, mesh, nsteps, label, labelId)
+    else:
+      ModuleOutputSolnPoints.open(self, mesh, nsteps)
+    return
+
+
+  def _openTimeStep(self, t, mesh, label, labelId):
+    """
+    Call C++ openTimeStep();
+    """
+    if label != None and labelId != None:
+      ModuleOutputSolnPoints.openTimeStep(self, t, mesh, label, labelId)
+    else:
+      ModuleOutputSolnPoints.openTimeStep(self, t, mesh)
+    return
+
+
+  def _appendVertexField(self, t, field, mesh):
+    """
+    Call C++ appendVertexField();
+    """
+    ModuleOutputSolnPoints.appendVertexField(self, t, field, mesh)
+    return
+
+  def _appendCellField(self, t, field):
+    """
+    Call C++ appendCellField();
+    """
+    raise NotImplementedError("Output of cell field not implemented for arbitrary points.")
+    return
+
+
+  def _closeTimeStep(self):
+    """
+    Call C++ closeTimeStep().
+    """
+    ModuleOutputSolnPoints.closeTimeStep(self)
+    return
+
+
+  def _close(self):
+    """
+    Call C++ close().
+    """
+    ModuleOutputSolnPoints.close(self)
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def output_manager():
+  """
+  Factory associated with OutputManager.
+  """
+  return OutputSolnPoints()
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnSubset.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/OutputSolnSubset.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -158,7 +158,7 @@
         ModuleOutputSolnSubset.vertexFilter(self, self.inventory.vertexFilter)
       if not isinstance(self.inventory.cellFilter, NullComponent):
         ModuleOutputSolnSubset.cellFilter(self, self.inventory.cellFilter)
-    except ValueError as err:
+    except ValueError, err:
       aliases = ", ".join(self.aliases)
       raise ValueError("Error while configuring output over boundary "
                        "(%s):\n%s" % (aliases, err.message))

Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py (from rev 19130, short/3D/PyLith/trunk/pylith/meshio/PointsList.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/PointsList.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pyre/meshio/PointsList.py
+##
+## @brief Python object for reading list of points from a file.
+##
+## Factory: output_manager
+
+from pyre.components.Component import Component
+
+# Validator for filename
+def validateFilename(value):
+  """
+  Validate filename with list of points.
+  """
+  if 0 == len(value):
+    raise ValueError("Filename for list of points not specified.")
+  return value
+
+
+# PointsList class
+class PointsList(Component):
+  """
+  Python object for reading a list of points from a file.
+
+  @class Inventory
+  Python object for managing PointsList facilities and properties.
+  
+  \b Properties
+  @li \b filename Filename for list of points.
+  @li \b comment_delimiter Delimiter for comments.
+  @li \b value_delimiter Delimiter used to separate values.
+  
+  \b Facilities
+  @li None
+
+  Factory: points_list
+  """
+
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  import pyre.inventory
+
+  filename = pyre.inventory.str("filename", default="", validator=validateFilename)
+  filename.meta['tip'] = "Filename for list of points."
+
+  commentDelimiter = pyre.inventory.str("comment_delimiter", default="#")
+  commentDelimiter.meta['tip'] = "Delimiter for comments."
+
+  valueDelimiter = pyre.inventory.str("value_delimiter", default="")
+  valueDelimiter.meta['tip'] = "Delimiter used to separate values."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="pointslist"):
+    """
+    Constructor.
+    """
+    Component.__init__(self, name)
+    return
+
+
+  def read(self):
+    """
+    Read points from file.
+    """
+    import numpy
+    if len(self.valueDelimiter) == 0:
+      points = numpy.loadtxt(self.filename, comments=self.commentDelimiter)
+    else:
+      points = numpy.loadtxt(self.filename,
+                             comments=self.commentDelimiter, delimiter=self.valueDelimiter)
+    return points
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members based using inventory.
+    """
+    try:
+      Component._configure(self)
+      self.filename = self.inventory.filename
+      self.commentDelimiter = self.inventory.commentDelimiter
+    except ValueError, err:
+      aliases = ", ".join(self.aliases)
+      raise ValueError("Error while configuring points list "
+                       "(%s):\n%s" % (aliases, err.message))
+
+    return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def points_list():
+  """
+  Factory associated with PointsList.
+  """
+  return PointsList()
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/__init__.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/__init__.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/__init__.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,6 +28,7 @@
            'DataWriterVTKMesh',
            'DataWriterVTKSubMesh',
            'DataWriterVTKSubSubMesh',
+           'DataWriterVTKPoints',
            'MeshIOObj',
            'MeshIOAscii',
            'MeshIOCubit',
@@ -41,6 +42,8 @@
            'OutputNeumann'
            'OutputSoln',
            'OutputSolnSubset',
+           'OutputSolnPoints',
+           'PointsList',
            'SingleOutput',
            'VertexFilter',
            'VertexFilterVecNormMesh',

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/perf/Memory.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/perf/Memory.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/perf/Memory.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 ##
 ## @brief Python object for calculating memory usage.
 
-import pylith.utils.petsc as petsc
+from pylith.utils.utils import sizeofVoidPtr
 
 class Memory(object):
   sizeInt    = 4
@@ -33,7 +33,7 @@
 
   if pointerSize is None:
     # Get pointer using sizeof(void*) in PyLith C++ library.
-    pointerSize = petsc.sizeofVoidPtr()
+    pointerSize = sizeofVoidPtr()
 
   if pointerSize == 4:
     sizeSetEntry = 12

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -119,7 +119,7 @@
     dispT.zero()
     residual = self.fields.get("residual")
     residual.zero()
-    residual.createScatter()
+    residual.createScatterMesh(residual.mesh())
 
     lengthScale = normalizer.lengthScale()
     timeScale = normalizer.timeScale()

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumped.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumped.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumped.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -112,7 +112,7 @@
     dispT.zero()
     residual = self.fields.get("residual")
     residual.zero()
-    residual.createScatter()
+    residual.createScatterMesh(residual.mesh())
 
     lengthScale = normalizer.lengthScale()
     timeScale = normalizer.timeScale()
@@ -132,10 +132,10 @@
     self._info.log("Creating lumped Jacobian matrix.")
     from pylith.topology.topology import MeshField
     jacobian = MeshField(self.mesh)
+    jacobian.newSection(jacobian.VERTICES_FIELD, dimension)
+    jacobian.allocate()
     jacobian.label("jacobian")
     jacobian.vectorFieldType(jacobian.VECTOR)
-    jacobian.newSection(jacobian.VERTICES_FIELD, dimension)
-    jacobian.allocate()
     self.jacobian = jacobian
     self._debug.log(resourceUsageString())
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,6 +29,16 @@
 from pylith.utils.profiling import resourceUsageString
 from pyre.units.time import second
 
+# VALIDATORS ///////////////////////////////////////////////////////////
+
+# Validate use of CUDA.
+def validateUseCUDA(value):
+  from pylith.utils.utils import isCUDAEnabled
+  if value and not isCUDAEnabled:
+    raise ValueError("PyLith is not built with CUDA support.")
+  return value
+
+
 # ITEM FACTORIES ///////////////////////////////////////////////////////
 
 def outputFactory(name):
@@ -62,6 +72,7 @@
     ## Python object for managing Formulation facilities and properties.
     ##
     ## \b Properties
+    ## @li \b use_cuda Enable use of CUDA for finite-element integrations.
     ## @li \b matrix_type Type of PETSc sparse matrix.
     ## @li \b split_fields Split solution fields into displacements
     ## @li \b use_custom_constraint_pc Use custom preconditioner for
@@ -77,6 +88,10 @@
 
     import pyre.inventory
 
+    useCUDA = pyre.inventory.bool("use_cuda", default=False,
+                                  validator=validateUseCUDA)
+    useCUDA.meta['tip'] = "Enable use of CUDA for finite-element integrations."
+
     matrixType = pyre.inventory.str("matrix_type", default="unknown")
     matrixType.meta['tip'] = "Type of PETSc sparse matrix."
 
@@ -133,7 +148,6 @@
     self.constraints = None
     self.jacobian = None
     self.fields = None
-    self.solnName = None
     return
 
 
@@ -154,6 +168,7 @@
     self.constraints = []
     self.gravityField = gravityField
 
+    self.solver.preinitialize()
     self._setupMaterials(materials)
     self._setupBC(boundaryConditions)
     self._setupInterfaces(interfaceConditions)
@@ -290,6 +305,7 @@
     Set members based using inventory.
     """
     PetscComponent._configure(self)
+    self.useCUDA = self.inventory.useCUDA
     self.matrixType = self.inventory.matrixType
     self.timeStep = self.inventory.timeStep
     self.solver = self.inventory.solver
@@ -311,6 +327,7 @@
     ModuleFormulation.splitFields(self, self.inventory.useSplitFields)
     ModuleFormulation.useCustomConstraintPC(self,
                                             self.inventory.useCustomConstraintPC)
+
     return
 
 
@@ -334,12 +351,15 @@
               (self.matrixType, matrixMap[self.matrixType])
         self.matrixType = matrixMap[self.matrixType]
     self.blockMatrixOkay = True
+    if self.matrixType == "unknown" and self.solver.useCUDA:
+      self.matrixType = "mpiaijcusp"
     for constraint in self.constraints:
       numDimConstrained = constraint.numDimConstrained()
       if numDimConstrained > 0 and self.mesh.dimension() != numDimConstrained:
         self.blockMatrixOkay = False
     return
 
+
   def _setupMaterials(self, materials):
     """
     Setup materials as integrators.
@@ -473,10 +493,10 @@
 
     lengthScale = normalizer.lengthScale()
     solution = self.fields.get("dispIncr(t->t+dt)")
+    solution.newSection(solution.VERTICES_FIELD, dimension)
     solution.vectorFieldType(solution.VECTOR)
     solution.scale(lengthScale.value)
-    solution.newSection(solution.VERTICES_FIELD, dimension)
-    if self.splitFields:
+    if self.splitFields():
       solution.splitDefault()
       for integrator in self.integratorsMesh + self.integratorsSubMesh:
         integrator.splitField(solution)
@@ -491,7 +511,7 @@
     memoryLogger.stagePop()
 
     # This also creates a global order.
-    solution.createScatter()
+    solution.createScatterMesh(solution.mesh())
 
     memoryLogger.stagePush("Problem")
     dispT = self.fields.get("disp(t)")

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -105,8 +105,14 @@
     """
     Get integrator for elastic material.
     """
-    from pylith.feassemble.ElasticityImplicit import ElasticityImplicit
-    return ElasticityImplicit()
+    integrator = None
+    if self.useCUDA:
+      from pylith.feassemble.ElasticityImplicitCUDA import ElasticityImplicitCUDA
+      integrator = ElasticityImplicitCUDA()
+    else:
+      from pylith.feassemble.ElasticityImplicit import ElasticityImplicit
+      integrator = ElasticityImplicit()
+    return integrator
 
 
   def initialize(self, dimension, normalizer):
@@ -133,7 +139,7 @@
     dispT.zero()
     residual = self.fields.get("residual")
     residual.zero()
-    residual.createScatter()
+    residual.createScatterMesh(residual.mesh())
 
     lengthScale = normalizer.lengthScale()
     timeScale = normalizer.timeScale()

Deleted: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitCUDA.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitCUDA.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ImplicitCUDA.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -1,298 +0,0 @@
-#!/usr/bin/env python
-#
-# ----------------------------------------------------------------------
-#
-# Brad T. Aagaard, U.S. Geological Survey
-# Charles A. Williams, GNS Science
-# Matthew G. Knepley, University of Chicago
-#
-# This code was developed as part of the Computational Infrastructure
-# for Geodynamics (http://geodynamics.org).
-#
-# Copyright (c) 2010-2011 University of California, Davis
-#
-# See COPYING for license information.
-#
-# ----------------------------------------------------------------------
-#
-
-## @file pylith/problems/Implicit.py
-##
-## @brief Python Implicit object for solving equations using an
-## implicit formulation.
-##
-## Factory: pde_formulation
-
-from Formulation import Formulation
-from problems import Implicit as ModuleImplicit
-from pylith.utils.profiling import resourceUsageString
-
-# Implicit class
-class Implicit(Formulation, ModuleImplicit):
-  """
-  Python Implicit object for solving equations using an implicit
-  formulation.
-
-  The formulation has the general form,
-
-  [A(t+dt)] {u(t+dt)} = {b(t+dt)}. 
-
-  We know the solution at time t, so we write {u(t+dt)} as {u(t)} +
-  {du(t)}, where {du(t)} is the increment in the solution from time t
-  to time t+dt. Thus, we solve
-
-  [A(t+dt)] {du(t)} = {b(t+dt)} - [A(t+dt)]{u(t)}.
-
-  We solve this system by forming the Jacobian, A, and the residual
-
-  {r(t+dt)} = {b(t+dt)} - [A(t+dt)]{u(t)} - [A(t+dt)]{du(t)}
-
-  which we combine into
-
-  {r(t+dt)} = {b(t+dt)} - [A(t+dt)]{u(t)+du(t)}.
-
-  The method reformJacobian() computes [A(t+dt)] and the method
-  reformResidual computes {r(t+dt)}. Note that in forming the residual
-  we compute the action [A(t+dt)]{u(t)+du(t)} and do not perform a
-  matrix-vector multiplication.
-
-  [A(t+dt)] generally depends on {u(t+dt)} as well as the current
-  stresses and additional state variables.  
-
-  For linear elastic or viscoelastic problems with constant time step
-  size, A is a constant (after the elastic solution).  {b(t+dt)}
-  generally depends on the loads applied for time step t+dt (including
-  the contributions to the internal force vector from
-  displacement/velocity BC) as well as the internal force vector
-  computed from the current stresses.
-
-  Factory: pde_formulation.
-  """
-
-  # INVENTORY //////////////////////////////////////////////////////////
-
-  class Inventory(Formulation.Inventory):
-    """
-    Python object for managing Implicit facilities and properties.
-    """
-
-    ## @class Inventory
-    ## Python object for managing Implicit facilities and properties.
-    ##
-    ## \b Properties
-    ## @li None
-    ##
-    ## \b Facilities
-    ## @li None
-
-    import pyre.inventory
-
-
-  # PUBLIC METHODS /////////////////////////////////////////////////////
-
-  def __init__(self, name="implicit"):
-    """
-    Constructor.
-    """
-    Formulation.__init__(self, name)
-    ModuleImplicit.__init__(self)
-    self._loggingPrefix = "TSIm "
-    self._stepCount = None
-    return
-
-
-  def elasticityIntegrator(self):
-    """
-    Get integrator for elastic material.
-    """
-    from pylith.feassemble.ElasticityImplicitCUDA import ElasticityImplicitCUDA
-    return ElasticityImplicitCUDA()
-
-
-  def initialize(self, dimension, normalizer):
-    """
-    Initialize problem for implicit time integration.
-    """
-    logEvent = "%sinit" % self._loggingPrefix
-    self._eventLogger.eventBegin(logEvent)
-
-    self._initialize(dimension, normalizer)
-
-    from pylith.utils.petsc import MemoryLogger
-    memoryLogger = MemoryLogger.singleton()
-    memoryLogger.setDebug(0)
-    memoryLogger.stagePush("Problem")
-
-    # Allocate other fields, reusing layout from dispIncr
-    self._info.log("Creating other fields.")
-    self.fields.add("velocity(t)", "velocity")
-    self.fields.copyLayout("dispIncr(t->t+dt)")
-
-    # Setup fields and set to zero
-    dispT = self.fields.get("disp(t)")
-    dispT.zero()
-    residual = self.fields.get("residual")
-    residual.zero()
-    residual.createScatter()
-
-    lengthScale = normalizer.lengthScale()
-    timeScale = normalizer.timeScale()
-    velocityScale = lengthScale / timeScale
-    velocityT = self.fields.get("velocity(t)")
-    velocityT.scale(velocityScale.value)
-    velocityT.zero()
-
-    self._debug.log(resourceUsageString())
-    memoryLogger.stagePop()
-
-    # Allocates memory for nonzero pattern and Jacobian
-    self._info.log("Creating Jacobian matrix.")
-    self._setJacobianMatrixType()
-    from pylith.topology.Jacobian import Jacobian
-    self.jacobian = Jacobian(self.fields.solution(),
-                             self.matrixType, self.blockMatrixOkay)
-    self.jacobian.zero() # TEMPORARY, to get correct memory usage
-    self._debug.log(resourceUsageString())
-
-    memoryLogger.stagePush("Problem")
-    self._info.log("Initializing solver.")
-    self.solver.initialize(self.fields, self.jacobian, self)
-    self._debug.log(resourceUsageString())
-
-    # Initial time step solves for total displacement field, not increment
-    self._stepCount = 0
-    for constraint in self.constraints:
-      constraint.useSolnIncr(False)
-    for integrator in self.integratorsMesh + self.integratorsSubMesh:
-      integrator.useSolnIncr(False)
-
-    memoryLogger.stagePop()
-    memoryLogger.setDebug(0)
-    return
-
-
-  def getStartTime(self):
-    """
-    Get time at which time stepping should start.
-    """
-    dt = self.timeStep.timeStep(self.mesh,
-                                self.integratorsMesh + self.integratorsSubMesh)
-    return -dt
-
-
-  def prestep(self, t, dt):
-    """
-    Hook for doing stuff before advancing time step.
-    """
-    
-    # If finishing first time step, then switch from solving for total
-    # displacements to solving for incremental displacements
-    needNewJacobian = False
-    if 1 == self._stepCount:
-      self._info.log("Switching from total field solution to incremental " \
-                     "field solution.")
-      for constraint in self.constraints:
-        constraint.useSolnIncr(True)
-      for integrator in self.integratorsMesh + self.integratorsSubMesh:
-        integrator.useSolnIncr(True)
-      needNewJacobian = True
-
-    self._info.log("Setting constraints.")
-    dispIncr = self.fields.get("dispIncr(t->t+dt)")
-    dispIncr.zero()
-    if 0 == self._stepCount:
-      for constraint in self.constraints:
-        constraint.setField(t+dt, dispIncr)
-    else:
-      for constraint in self.constraints:
-        constraint.setFieldIncr(t, t+dt, dispIncr)
-
-    for integrator in self.integratorsMesh + self.integratorsSubMesh:
-      integrator.timeStep(dt)
-      if integrator.needNewJacobian():
-        needNewJacobian = True
-    if needNewJacobian:
-      self._reformJacobian(t, dt)
-
-    return
-
-
-  def step(self, t, dt):
-    """
-    Advance to next time step.
-    """
-    dispIncr = self.fields.get("dispIncr(t->t+dt)")
-
-    self._reformResidual(t+dt, dt)
-
-    self._info.log("Solving equations.")
-    residual = self.fields.get("residual")
-    self._eventLogger.stagePush("Solve")
-    #self.jacobian.view() # TEMPORARY
-    self.solver.solve(dispIncr, self.jacobian, residual)
-    #dispIncr.view("DISP INCR") # TEMPORARY
-
-    # DEBUGGING Verify solution makes residual 0
-    #self._reformResidual(t+dt, dt)
-    #residual.view("RESIDUAL")
-    
-    self._eventLogger.stagePop()
-
-    return
-
-
-  def poststep(self, t, dt):
-    """
-    Hook for doing stuff after advancing time step.
-    """
-    # Update displacement field from time t to time t+dt.
-    dispIncr = self.fields.get("dispIncr(t->t+dt)")
-    disp = self.fields.get("disp(t)")
-    disp += dispIncr
-    dispIncr.zero()
-
-    # Complete post-step processing, then write data.
-    Formulation.poststep(self, t, dt)
-
-    # Write data. Velocity at time t will be based upon displacement
-    # at time t-dt and t.
-    self._info.log("Writing solution fields.")
-    for output in self.output.components():
-      output.writeData(t+dt, self.fields)
-    self._writeData(t+dt)
-
-    self._stepCount += 1
-    return
-
-
-  def finalize(self):
-    """
-    Cleanup after time stepping.
-    """
-    Formulation.finalize(self)
-    return
-
-
-  # PRIVATE METHODS ////////////////////////////////////////////////////
-
-  def _configure(self):
-    """
-    Set members based using inventory.
-    """
-    Formulation._configure(self)
-
-    import journal
-    self._debug = journal.debug(self.name)
-    return
-
-
-# FACTORIES ////////////////////////////////////////////////////////////
-
-def pde_formulation():
-  """
-  Factory associated with Implicit.
-  """
-  return Implicit()
-
-
-# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Solver.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Solver.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Solver.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,6 +24,16 @@
 
 from pylith.utils.PetscComponent import PetscComponent
 
+# VALIDATORS ///////////////////////////////////////////////////////////
+
+# Validate use of CUDA.
+def validateUseCUDA(value):
+  from pylith.utils.utils import isCUDAEnabled
+  if value and not isCUDAEnabled:
+    raise ValueError("PyLith is not built with CUDA support.")
+  return value
+
+
 # Solver class
 class Solver(PetscComponent):
   """
@@ -43,13 +53,18 @@
     ## Python object for managing Solver facilities and properties.
     ##
     ## \b Properties
-    ## @li None
+    ## @li \b use_cuda Use CUDA in solve if supported by solver.
     ##
     ## \b Facilities
     ## @li None
 
     import pyre.inventory
 
+    useCUDA = pyre.inventory.bool("use_cuda", default=False,
+                                  validator=validateUseCUDA)
+    useCUDA.meta['tip'] = "Enable use of CUDA for finite-element integrations."
+
+
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="solver"):
@@ -60,6 +75,15 @@
     return
 
 
+  def preinitialize(self):
+    if self.useCUDA:
+      # Set vec_type for CUDA, if it has not already been set.
+      from pylith.utils.petsc import optionsSetValue, optionsHasName
+      if not optionsHasName("-vec_type"):
+        optionsSetValue("-vec_type", "mpicusp")
+    return
+
+
   # PRIVATE METHODS /////////////////////////////////////////////////////
 
   def _configure(self):
@@ -67,6 +91,8 @@
     Set members based using inventory.
     """
     PetscComponent._configure(self)
+
+    self.useCUDA = self.inventory.useCUDA
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/tests/Solution.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/tests/Solution.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/tests/Solution.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -34,13 +34,14 @@
   testcase.assertEqual(mesh['spaceDim'], spaceDim)
 
   # Check displacement solution
-  tolerance = 1.0e-6
+  toleranceMask = 1.0e-3
+  tolerance = 1.0e-5
 
   dispE = testcase.calcDisplacements(data['vertices'])
   disp = data['vertex_fields']['displacement']
 
   # Check x displacements
-  mask = numpy.abs(dispE[:,0]) > tolerance
+  mask = numpy.abs(dispE[:,0]) > toleranceMask
   diff = numpy.abs(disp[:,0] - dispE[:,0])
   diffR = numpy.abs(1.0 - disp[:,0] / dispE[:,0])  
   okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)
@@ -48,10 +49,13 @@
     print "Error in x-component of displacement field."
     print "Expected values: ",dispE
     print "Output values: ",disp
+    print dispE[~okay]
+    print disp[~okay]
+    print diffR[~okay]
   testcase.assertEqual(nvertices, numpy.sum(okay))    
     
   # Check y displacements
-  mask = numpy.abs(dispE[:,1]) > tolerance
+  mask = numpy.abs(dispE[:,1]) > toleranceMask
   diff = numpy.abs(disp[:,1] - dispE[:,1])
   diffR = numpy.abs(1.0 - disp[:,1] / dispE[:,1])  
   okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)
@@ -59,10 +63,13 @@
     print "Error in y-component of displacement field."
     print "Expected values: ",dispE
     print "Output values: ",disp
+    print dispE[~okay]
+    print disp[~okay]
+    print diffR[~okay]
   testcase.assertEqual(nvertices, numpy.sum(okay))    
 
   # Check z displacements
-  mask = numpy.abs(dispE[:,2]) > tolerance
+  mask = numpy.abs(dispE[:,2]) > toleranceMask
   diff = numpy.abs(disp[:,2] - dispE[:,2])
   diffR = numpy.abs(1.0 - disp[:,2] / dispE[:,2])  
   okay = ~mask * (diff < tolerance) + mask * (diffR < tolerance)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/VTKDataReader.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/VTKDataReader.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/VTKDataReader.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -25,13 +25,13 @@
 def has_vtk():
   if not "flag" in dir(has_vtk):
     try:
-      from enthought.tvtk.api import tvtk
+      from tvtk.api import tvtk
       has_vtk.flag = True
     except ImportError:
       print "WARNING: Cannot find Mayavi VTK interface to check output."
       print "         Tests limited to running PyLith without errors."
       print "         Install MayaVi2 " \
-          "(https://svn.enthought.com/enthought/wiki/MayaVi)"
+          "(http://code.enthought.com/projects/mayavi/)"
       print "         in order to enable verification of output."
       has_vtk.flag = False
   return has_vtk.flag
@@ -43,7 +43,7 @@
   """
 
   def __init__(self):
-    from enthought.tvtk.api import tvtk
+    from tvtk.api import tvtk
     reader = tvtk.UnstructuredGridReader()
     reader.read_all_scalars = True
     reader.read_all_vectors = True

Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/testarray.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/testarray.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/utils/testarray.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -18,7 +18,7 @@
 
 import numpy
 
-def test_double(obj, valuesE, values):
+def test_scalararray(obj, valuesE, values, places=6):
     """
     Check whether arrays containing double values match.
 
@@ -36,9 +36,9 @@
     for (vE, v) in zip(numpy.reshape(valuesE, -1),
                        numpy.reshape(values, -1)):
         if vE == 0.0:
-            obj.assertAlmostEqual(v, vE, 6)
+            obj.assertAlmostEqual(v, vE, places)
         else:
-            obj.assertAlmostEqual(1.0, v/vE, 6)
+            obj.assertAlmostEqual(1.0, v/vE, places)
 
     return
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/dynamic_timeweakening.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/dynamic_timeweakening.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/dynamic_timeweakening.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -8,6 +8,7 @@
 
 # Use slip-weakening friction
 friction = pylith.friction.TimeWeakening
+friction.label = Time weakening
 
 friction.db_properties = spatialdata.spatialdb.UniformDB
 friction.db_properties.label = Time weakening

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/pylithapp.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/faultstrip/pylithapp.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,10 +46,6 @@
 normalizer = spatialdata.units.NondimElasticDynamic
 normalizer.shear_wave_speed = 1.0*km/s
 
-bc = [y_pos,y_neg]
-interfaces = [fault]
-materials = [elastic]
-
 [pylithapp.timedependent.formulation.time_step]
 total_time = 10.0*s
 dt = 0.05*s
@@ -57,6 +53,9 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
 [pylithapp.timedependent.materials]
 elastic = pylith.materials.ElasticPlaneStrain
 
@@ -75,6 +74,9 @@
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [y_pos,y_neg]
+
 [pylithapp.timedependent.bc.y_pos]
 label = face_ypos
 bc_dof = [0, 1]
@@ -86,6 +88,9 @@
 # ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
 [pylithapp.timedependent.interfaces]
 fault = pylith.faults.FaultCohesiveDyn
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,10 +19,14 @@
 dist_noinst_DATA =\
 	pylithapp.cfg \
 	quad4.mesh \
+	ratestate.cfg \
 	ratestate_stable.cfg \
 	ratestate_weak.cfg \
 	velocitysteps.timedb \
-	plot_friction.py
+	plot_friction.py \
+	tension.cfg \
+	tension_axial.timedb \
+	tension_shear.timedb
 
 
 # End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/plot_friction.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/plot_friction.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/plot_friction.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -10,7 +10,7 @@
 
 # ----------------------------------------------------------------------
 dt = 0.01
-t = numpy.arange(0.0, 12.001, dt)
+t = numpy.arange(0.0, 14.001, dt)
 mu0 = 0.6
 if sim == "ratestate_stable":
     a = 0.016
@@ -31,25 +31,33 @@
     return
 
 
-theta = L/V0*numpy.ones(t.shape)
 
 mask1 = t < 2.0
 V1 = 1.0e-6
+theta = L/V1*numpy.ones(t.shape)
 integrateStateVar(theta, V1, 0.0)
 
 mask2 = numpy.bitwise_and(t >= 2.0, t < 4.0)
-V2 = 2.0e-5
+V2 = 1.0e-5
 integrateStateVar(theta, V2, 2.0)
 
-mask3 = numpy.bitwise_and(t >= 4.0, t < 8.0)
-V3 = 5.0e-6
+mask3 = numpy.bitwise_and(t >= 4.0, t < 6.0)
+V3 = 4.0e-6
 integrateStateVar(theta, V3, 4.0)
 
-mask4 = numpy.bitwise_and(t >= 8.0, t < 12.0)
-V4 = 1.0e-7
-integrateStateVar(theta, V4, 8.0)
+mask4 = numpy.bitwise_and(t >= 6.0, t < 8.0)
+V4 = 2.0e-5
+integrateStateVar(theta, V4, 6.0)
 
-slipRateE = mask1*V1 + mask2*V2 + mask3*V3 + mask4*V4
+mask5 = numpy.bitwise_and(t >= 8.0, t < 12.0)
+V5 = 5.0e-6
+integrateStateVar(theta, V5, 8.0)
+
+mask6 = t >= 12.0
+V6 = 1.0e-6
+integrateStateVar(theta, V6, 12.0)
+
+slipRateE = mask1*V1 + mask2*V2 + mask3*V3 + mask4*V4 + mask5*V5 + mask6*V6
 stateVarE = theta
 
 muE = mu0 + a*numpy.log(slipRateE/V0) + b*numpy.log(V0*stateVarE/L)
@@ -69,7 +77,7 @@
 p = 2
 
 ax = pylab.subplot(1, 4, 1)
-ax.plot(time, slip[:,p,0])
+ax.plot(time, slip[:,p,0], 'r--')
 
 ax = pylab.subplot(1, 4, 2)
 ax.plot(t, numpy.log10(numpy.abs(slipRateE)), 'b-',

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/pylithapp.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/pylithapp.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,22 +40,21 @@
 
 normalizer = spatialdata.units.NondimElasticQuasistatic
 normalizer.length_scale = 1.0*m
-normalizer.relaxation_time = 1.0*s
+normalizer.relaxation_time = 0.1*s
 
-bc = [ypos,yneg]
-interfaces = [fault]
-materials = [elastic]
-
 [pylithapp.timedependent.implicit]
 solver = pylith.problems.SolverNonlinear
 
 [pylithapp.timedependent.implicit.time_step]
-total_time = 12.0*s
-dt = 0.1*s
+total_time = 14.0*s
+dt = 0.05*s
 
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
 [pylithapp.timedependent.materials]
 elastic = pylith.materials.ElasticPlaneStrain
 
@@ -72,43 +71,14 @@
 quadrature.cell.quad_order = 2
 
 # ----------------------------------------------------------------------
-# boundary conditions
-# ----------------------------------------------------------------------
-[pylithapp.timedependent.bc]
-ypos = pylith.bc.DirichletBC
-yneg = pylith.bc.DirichletBC
-
-# Dirichlet BC on -y
-[pylithapp.timedependent.bc.yneg]
-bc_dof = [0, 1]
-label = yneg
-
-
-# Dirichlet BC on +y
-[pylithapp.timedependent.bc.ypos]
-bc_dof = [0, 1]
-label = ypos
-
-db_change = spatialdata.spatialdb.UniformDB
-db_change.label = Spatial variation of displacement on +y
-db_change.values = [displacement-x,displacement-y,change-start-time]
-db_change.data = [1.0*m, 0.0*m, 0.0*s]
-
-th_change = spatialdata.spatialdb.TimeHistory
-th_change.label = Displacement time history on +y
-th_change.filename = velocitysteps.timedb
-
-
-#db_rate = spatialdata.spatialdb.UniformDB
-#db_rate.label = Dirichlet rate BC on +y
-#db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
-#db_rate.data = [1.0e-6*m/s, 0.0*m/s, 0.0*s]
-
-# ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
 [pylithapp.timedependent.interfaces]
 fault = pylith.faults.FaultCohesiveDyn
+fault.zero_tolerance = 1.0e-14
 
 [pylithapp.timedependent.interfaces.fault]
 id = 100
@@ -117,12 +87,6 @@
 quadrature.cell.dimension = 1
 quadrature.cell.quad_order = 2
 
-db_initial_tractions = spatialdata.spatialdb.UniformDB
-db_initial_tractions.label = Initial fault tractions
-db_initial_tractions.values = [traction-shear,traction-normal]
-db_initial_tractions.data = [0.0*MPa, -10.0*MPa]
-
-
 # ----------------------------------------------------------------------
 # PETSc
 # ----------------------------------------------------------------------
@@ -133,36 +97,27 @@
 sub_pc_factor_shift_type = nonzero
 
 # KSP
-ksp_rtol = 1.0e-12
-ksp_atol = 1.0e-15
+ksp_rtol = 1.0e-14
+ksp_atol = 1.0e-18
 ksp_max_it = 500
-ksp_gmres_restart = 100
+ksp_gmres_restart = 20
 
 ksp_monitor = true
 #ksp_view = true
 ksp_converged_reason = true
 
 # SNES
-snes_rtol = 1.0e-8
-snes_atol = 1.0e-12
+snes_rtol = 1.0e-12
+snes_atol = 1.0e-16
 snes_max_it = 500
 
 snes_monitor = true
+snes_ls_monitor = true
 #snes_view = true
 snes_converged_reason = true
 
-# Friction
-friction_pc_type = asm
-friction_sub_pc_factor_shift_type = nonzero
-friction_ksp_rtol = 1.0e-12
-friction_ksp_atol = 1.0e-15
-friction_ksp_max_it = 25
-friction_ksp_gmres_restart = 30
-#friction_ksp_monitor = true
-#friction_ksp_view = true
-friction_ksp_converged_reason = true
-
 #log_summary = true
+#info =
 
 # ----------------------------------------------------------------------
 # output
@@ -177,6 +132,6 @@
 
 [pylithapp.timedependent.materials.elastic.output]
 cell_info_fields = []
-#cell_data_fields = []
+cell_data_fields = []
 #cell_filter = pylith.meshio.CellFilterAvgMesh
 writer = pylith.meshio.DataWriterHDF5Mesh

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate.cfg (from rev 19130, short/3D/PyLith/trunk/tests/2d/frictionslide/ratestate.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,63 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [ypos,yneg]
+
+[pylithapp.timedependent.bc]
+ypos = pylith.bc.DirichletBC
+yneg = pylith.bc.DirichletBC
+
+# Dirichlet BC on -y
+[pylithapp.timedependent.bc.yneg]
+bc_dof = [0, 1]
+label = yneg
+
+
+# Dirichlet BC on +y
+[pylithapp.timedependent.bc.ypos]
+bc_dof = [0, 1]
+label = ypos
+
+db_change = spatialdata.spatialdb.UniformDB
+db_change.label = Spatial variation of displacement on +y
+db_change.values = [displacement-x,displacement-y,change-start-time]
+db_change.data = [1.0*m, 0.0*m, 0.0*s]
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Displacement time history on +y
+th_change.filename = velocitysteps.timedb
+
+
+#db_rate = spatialdata.spatialdb.UniformDB
+#db_rate.label = Dirichlet rate BC on +y
+#db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+#db_rate.data = [1.0e-6*m/s, 0.0*m/s, 0.0*s]
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
+db_initial_tractions = spatialdata.spatialdb.UniformDB
+db_initial_tractions.label = Initial fault tractions
+db_initial_tractions.values = [traction-shear,traction-normal]
+db_initial_tractions.data = [0.0*MPa, -10.0*MPa]
+
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[pylithapp.petsc]
+
+# Friction
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_stable.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_stable.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_stable.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -12,6 +12,7 @@
 # ----------------------------------------------------------------------
 [pylithapp.timedependent.interfaces.fault]
 friction = pylith.friction.RateStateAgeing
+friction.label = Rate state ageing
 
 # Set the friction model parameters.
 #  reference coefficient of friction: 0.6

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_weak.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_weak.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/ratestate_weak.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -12,6 +12,8 @@
 # ----------------------------------------------------------------------
 [pylithapp.timedependent.interfaces.fault]
 friction = pylith.friction.RateStateAgeing
+friction.label = Rate state ageing
+friction.min_slip_rate = 1.0e-14
 
 # Set the friction model parameters.
 #  reference coefficient of friction: 0.6

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension.cfg (from rev 19130, short/3D/PyLith/trunk/tests/2d/frictionslide/tension.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension.cfg	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,154 @@
+# -*- Conf -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [ypos_shear,ypos_axial,yneg_shear,yneg_axial]
+
+normalizer.length_scale = 1.0*mm
+
+[pylithapp.timedependent.implicit.time_step]
+total_time = 5.0*s
+dt = 1.0*s
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.bc]
+ypos_shear = pylith.bc.DirichletBC
+yneg_shear = pylith.bc.DirichletBC
+ypos_axial = pylith.bc.DirichletBC
+yneg_axial = pylith.bc.DirichletBC
+
+# Dirichlet BC on +y - SHEAR
+[pylithapp.timedependent.bc.ypos_shear]
+bc_dof = [0]
+label = ypos
+
+db_change = spatialdata.spatialdb.UniformDB
+db_change.label = Spatial variation of shear displacement on +y
+db_change.values = [displacement-x,change-start-time]
+db_change.data = [-8.888888888888889e-05*m, 0.0*s]
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Displacement time history on +y
+th_change.filename = tension_shear.timedb
+
+
+# Dirichlet BC on -y - SHEAR
+[pylithapp.timedependent.bc.yneg_shear]
+bc_dof = [0]
+label = yneg
+
+db_change = spatialdata.spatialdb.UniformDB
+db_change.label = Spatial variation of shear displacement on +y
+db_change.values = [displacement-x,change-start-time]
+db_change.data = [8.888888888888889e-05*m, 0.0*s]
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Displacement time history on -y
+th_change.filename = tension_shear.timedb
+
+
+# Dirichlet BC on +y - AXIAL
+[pylithapp.timedependent.bc.ypos_axial]
+bc_dof = [1]
+label = ypos
+
+db_change = spatialdata.spatialdb.UniformDB
+db_change.label = Spatial variation of axial displacement on +y
+db_change.values = [displacement-y,change-start-time]
+db_change.data = [2.96290870442297e-05*m, 0.0*s]
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Displacement time history on +y
+th_change.filename = tension_axial.timedb
+
+
+# Dirichlet BC on -y - AXIAL
+[pylithapp.timedependent.bc.yneg_axial]
+bc_dof = [1]
+label = yneg
+
+db_change = spatialdata.spatialdb.UniformDB
+db_change.label = Spatial variation of axial displacement on -y
+db_change.values = [displacement-y,change-start-time]
+db_change.data = [-2.96290870442297e-05*m, 0.0*s]
+
+th_change = spatialdata.spatialdb.TimeHistory
+th_change.label = Displacement time history on +y
+th_change.filename = tension_axial.timedb
+
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
+friction = pylith.friction.SlipWeakening
+friction.label = Slip weakening
+
+# Set slip-weakening friction model parameters using a uniform DB. Set the
+# parameters as follows:
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Slip weakening
+friction.db_properties.values = [static-coefficient,dynamic-coefficient,slip-weakening-parameter,cohesion]
+friction.db_properties.data = [0.6,0.0,1.0*mm,0.0*Pa]
+
+db_initial_tractions = spatialdata.spatialdb.UniformDB
+db_initial_tractions.label = Initial fault tractions
+db_initial_tractions.values = [traction-shear,traction-normal]
+db_initial_tractions.data = [0.0*MPa, -0.0*MPa]
+
+[pylithapp.timedependent.interfaces.fault.output]
+vertex_data_fields=[slip,slip_rate,traction]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Set filenames for output.
+[pylithapp.problem.formulation.output.output]
+writer.filename = output/tension.h5
+
+[pylithapp.timedependent.interfaces.fault.output]
+writer.filename = output/tension-fault.h5
+
+[pylithapp.timedependent.materials.elastic.output]
+writer.filename = output/tension-statevars.h5
+
+# ----------------------------------------------------------------------
+# PETSc
+# ----------------------------------------------------------------------
+[pylithapp.petsc]
+
+# Preconditioner settings.
+pc_type = asm
+sub_pc_factor_shift_type = nonzero
+
+# KSP
+ksp_rtol = 1.0e-12
+ksp_atol = 1.0e-15
+ksp_max_it = 50
+ksp_gmres_restart = 100
+
+ksp_monitor = true
+#ksp_view = true
+ksp_converged_reason = true
+
+# SNES
+snes_rtol = 1.0e-8
+snes_atol = 1.0e-12
+snes_max_it = 20
+
+snes_monitor = true
+#snes_view = true
+snes_converged_reason = true
+
+#log_summary = true
+
+# Friction
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+#friction_ksp_converged_reason = true
+

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_axial.timedb (from rev 19130, short/3D/PyLith/trunk/tests/2d/frictionslide/tension_axial.timedb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_axial.timedb	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_axial.timedb	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,11 @@
+#TIME HISTORY ascii
+TimeHistory {
+  num-points = 6
+  time-units = second
+}
+ 0.0  -5.0
+ 1.0  +7.0
+ 2.0  +7.0
+ 3.0  +9.0
+ 4.0  -5.0
+ 5.0  -5.0

Copied: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_shear.timedb (from rev 19130, short/3D/PyLith/trunk/tests/2d/frictionslide/tension_shear.timedb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_shear.timedb	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/tension_shear.timedb	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,11 @@
+#TIME HISTORY ascii
+TimeHistory {
+  num-points = 6
+  time-units = second
+}
+ 0.0  +8.0
+ 1.0  +8.0
+ 2.0  +4.0
+ 3.0  +4.0
+ 4.0  +4.0
+ 5.0  +5.0

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/velocitysteps.timedb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/velocitysteps.timedb	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/frictionslide/velocitysteps.timedb	2011-10-31 15:27:29 UTC (rev 19131)
@@ -5,8 +5,8 @@
 }
  0.0  0.0
  2.0  2.0e-6 // slip rate = 1.0e-6
- 4.0  4.2e-5 // slip rate = 2.0e-5
- 8.0  6.2e-05 // slip rate = 5.0e-6
-12.0  6.28e-05 // slip rate = 2.0e-7
-16.0  6.244e-05 // slip rate = 1.0e-8
-99.9  6.244e-05 // slip rate = 0
+ 4.0  2.2e-5 // slip rate = 1.0e-5
+ 6.0  3.0e-05 // slip rate = 4.0e-6
+ 8.0  7.0e-05 // slip rate = 2.0e-5
+12.0  9.0e-05 // slip rate = 5.0e-6
+22.0  1.0e-04 // slip rate = 1.0e-6

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir/pylithapp.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/2d/slipdir/pylithapp.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -29,11 +29,6 @@
 [pylithapp.timedependent]
 dimension = 2
 
-bc = [boundary]
-interfaces = [fault]
-
-materials = [elastic]
-
 [pylithapp.timedependent.formulation.time_step]
 total_time = 0.0*s
 dt = 1.0*s
@@ -41,14 +36,17 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
 [pylithapp.timedependent.materials]
 elastic = pylith.materials.ElasticPlaneStrain
 
 [pylithapp.timedependent.materials.elastic]
-
 label = Elastic material
 id = 1
 
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 quadrature.cell = pylith.feassemble.FIATLagrange
@@ -58,6 +56,9 @@
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [boundary]
+
 [pylithapp.timedependent.bc.boundary]
 
 bc_dof = [0,1]
@@ -66,6 +67,9 @@
 # ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
 [pylithapp.timedependent.interfaces.fault]
 
 id = 100
@@ -79,7 +83,10 @@
 
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
+slip.label = Final slip
 slip.iohandler.filename = slip.spatialdb
+
+slip_time.label = Slip time
 slip_time.iohandler.filename = sliptime.spatialdb
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -17,8 +17,10 @@
 #
 
 SUBDIRS = \
+	cyclicfriction \
 	matprops \
 	plasticity \
 	slipdir
 
+
 # End of file 

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

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir/pylithapp.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/3d/slipdir/pylithapp.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,19 +20,12 @@
 [pylithapp.mesh_generator]
 reader = pylith.meshio.MeshIOCubit
 
-[pylithapp.mesh_generator.reader]
-
 # ----------------------------------------------------------------------
 # problem
 # ----------------------------------------------------------------------
 [pylithapp.timedependent]
 dimension = 3
 
-bc = [boundary]
-interfaces = [fault]
-
-materials = [elastic]
-
 [pylithapp.timedependent.formulation.time_step]
 total_time = 0.0*s
 dt = 1.0*year
@@ -40,6 +33,9 @@
 # ----------------------------------------------------------------------
 # materials
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+materials = [elastic]
+
 [pylithapp.timedependent.materials]
 elastic = pylith.materials.ElasticIsotropic3D
 
@@ -48,6 +44,7 @@
 label = Elastic material
 id = 1
 
+db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
 quadrature.cell = pylith.feassemble.FIATSimplex
@@ -56,14 +53,20 @@
 # ----------------------------------------------------------------------
 # boundary conditions
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+bc = [boundary]
+
 [pylithapp.timedependent.bc.boundary]
 
-bc_dof = [0,2]
+bc_dof = [0,1,2]
 label = boundary_nofault
 
 # ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
+[pylithapp.timedependent]
+interfaces = [fault]
+
 [pylithapp.timedependent.interfaces.fault]
 
 id = 100
@@ -71,12 +74,16 @@
 
 quadrature.cell = pylith.feassemble.FIATSimplex
 quadrature.cell.shape = triangle
+quadrature.cell.quad_order = 2
 
 eq_srcs.rupture.slip_function = pylith.faults.StepSlipFn
 
 [pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
 
+slip.label = Final slip
 slip.iohandler.filename = slip.spatialdb
+
+slip_time.label = Slip time
 slip_time.iohandler.filename = sliptime.spatialdb
 
 # ----------------------------------------------------------------------
@@ -84,20 +91,39 @@
 # ----------------------------------------------------------------------
 [pylithapp.petsc]
 ksp_type = gmres
-pc_type = asm
 
-sub_pc_factor_shift_type = nonzero
-
 ksp_rtol = 1.0e-8
 ksp_atol = 1.0e-10
-ksp_max_it = 50
-ksp_gmres_restart = 25
+ksp_max_it = 100
+ksp_gmres_restart = 100
 
 ksp_monitor = true
 #ksp_view = true
 #log_summary = true
 
+[pylithapp.timedependent.formulation]
+split_fields = True
+matrix_type = aij
 
+[pylithapp.petsc]
+ksp_gmres_restart = 500
+fs_pc_type = fieldsplit
+fs_pc_fieldsplit_real_diagonal = 
+fs_pc_fieldsplit_type = multiplicative
+fs_fieldsplit_0_pc_type = ml
+fs_fieldsplit_1_pc_type = ml
+fs_fieldsplit_2_pc_type = ml
+fs_fieldsplit_3_pc_type = ml
+fs_fieldsplit_0_ksp_type = preonly
+fs_fieldsplit_1_ksp_type = preonly
+fs_fieldsplit_2_ksp_type = preonly
+fs_fieldsplit_3_ksp_type = preonly
+
+[pylithapp.timedependent.formulation]
+use_custom_constraint_pc = True
+
+
+
 # ----------------------------------------------------------------------
 # output
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests/topology/test_meshmem.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests/topology/test_meshmem.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests/topology/test_meshmem.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -134,7 +134,7 @@
 
       mesh = dmesh
       
-      
+
     # Refine mesh (if necessary)
     from pylith.topology.RefineUniform import RefineUniform
     refiner = RefineUniform()
@@ -157,6 +157,7 @@
 
 
   def _showStatus(self, stage):
+    import sys
     from pylith.utils.profiling import resourceUsageString
     from pylith.mpi.Communicator import petsc_comm_world
     comm = petsc_comm_world()
@@ -171,6 +172,7 @@
         print "\nPROCESSOR %d" % comm.rank
         print "\nStatus from ps: %s\n" % resourceUsageString()
         self.logger.show()
+        sys.stdout.flush()
 
       comm.barrier()
     return

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_compression.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_compression.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_compression.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,6 @@
 # ----------------------------------------------------------------------
 [friction_compression.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -46,7 +45,7 @@
 
 [friction_compression.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_opening.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_opening.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_opening.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,6 @@
 # ----------------------------------------------------------------------
 [friction_opening.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -55,7 +54,7 @@
 
 [friction_opening.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_sliding.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_sliding.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,6 @@
 # ----------------------------------------------------------------------
 [friction_shear_sliding.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -54,7 +53,7 @@
 
 [friction_shear_sliding.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_stick.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_stick.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_stick.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,6 @@
 # ----------------------------------------------------------------------
 [friction_shear_stick.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -51,7 +50,7 @@
 
 [friction_shear_stick.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------
@@ -67,7 +66,6 @@
 db_properties.label = Elastic properties
 db_properties.iohandler.filename = matprops.spatialdb
 
-# Set cell type to quadrilateral (2-d Lagrange).
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 2
 
@@ -121,34 +119,19 @@
 # ----------------------------------------------------------------------
 # faults
 # ----------------------------------------------------------------------
-# Provide information on the fault (interface).
 [friction_shear_stick.timedependent.interfaces]
 
 fault = pylith.faults.FaultCohesiveDyn
 
 # Define fault properties.
 [friction_shear_stick.timedependent.interfaces.fault]
-
-# The nodes associated with this fault have the name 'fault' in the mesh file.
 label = 10
 
-# NOTE: It is possible to assign an ID number to a fault (e.g.,
-# 'id = 10').  Care must be taken when doing this, however, because the
-# assigned ID will become the material ID for the cohesive element.
-# This ID must not conflict with any of the material ID numbers for
-# volume elements.  The default ID for a fault is 100.  If you have a
-# fault in your mesh you must:
-# 1.  If you create your own fault ID, make sure it does not conflict
-#     with any of you material ID's.
-# 2.  If you use the default fault ID, make sure that none of your
-#     material ID's are equal to 100.
-
-# The quadrature for a 2D fault is 1D with a linear shape.
 quadrature.cell = pylith.feassemble.FIATLagrange
 quadrature.cell.dimension = 1
 
 db_initial_tractions = spatialdata.spatialdb.UniformDB
-db_initial_tractions.label = "Initial fault tractions"
+db_initial_tractions.label = Initial fault tractions
 db_initial_tractions.values = [traction-shear,traction-normal]
 db_initial_tractions.data = [0.0*Pa, -10.0*MPa]
 
@@ -164,7 +147,6 @@
 [friction_shear_stick.petsc]
 pc_type = asm
 
-# Change the preconditioner settings.
 sub_pc_factor_shift_type = nonzero
 
 ksp_rtol = 1.0e-8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformrigidbody.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformrigidbody.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformrigidbody.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -83,7 +83,8 @@
 # Change the preconditioner settings.
 sub_pc_factor_shift_type = none
 
-ksp_rtol = 1.0e-8
+ksp_rtol = 1.0e-15
+ksp_atol = 1.0e-20
 ksp_max_it = 200
 ksp_gmres_restart = 100
 
@@ -91,6 +92,11 @@
 #ksp_view = true
 #ksp_converged_reason = true
 
+snes_rtol = 1.0e-12
+snes_atol = 1.0e-12
+ksp_max_it = 200
+ksp_gmres_restart = 100
+
 #snes_monitor = true
 #snes_view = true
 #snes_converged_reason = true

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/rigidbody_soln.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/rigidbody_soln.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/rigidbody_soln.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,11 +59,11 @@
   def displacement(self, locs):
     """
     Compute displacement field at locations.
-    """
-    u0 = 1000.0
-    v0 = 500.0
+    """ 
+    u0 = 200.0
+    v0 = 300.0
     from math import pi
-    theta = -30.0/180.0*pi
+    theta = -25.0/180.0*pi
 
     (npts, dim) = locs.shape
     disp = numpy.zeros( (npts, 3), dtype=numpy.float64)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_compression.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_compression.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_compression.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,6 @@
 # ----------------------------------------------------------------------
 [slipweakening_compression.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -46,7 +45,7 @@
 
 [slipweakening_compression.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_opening.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_opening.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_opening.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,6 @@
 # ----------------------------------------------------------------------
 [slipweakening_opening.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -50,7 +49,7 @@
 
 [slipweakening_opening.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,6 @@
 # ----------------------------------------------------------------------
 [slipweakening_shear_sliding.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -52,7 +51,7 @@
 
 [slipweakening_shear_sliding.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_stick.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_stick.cfg	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_stick.cfg	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,6 @@
 # ----------------------------------------------------------------------
 [slipweakening_shear_stick.timedependent]
 dimension = 2
-normalizer.length_scale = 1.0*m
 formulation = pylith.problems.Implicit
 formulation.solver = pylith.problems.SolverNonlinear
 
@@ -51,7 +50,7 @@
 
 [slipweakening_shear_stick.timedependent.formulation.time_step]
 total_time = 0.0*s
-dt = 1.0*s
+dt = 10.0*year
 
 
 # ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestAbsorbingDampers.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestAbsorbingDampers.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestAbsorbingDampers.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -138,13 +138,13 @@
   // Check damping constants
   const int numQuadPts = _data->numQuadPts;
   const int fiberDim = numQuadPts * spaceDim;
-  double_array dampersCell(fiberDim);
+  scalar_array dampersCell(fiberDim);
   int index = 0;
   CPPUNIT_ASSERT(0 != bc._parameters);
   const ALE::Obj<SubRealUniformSection>& dampersSection = 
     bc._parameters->section();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for(SieveSubMesh::label_sequence::iterator c_iter = cells->begin();
       c_iter != cells->end();
       ++c_iter) {
@@ -152,7 +152,7 @@
 				  &dampersCell[0], dampersCell.size());
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
       for (int iDim =0; iDim < spaceDim; ++iDim) {
-	const double dampersCellData = _data->dampingConsts[index];
+	const PylithScalar dampersCellData = _data->dampingConsts[index];
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
 				     dampersCell[iQuad*spaceDim+iDim]/dampersCellData,
 				     tolerance);
@@ -177,27 +177,27 @@
   const ALE::Obj<SieveSubMesh>& submesh = boundaryMesh.sieveMesh();
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 0.0;
+  const PylithScalar t = 0.0;
   bc.integrateResidual(residual, t, &fields);
 
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CPPUNIT_ASSERT(!sieveMesh->depthStratum(0).isNull());
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int totalNumVertices = sieveMesh->depthStratum(0)->size();
   const int sizeE = _data->spaceDim * totalNumVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
 
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   //residual->view("RESIDUAL");
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -229,14 +229,14 @@
 
   topology::Jacobian jacobian(solution);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   bc.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, bc.needNewJacobian());
   jacobian.assemble("final_assembly");
 
   CPPUNIT_ASSERT(!sieveMesh->depthStratum(0).isNull());
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int totalNumVertices = sieveMesh->depthStratum(0)->size();
   const int nrowsE = totalNumVertices * _data->spaceDim;
   const int ncolsE = totalNumVertices * _data->spaceDim;
@@ -253,7 +253,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -269,7 +269,7 @@
       std::cout << "  iRow: " << iRow << ", iCol: " << iCol << ", value: " << vals[i] << ", valueE: " << valsE[i] << std::endl;
 #endif
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -311,20 +311,20 @@
   const ALE::Obj<RealSection>& solutionSection = solution.section();
   CPPUNIT_ASSERT(!solutionSection.isNull());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   bc.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, bc.needNewJacobian());
   jacobian.complete();
 
-  const double* valsMatrixE = _data->valsJacobian;
+  const PylithScalar* valsMatrixE = _data->valsJacobian;
   const int totalNumVertices = sieveMesh->depthStratum(0)->size();
   const int sizeE = totalNumVertices * _data->spaceDim;
-  double_array valsE(sizeE);
+  scalar_array valsE(sizeE);
   const int spaceDim = _data->spaceDim;
   for (int iVertex=0; iVertex < totalNumVertices; ++iVertex)
     for (int iDim=0; iDim < spaceDim; ++iDim) {
       const int indexRow = (iVertex*spaceDim+iDim)*totalNumVertices*spaceDim;
-      double value = 0.0;
+      PylithScalar value = 0.0;
       for (int jVertex=0; jVertex < totalNumVertices; ++jVertex)
 	value += valsMatrixE[indexRow + jVertex*spaceDim+iDim];
       valsE[iVertex*spaceDim+iDim] = value;
@@ -343,11 +343,11 @@
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
-  const double* vals = jacobianSection->restrictSpace();
+  const PylithScalar* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -397,7 +397,7 @@
     db.ioHandler(&dbIO);
     db.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
 
-    const double upDir[] = { 0.0, 0.0, 1.0 };
+    const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
     bc->quadrature(_quadrature);
     bc->timeStep(_data->dt);
@@ -445,8 +445,8 @@
     CPPUNIT_ASSERT(!velSection.isNull());
     const int offset = numMeshCells;
     const int spaceDim = _data->spaceDim;
-    const double dt = _data->dt;
-    double_array velVertex(spaceDim);
+    const PylithScalar dt = _data->dt;
+    scalar_array velVertex(spaceDim);
     for (int iVertex=0; iVertex < totalNumVertices; ++iVertex) {
       dispTIncrSection->updatePoint(iVertex+offset, 
 				    &_data->fieldTIncr[iVertex*spaceDim]);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -102,12 +102,12 @@
     const int initialFiberDim = bc._parameters->sectionFiberDim("initial");
     CPPUNIT_ASSERT_EQUAL(numFixedDOF, initialFiberDim);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < numPoints; ++i) {
       const int p_value = _data->constrainedPoints[i]+offset;
       CPPUNIT_ASSERT_EQUAL(parametersFiberDim, 
 			   parametersSection->getFiberDimension(p_value));
-      const double* parametersVertex = 
+      const PylithScalar* parametersVertex = 
 	parametersSection->restrictPoint(p_value);
       CPPUNIT_ASSERT(parametersVertex);
       for (int iDOF=0; iDOF < numFixedDOF; ++iDOF) 
@@ -125,7 +125,7 @@
       const int p_value = _data->constrainedPoints[i]+offset;
       CPPUNIT_ASSERT_EQUAL(parametersFiberDim, 
 			   parametersSection->getFiberDimension(p_value));
-      const double* parametersVertex = 
+      const PylithScalar* parametersVertex = 
 	parametersSection->restrictPoint(p_value);
       CPPUNIT_ASSERT(parametersVertex);
       for (int iDOF=0; iDOF < numFixedDOF; ++iDOF) 
@@ -324,7 +324,7 @@
   field.allocate();
   bc.setConstraints(field);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // All values should be zero.
   field.zero();
@@ -339,7 +339,7 @@
   } // for
 
   // Only unconstrained values should be zero.
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   bc.setField(t, field);
 
   // Create list of unconstrained DOF at constrained DOF
@@ -380,7 +380,7 @@
       // check constrained DOF
       for (int iDOF=0; iDOF < numFixedDOF; ++iDOF) {
 	const int index = iConstraint * numFixedDOF + iDOF;
-	const double valueE = (t > _data->tRef) ?
+	const PylithScalar valueE = (t > _data->tRef) ?
 	  _data->valuesInitial[index] + (t-_data->tRef)*_data->valueRate :
 	  _data->valuesInitial[index];
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[_data->fixedDOF[iDOF]],
@@ -418,7 +418,7 @@
   field.allocate();
   bc.setConstraints(field);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // All values should be zero.
   field.zero();
@@ -433,8 +433,8 @@
   } // for
 
   // Only unconstrained values should be zero.
-  const double t0 = 1.0;
-  const double t1 = 2.0;
+  const PylithScalar t0 = 1.0;
+  const PylithScalar t1 = 2.0;
   bc.setFieldIncr(t0, t1, field);
 
   // Create list of unconstrained DOF at constrained DOF
@@ -475,7 +475,7 @@
       // check constrained DOF
       for (int iDOF=0; iDOF < numFixedDOF; ++iDOF) {
 	const int index = iConstraint * numFixedDOF + iDOF;
-	const double valueE = (t0 > _data->tRef) ? (t1-t0)*_data->valueRate :
+	const PylithScalar valueE = (t0 > _data->tRef) ? (t1-t0)*_data->valueRate :
 	  (t1 > _data->tRef) ? (t1-_data->tRef)*_data->valueRate : 0.0;
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[_data->fixedDOF[iDOF]],
 				     tolerance);
@@ -530,7 +530,7 @@
   };
   dbRate.setData(names, units, values, numValues);
 
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
   bc->label(_data->label);
   bc->dbInitial(&db);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCMulti.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCMulti.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCMulti.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -173,7 +173,7 @@
   bcB.setConstraints(field);
   bcC.setConstraints(field);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // All values should be zero.
   field.zero();
@@ -188,7 +188,7 @@
 
   // Only unconstrained values should be zero.
   // Expected values set in _data->field
-  const double t = 10.0;
+  const PylithScalar t = 10.0;
   bcA.setField(t, field);
   bcB.setField(t, field);
   bcC.setField(t, field);
@@ -239,7 +239,7 @@
   bcB.setConstraints(field);
   bcC.setConstraints(field);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // All values should be zero.
   field.zero();
@@ -254,8 +254,8 @@
 
   // Only unconstrained values should be zero.
   // Expected values set in _data->field
-  const double t0 = 10.0;
-  const double t1 = 14.0;
+  const PylithScalar t0 = 10.0;
+  const PylithScalar t1 = 14.0;
   bcA.setFieldIncr(t0, t1, field);
   bcB.setFieldIncr(t0, t1, field);
   bcC.setFieldIncr(t0, t1, field);
@@ -305,7 +305,7 @@
   dbIORate.filename(_data->dbFilenameARate);
   dbRate.ioHandler(&dbIORate);
 
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
   bcA->label(_data->labelA);
   bcA->dbInitial(&db);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBoundary.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBoundary.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBoundary.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -146,7 +146,7 @@
   };
   dbRate.setData(names, units, values, numValues);
 
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
   bc->label(_data->label);
   bc->dbInitial(&db);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestNeumann.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestNeumann.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestNeumann.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,51 +56,51 @@
 namespace pylith {
   namespace bc {
     namespace _TestNeumann {
-      const double pressureScale = 4.0;
-      const double lengthScale = 1.0; // Mesh coordinates have scale=1.0
-      const double timeScale = 0.5;
+      const PylithScalar pressureScale = 4.0;
+      const PylithScalar lengthScale = 1.0; // Mesh coordinates have scale=1.0
+      const PylithScalar timeScale = 0.5;
       const int ncells = 2;
       const int numQuadPts = 2;
       const int spaceDim = 2;
 
-      const double initial[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar initial[ncells*numQuadPts*spaceDim] = {
 	0.3,  0.4,    0.7,  0.6,
 	1.3,  1.4,    1.7,  1.6,
       };
-      const double rate[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar rate[ncells*numQuadPts*spaceDim] = {
 	-0.2,  -0.1,   0.4, 0.3,
 	-1.2,  -1.1,   1.4, 1.3,
       };
-      const double rateTime[ncells*numQuadPts] = {
+      const PylithScalar rateTime[ncells*numQuadPts] = {
 	0.5,   0.8,
 	0.6,   0.9,
       };
-      const double change[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar change[ncells*numQuadPts*spaceDim] = {
 	1.3,  1.4,    1.7,  1.6,
 	2.3,  2.4,    2.7,  2.6,
       };
-      const double changeTime[ncells*numQuadPts] = {
+      const PylithScalar changeTime[ncells*numQuadPts] = {
 	2.0,  2.4,
 	2.1,  2.5,
       };
 
-      const double tValue = 2.2;
-      const double valuesRate[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar tValue = 2.2;
+      const PylithScalar valuesRate[ncells*numQuadPts*spaceDim] = {
 	-0.34,  -0.17,  0.56,   0.42,
 	-1.92,  -1.76,  1.82,   1.69,
       };
-      const double valuesChange[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar valuesChange[ncells*numQuadPts*spaceDim] = {
 	1.3,  1.4,   0.0,  0.0,
 	2.3,  2.4,   0.0,  0.0,
       };
-      const double valuesChangeTH[ncells*numQuadPts*spaceDim] = {
+      const PylithScalar valuesChangeTH[ncells*numQuadPts*spaceDim] = {
 	1.3*0.98,  1.4*0.98,    0.0,  0.0,
 	2.3*0.99,  2.4*0.99,    0.0,  0.0,
       };
 
       // Check values in section against expected values.
       static
-      void _checkValues(const double* valuesE,
+      void _checkValues(const PylithScalar* valuesE,
 			const int fiberDimE,
 			const topology::Field<topology::SubMesh>& field);
     } // _TestNeumann
@@ -196,7 +196,7 @@
   // Check traction values
   const int numQuadPts = _data->numQuadPts;
   const int fiberDim = numQuadPts * spaceDim;
-  double_array tractionsCell(fiberDim);
+  scalar_array tractionsCell(fiberDim);
   int index = 0;
   CPPUNIT_ASSERT(0 != bc._parameters);
   const ALE::Obj<SubRealUniformSection>& parametersSection =
@@ -206,19 +206,19 @@
   const int initialIndex = bc._parameters->sectionIndex("initial");
   const int initialFiberDim = bc._parameters->sectionFiberDim("initial");
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for(SieveSubMesh::label_sequence::iterator c_iter = cells->begin();
       c_iter != cells->end();
       ++c_iter) {
     CPPUNIT_ASSERT_EQUAL(parametersFiberDim,
 			 parametersSection->getFiberDimension(*c_iter));
-    const double* parametersCell = parametersSection->restrictPoint(*c_iter);
+    const PylithScalar* parametersCell = parametersSection->restrictPoint(*c_iter);
     CPPUNIT_ASSERT(parametersCell);
     CPPUNIT_ASSERT(initialIndex + initialFiberDim <= parametersFiberDim);
-    const double* tractionsCell = &parametersCell[initialIndex];
+    const PylithScalar* tractionsCell = &parametersCell[initialIndex];
     for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
       for (int iDim =0; iDim < spaceDim; ++iDim) {
-	const double tractionsCellData = _data->tractionsCell[index];
+	const PylithScalar tractionsCellData = _data->tractionsCell[index];
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(tractionsCellData,
 				     tractionsCell[iQuad*spaceDim+iDim],
 				     tolerance);
@@ -241,27 +241,27 @@
   _initialize(&mesh, &bc, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 0.0;
+  const PylithScalar t = 0.0;
   bc.integrateResidual(residual, t, &fields);
 
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CPPUNIT_ASSERT(!sieveMesh->depthStratum(0).isNull());
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int totalNumVertices = sieveMesh->depthStratum(0)->size();
   const int sizeE = _data->spaceDim * totalNumVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
 
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   //residual.view("RESIDUAL");
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   // std::cout << "computed residuals: " << std::endl;
   for (int i=0; i < size; ++i)
     // std::cout << "  " << vals[i] << std::endl;
@@ -311,11 +311,11 @@
   bc.dbChange(&dbChange);
   bc.dbTimeHistory(&th);
 
-  const double pressureScale = _TestNeumann::pressureScale;
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar pressureScale = _TestNeumann::pressureScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -389,13 +389,13 @@
   bc.dbRate(&dbRate);
   bc.dbChange(&dbChange);
 
-  const double pressureScale = _TestNeumann::pressureScale;
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar pressureScale = _TestNeumann::pressureScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
-  const double upDir[3] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[3] = { 0.0, 0.0, 1.0 };
   bc._paramsLocalToGlobal(upDir);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -403,7 +403,7 @@
   // Orientation for quad4 is +x, -y for shear and normal tractions.
   CPPUNIT_ASSERT_EQUAL(2, spaceDim); 
   const int ncells = _TestNeumann::ncells;
-  double_array valuesE(ncells*numQuadPts*spaceDim);
+  scalar_array valuesE(ncells*numQuadPts*spaceDim);
   
   // Check initial values.
   for (int i=0; i < valuesE.size(); i+=spaceDim) {
@@ -457,11 +457,11 @@
 
   bc.dbInitial(&dbInitial);
 
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
   bc._calculateValue(_TestNeumann::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -495,11 +495,11 @@
 
   bc.dbRate(&dbRate);
 
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
   bc._calculateValue(_TestNeumann::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -533,11 +533,11 @@
 
   bc.dbChange(&dbChange);
 
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
   bc._calculateValue(_TestNeumann::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -576,11 +576,11 @@
   bc.dbChange(&dbChange);
   bc.dbTimeHistory(&th);
 
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
   bc._calculateValue(_TestNeumann::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
@@ -633,18 +633,18 @@
   bc.dbChange(&dbChange);
   bc.dbTimeHistory(&th);
 
-  const double timeScale = _TestNeumann::timeScale;
+  const PylithScalar timeScale = _TestNeumann::timeScale;
   bc._queryDatabases();
   bc._calculateValue(_TestNeumann::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _TestNeumann::spaceDim;
   const int numQuadPts = _TestNeumann::numQuadPts;
   CPPUNIT_ASSERT(0 != bc._parameters);
   
   // Check values.
   const int ncells = _TestNeumann::ncells;
-  double_array valuesE(ncells*numQuadPts*spaceDim);
+  scalar_array valuesE(ncells*numQuadPts*spaceDim);
   for (int i=0; i < valuesE.size(); ++i)
     valuesE[i] = 
       _TestNeumann::initial[i] +
@@ -727,7 +727,7 @@
     db.ioHandler(&dbIO);
     db.queryType(spatialdata::spatialdb::SimpleDB::LINEAR);
 
-    const double upDir[] = { 0.0, 0.0, 1.0 };
+    const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
     bc->dbInitial(&db);
     bc->initialize(*mesh, upDir);
@@ -752,7 +752,7 @@
 // ----------------------------------------------------------------------
 // Check values in section against expected values.
 void
-pylith::bc::_TestNeumann::_checkValues(const double* valuesE,
+pylith::bc::_TestNeumann::_checkValues(const PylithScalar* valuesE,
 					   const int fiberDimE,
 					   const topology::Field<topology::SubMesh>& field)
 { // _checkValues
@@ -766,14 +766,14 @@
   const ALE::Obj<SieveSubMesh::label_sequence>& cells = 
     submesh->heightStratum(1);
 
-  const double scale = field.scale();
+  const PylithScalar scale = field.scale();
 
   const size_t ncells = _TestNeumann::ncells;
   CPPUNIT_ASSERT_EQUAL(ncells, cells->size());
 
   // Check values associated with BC.
   int icell = 0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for(SieveSubMesh::label_sequence::iterator c_iter = cells->begin();
       c_iter != cells->end();
       ++c_iter, ++icell) {
@@ -781,7 +781,7 @@
     const int fiberDim = section->getFiberDimension(*c_iter);
     CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
     
-    const double* values = section->restrictPoint(*c_iter);
+    const PylithScalar* values = section->restrictPoint(*c_iter);
     for (int iDim=0; iDim < fiberDimE; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesE[icell*fiberDimE+iDim]/scale,
 				   values[iDim], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -113,7 +113,7 @@
   CPPUNIT_ASSERT(!parametersSection.isNull());
   const int parametersFiberDim = bc._parameters->fiberDim();
   
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // Check values
   const int initialIndex = bc._parameters->sectionIndex("initial");
@@ -125,7 +125,7 @@
 
     CPPUNIT_ASSERT_EQUAL(parametersFiberDim, 
 			 parametersSection->getFiberDimension(p_force));
-    const double* parametersVertex = parametersSection->restrictPoint(p_force);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(p_force);
     CPPUNIT_ASSERT(parametersVertex);
 
     for (int iDOF=0; iDOF < numForceDOF; ++iDOF) 
@@ -144,7 +144,7 @@
 
     CPPUNIT_ASSERT_EQUAL(parametersFiberDim, 
 			 parametersSection->getFiberDimension(p_force));
-    const double* parametersVertex = parametersSection->restrictPoint(p_force);
+    const PylithScalar* parametersVertex = parametersSection->restrictPoint(p_force);
     CPPUNIT_ASSERT(parametersVertex);
 
     for (int iDOF=0; iDOF < numForceDOF; ++iDOF) 
@@ -173,26 +173,26 @@
 
   topology::SolutionFields fields(mesh);
 
-  const double t = _data->tResidual;
+  const PylithScalar t = _data->tResidual;
   bc.integrateResidual(residual, t, &fields);
 
   const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
   CPPUNIT_ASSERT(!sieveMesh->depthStratum(0).isNull());
 
-  const double* valsE = _data->residual;
+  const PylithScalar* valsE = _data->residual;
   const int totalNumVertices = sieveMesh->depthStratum(0)->size();
   const int sizeE = spaceDim * totalNumVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   //residual.view("RESIDUAL");
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -259,7 +259,7 @@
     dbRate.setData(names, units, values, numValues);
   } // rate db
 
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
 
   bc->label(_data->label);
   bc->dbInitial(&dbInitial);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestTimeDependentPoints.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestTimeDependentPoints.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestTimeDependentPoints.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,9 +43,9 @@
 namespace pylith {
   namespace bc {
     namespace _TestTimeDependentPoints {
-      const double pressureScale = 4.0;
-      const double lengthScale = 1.5;
-      const double timeScale = 0.5;
+      const PylithScalar pressureScale = 4.0;
+      const PylithScalar lengthScale = 1.5;
+      const PylithScalar timeScale = 0.5;
       const int npointsIn = 2;
       const int pointsIn[npointsIn] = { 3, 5, };
       const int npointsOut = 2;
@@ -53,64 +53,64 @@
 
       const int numBCDOF = 2;
       const int bcDOF[numBCDOF] = { 1, 0 };
-      const double initial[npointsIn*numBCDOF] = {
+      const PylithScalar initial[npointsIn*numBCDOF] = {
 	0.3,  0.4,
 	0.7,  0.6,
       };
-      const double rate[npointsIn*numBCDOF] = {
+      const PylithScalar rate[npointsIn*numBCDOF] = {
 	-0.2,  -0.1,
 	 0.4,   0.3,
       };
-      const double rateTime[npointsIn] = {
+      const PylithScalar rateTime[npointsIn] = {
 	0.5,
 	0.8,
       };
-      const double change[npointsIn*numBCDOF] = {
+      const PylithScalar change[npointsIn*numBCDOF] = {
 	1.3,  1.4,
 	1.7,  1.6,
       };
-      const double changeTime[npointsIn] = {
+      const PylithScalar changeTime[npointsIn] = {
 	2.0,
 	2.4,
       };
 
-      const double tValue = 2.2;
-      const double tValue2 = 2.6;
-      const double valuesRate[npointsIn*numBCDOF] = {
+      const PylithScalar tValue = 2.2;
+      const PylithScalar tValue2 = 2.6;
+      const PylithScalar valuesRate[npointsIn*numBCDOF] = {
 	-0.34,  -0.17,
 	 0.56,   0.42,
       };
-      const double valuesChange[npointsIn*numBCDOF] = {
+      const PylithScalar valuesChange[npointsIn*numBCDOF] = {
 	1.3,  1.4,
 	0.0,  0.0,
       };
-      const double valuesChangeTH[npointsIn*numBCDOF] = {
+      const PylithScalar valuesChangeTH[npointsIn*numBCDOF] = {
 	1.3*0.98,  1.4*0.98,
 	0.0,  0.0,
       };
-      const double valuesIncrInitial[npointsIn*numBCDOF] = {
+      const PylithScalar valuesIncrInitial[npointsIn*numBCDOF] = {
 	0.0,  0.0,
 	0.0,  0.0,
       };
-      const double valuesIncrRate[npointsIn*numBCDOF] = {
+      const PylithScalar valuesIncrRate[npointsIn*numBCDOF] = {
 	-0.08,  -0.04,
 	 0.16,   0.12,
       };
-      const double valuesIncrChange[npointsIn*numBCDOF] = {
+      const PylithScalar valuesIncrChange[npointsIn*numBCDOF] = {
 	0.0,  0.0,
 	1.7,  1.6,
       };
-      const double valuesIncrChangeTH[npointsIn*numBCDOF] = {
+      const PylithScalar valuesIncrChangeTH[npointsIn*numBCDOF] = {
 	1.3*-0.04,  1.4*-0.04,
 	1.7*0.98,  1.6*0.98,
       };
 
       // Check values in section against expected values.
       static
-      void _checkValues(const double* valuesE,
+      void _checkValues(const PylithScalar* valuesE,
 			const int fiberDimE,
 			const ALE::Obj<RealSection>& section,
-			const double scale);
+			const PylithScalar scale);
     } // _TestTimeDependentPoints
   } // bc
 } // pylith
@@ -190,25 +190,25 @@
   CPPUNIT_ASSERT(_mesh);
   CPPUNIT_ASSERT(_bc);
 
-  spatialdata::spatialdb::SimpleDB dbInitial("TestTimeDependentPoints _queryDatabases");
+  spatialdata::spatialdb::SimpleDB dbInitial("TestTimeDependentPoints _queryDatabases initial");
   spatialdata::spatialdb::SimpleIOAscii dbInitialIO;
   dbInitialIO.filename("data/tri3_force.spatialdb");
   dbInitial.ioHandler(&dbInitialIO);
   dbInitial.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
 
-  spatialdata::spatialdb::SimpleDB dbRate("TestTimeDependentPoints _queryDatabases");
+  spatialdata::spatialdb::SimpleDB dbRate("TestTimeDependentPoints _queryDatabases rate");
   spatialdata::spatialdb::SimpleIOAscii dbRateIO;
   dbRateIO.filename("data/tri3_force_rate.spatialdb");
   dbRate.ioHandler(&dbRateIO);
   dbRate.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
 
-  spatialdata::spatialdb::SimpleDB dbChange("TestTimeDependentPoints _queryDatabases");
+  spatialdata::spatialdb::SimpleDB dbChange("TestTimeDependentPoints _queryDatabases change");
   spatialdata::spatialdb::SimpleIOAscii dbChangeIO;
   dbChangeIO.filename("data/tri3_force_change.spatialdb");
   dbChange.ioHandler(&dbChangeIO);
   dbChange.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
 
-  spatialdata::spatialdb::TimeHistory th("TestTimeDependentPoints _queryDatabases");
+  spatialdata::spatialdb::TimeHistory th("TestTimeDependentPoints _queryDatabases time history");
   th.filename("data/tri3_force.timedb");
 
   _bc->dbInitial(&dbInitial);
@@ -216,14 +216,14 @@
   _bc->dbChange(&dbChange);
   _bc->dbTimeHistory(&th);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -280,15 +280,15 @@
 
   _bc->dbInitial(&dbInitial);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
   _bc->_calculateValue(_TestTimeDependentPoints::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -316,15 +316,15 @@
 
   _bc->dbRate(&dbRate);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
   _bc->_calculateValue(_TestTimeDependentPoints::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -352,15 +352,15 @@
 
   _bc->dbChange(&dbChange);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
   _bc->_calculateValue(_TestTimeDependentPoints::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -391,15 +391,15 @@
   _bc->dbChange(&dbChange);
   _bc->dbTimeHistory(&th);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
   _bc->_calculateValue(_TestTimeDependentPoints::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -445,21 +445,21 @@
   _bc->dbChange(&dbChange);
   _bc->dbTimeHistory(&th);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
   _bc->_calculateValue(_TestTimeDependentPoints::tValue/timeScale);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
   // Check values.
   const int npoints = _TestTimeDependentPoints::npointsIn;
-  double_array valuesE(npoints*numBCDOF);
+  scalar_array valuesE(npoints*numBCDOF);
   for (int i=0; i < valuesE.size(); ++i)
     valuesE[i] = 
       _TestTimeDependentPoints::initial[i] +
@@ -489,17 +489,17 @@
 
   _bc->dbInitial(&dbInitial);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
-  const double t0 = _TestTimeDependentPoints::tValue / timeScale;
-  const double t1 = _TestTimeDependentPoints::tValue2 / timeScale;
+  const PylithScalar t0 = _TestTimeDependentPoints::tValue / timeScale;
+  const PylithScalar t1 = _TestTimeDependentPoints::tValue2 / timeScale;
   _bc->_calculateValueIncr(t0, t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -527,17 +527,17 @@
 
   _bc->dbRate(&dbRate);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
-  const double t0 = _TestTimeDependentPoints::tValue / timeScale;
-  const double t1 = _TestTimeDependentPoints::tValue2 / timeScale;
+  const PylithScalar t0 = _TestTimeDependentPoints::tValue / timeScale;
+  const PylithScalar t1 = _TestTimeDependentPoints::tValue2 / timeScale;
   _bc->_calculateValueIncr(t0, t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -565,17 +565,17 @@
 
   _bc->dbChange(&dbChange);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
-  const double t0 = _TestTimeDependentPoints::tValue / timeScale;
-  const double t1 = _TestTimeDependentPoints::tValue2 / timeScale;
+  const PylithScalar t0 = _TestTimeDependentPoints::tValue / timeScale;
+  const PylithScalar t1 = _TestTimeDependentPoints::tValue2 / timeScale;
   _bc->_calculateValueIncr(t0, t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -606,17 +606,17 @@
   _bc->dbChange(&dbChange);
   _bc->dbTimeHistory(&th);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
-  const double t0 = _TestTimeDependentPoints::tValue / timeScale;
-  const double t1 = _TestTimeDependentPoints::tValue2 / timeScale;
+  const PylithScalar t0 = _TestTimeDependentPoints::tValue / timeScale;
+  const PylithScalar t1 = _TestTimeDependentPoints::tValue2 / timeScale;
   _bc->_calculateValueIncr(t0, t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
@@ -662,23 +662,23 @@
   _bc->dbChange(&dbChange);
   _bc->dbTimeHistory(&th);
 
-  const double pressureScale = _TestTimeDependentPoints::pressureScale;
-  const double lengthScale = _TestTimeDependentPoints::lengthScale;
-  const double timeScale = _TestTimeDependentPoints::timeScale;
-  const double forceScale = pressureScale * lengthScale * lengthScale;
+  const PylithScalar pressureScale = _TestTimeDependentPoints::pressureScale;
+  const PylithScalar lengthScale = _TestTimeDependentPoints::lengthScale;
+  const PylithScalar timeScale = _TestTimeDependentPoints::timeScale;
+  const PylithScalar forceScale = pressureScale * lengthScale * lengthScale;
   const char* fieldName = "force";
   _bc->_queryDatabases(*_mesh, forceScale, fieldName);
-  const double t0 = _TestTimeDependentPoints::tValue / timeScale;
-  const double t1 = _TestTimeDependentPoints::tValue2 / timeScale;
+  const PylithScalar t0 = _TestTimeDependentPoints::tValue / timeScale;
+  const PylithScalar t1 = _TestTimeDependentPoints::tValue2 / timeScale;
   _bc->_calculateValueIncr(t0, t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int numBCDOF = _TestTimeDependentPoints::numBCDOF;
   CPPUNIT_ASSERT(_bc->_parameters);
   
   // Check values.
   const int npoints = _TestTimeDependentPoints::npointsIn;
-  double_array valuesE(npoints*numBCDOF);
+  scalar_array valuesE(npoints*numBCDOF);
   for (int i=0; i < valuesE.size(); ++i)
     valuesE[i] = 
       _TestTimeDependentPoints::valuesIncrInitial[i] +
@@ -695,14 +695,14 @@
 // ----------------------------------------------------------------------
 // Check values in section against expected values.
 void
-pylith::bc::_TestTimeDependentPoints::_checkValues(const double* valuesE,
+pylith::bc::_TestTimeDependentPoints::_checkValues(const PylithScalar* valuesE,
 						   const int fiberDimE,
 						   const ALE::Obj<RealSection>& section,
-						   const double scale)
+						   const PylithScalar scale)
 { // _checkValues
   CPPUNIT_ASSERT(!section.isNull());
   
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // Check values at points associated with BC.
   const int npointsIn = _TestTimeDependentPoints::npointsIn;
@@ -711,7 +711,7 @@
     const int fiberDim = section->getFiberDimension(p_bc);
     CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
 
-    const double* values = section->restrictPoint(p_bc);
+    const PylithScalar* values = section->restrictPoint(p_bc);
     CPPUNIT_ASSERT(values);
     for (int iDim=0; iDim < fiberDimE; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valuesE[i*fiberDimE+iDim]/scale,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_bc_absorbingdampersdata_hh)
 #define pylith_bc_absorbingdampersdata_hh
 
+#include "pylith/utils/types.hh" // USES PylithScalar
+
 namespace pylith {
   namespace bc {
      class AbsorbingDampersData;
@@ -46,10 +48,10 @@
   //@{
   int numBasis; ///< Number of basis functions for cell
   int numQuadPts; ///< Number of quadrature points
-  double* quadPts; ///< Coordinates of quad pts in ref cell
-  double* quadWts; ///< Weights of quadrature points
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDerivRef; ///< Derivatives of basis fns at quad pts
+  PylithScalar* quadPts; ///< Coordinates of quad pts in ref cell
+  PylithScalar* quadWts; ///< Weights of quadrature points
+  PylithScalar* basis; ///< Basis fns at quadrature points
+  PylithScalar* basisDerivRef; ///< Derivatives of basis fns at quad pts
   //@}
 
   /// @name Parameter information
@@ -61,10 +63,10 @@
 
   /// @name Input fields
   //@{
-  double dt; ///< Time step
-  double* fieldTIncr; ///< Input increment field for time to to t+dt.
-  double* fieldT; ///< Input field at time t.
-  double* fieldTmdt; ///< Input field at time t-dt.
+  PylithScalar dt; ///< Time step
+  PylithScalar* fieldTIncr; ///< Input increment field for time to to t+dt.
+  PylithScalar* fieldT; ///< Input field at time t.
+  PylithScalar* fieldTmdt; ///< Input field at time t-dt.
   //@}
 
   /// @name Boundary mesh information
@@ -79,9 +81,9 @@
 
   /// @name Calculated values.
   //@{
-  double* dampingConsts; ///< Expected values from initialization.
-  double* valsResidual; ///< Expected values from residual calculation.
-  double* valsJacobian; ///< Expected values from Jacobian calculation.
+  PylithScalar* dampingConsts; ///< Expected values from initialization.
+  PylithScalar* valsResidual; ///< Expected values from residual calculation.
+  PylithScalar* valsJacobian; ///< Expected values from Jacobian calculation.
   //@}
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,22 +23,22 @@
 
 const int pylith::bc::AbsorbingDampersDataHex8::_numBasis = 4;
 const int pylith::bc::AbsorbingDampersDataHex8::_numQuadPts = 4;
-const double pylith::bc::AbsorbingDampersDataHex8::_quadPts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_quadPts[] = {
   -0.57735027, -0.57735027,
    0.57735027, -0.57735027,
    0.57735027,  0.57735027,
   -0.57735027,  0.57735027,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_quadWts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_quadWts[] = {
   1.0, 1.0, 1.0, 1.0,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_basis[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_basis[] = {
   0.62200847,  0.16666667,  0.0446582,   0.16666667,
   0.16666667,  0.62200847,  0.16666667,  0.0446582,
   0.0446582,   0.16666667,  0.62200847,  0.16666667,
   0.16666667,  0.0446582,   0.16666667,  0.62200847,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_basisDerivRef[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_basisDerivRef[] = {
   -0.39433757, -0.39433757,
    0.39433757, -0.10566243,
    0.10566243,  0.10566243,
@@ -62,8 +62,8 @@
 const int pylith::bc::AbsorbingDampersDataHex8::_id = 2;
 const char* pylith::bc::AbsorbingDampersDataHex8::_label = "bc2";
 
-const double pylith::bc::AbsorbingDampersDataHex8::_dt =   0.25;
-const double pylith::bc::AbsorbingDampersDataHex8::_fieldTmdt[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_dt =   0.25;
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_fieldTmdt[] = {
   1.0,  2.4,  3.0,
   1.1,  2.2,  3.2,
   1.2,  2.0,  3.4,
@@ -77,7 +77,7 @@
   2.0,  0.4,  5.0,
   2.1,  0.2,  5.2,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_fieldT[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_fieldT[] = {
   1.1,  2.3,  3.2,
   1.3,  2.1,  3.6,
   1.5,  1.9,  4.0,
@@ -91,7 +91,7 @@
   3.1,  0.3,  7.2,
   3.3,  0.1,  7.6,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_fieldTIncr[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_fieldTIncr[] = {
   1.2,  1.1,  3.4,
   1.5,  1.0,  4.0,
   1.8,  0.9,  4.6,
@@ -117,7 +117,7 @@
 };
 
 
-const double pylith::bc::AbsorbingDampersDataHex8::_dampingConsts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_dampingConsts[] = {
   7.5e+06,  1.25e+07,  7.5e+06,
   7.5e+06,  1.25e+07,  7.5e+06,
   7.5e+06,  1.25e+07,  7.5e+06,
@@ -127,7 +127,7 @@
   7.5e+06,  1.25e+07,  7.5e+06,
   7.5e+06,  1.25e+07,  7.5e+06,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_valsResidual[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_valsResidual[] = {
    -1.77500004e+07,   -9.16666682e+06,   -4.30000010e+07,
     0.00000000e+00,    0.00000000e+00,    0.00000000e+00,
    -4.35000010e+07,   -1.50000003e+07,   -1.02000002e+08,
@@ -141,7 +141,7 @@
    -3.17500006e+07,   -3.33333343e+06,   -7.10000013e+07,
     0.00000000e+00,    0.00000000e+00,    0.00000000e+00,
 };
-const double pylith::bc::AbsorbingDampersDataHex8::_valsJacobian[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataHex8::_valsJacobian[] = {
   3.33333333e+06, 0.0, 0.0, // 0x
   0.0, 0.0, 0.0,
   1.66666667e+06, 0.0, 0.0, // 2
@@ -582,19 +582,19 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
 
   dt = _dt;
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
 
   spaceDim = _spaceDim;
   cellDim = _cellDim;
@@ -603,9 +603,9 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  dampingConsts = const_cast<double*>(_dampingConsts);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  dampingConsts = const_cast<PylithScalar*>(_dampingConsts);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::bc::AbsorbingDampersDataHex8::~AbsorbingDampersDataHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,19 +44,19 @@
 
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   static const char* _spatialDBFilename;
   static const int _id;
   static const char* _label;
 
-  static const double _dt;
-  static const double _fieldTIncr[];
-  static const double _fieldT[];
-  static const double _fieldTmdt[];
+  static const PylithScalar _dt;
+  static const PylithScalar _fieldTIncr[];
+  static const PylithScalar _fieldT[];
+  static const PylithScalar _fieldTmdt[];
 
   static const int _spaceDim;
   static const int _cellDim;
@@ -65,9 +65,9 @@
   static const int _numCorners;
   static const int _cells[];
 
-  static const double _dampingConsts[];
-  static const double _valsResidual[];
-  static const double _valsJacobian[];
+  static const PylithScalar _dampingConsts[];
+  static const PylithScalar _valsResidual[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,16 +23,16 @@
 
 const int pylith::bc::AbsorbingDampersDataLine2::_numBasis = 1;
 const int pylith::bc::AbsorbingDampersDataLine2::_numQuadPts = 1;
-const double pylith::bc::AbsorbingDampersDataLine2::_quadPts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_quadPts[] = {
   0.0,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_quadWts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_quadWts[] = {
   1.0,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_basis[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_basis[] = {
   1.0,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_basisDerivRef[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_basisDerivRef[] = {
   1.0,
 };
 
@@ -40,18 +40,18 @@
 const int pylith::bc::AbsorbingDampersDataLine2::_id = 2;
 const char* pylith::bc::AbsorbingDampersDataLine2::_label = "bc0";
 
-const double pylith::bc::AbsorbingDampersDataLine2::_dt =   0.25;
-const double pylith::bc::AbsorbingDampersDataLine2::_fieldTmdt[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_dt =   0.25;
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_fieldTmdt[] = {
   1.0,
   1.1,
   1.2,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_fieldT[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_fieldT[] = {
   1.1,
   1.3,
   1.5,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_fieldTIncr[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_fieldTIncr[] = {
   1.2,
   1.5,
   1.8,
@@ -68,16 +68,16 @@
 };
 
 
-const double pylith::bc::AbsorbingDampersDataLine2::_dampingConsts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_dampingConsts[] = {
   12.5e+6,
   17.5e+6,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_valsResidual[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_valsResidual[] = {
   -12.5e+6*(1.1+1.2-1.0)/0.5,
   0.0,
   -17.5e+6*(1.5+1.8-1.2)/0.5,
 };
-const double pylith::bc::AbsorbingDampersDataLine2::_valsJacobian[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataLine2::_valsJacobian[] = {
   12.5e+6/0.5, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 17.5e+6/0.5,
@@ -89,19 +89,19 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
 
   dt = _dt;
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
 
   spaceDim = _spaceDim;
   cellDim = _cellDim;
@@ -110,9 +110,9 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  dampingConsts = const_cast<double*>(_dampingConsts);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  dampingConsts = const_cast<PylithScalar*>(_dampingConsts);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::bc::AbsorbingDampersDataLine2::~AbsorbingDampersDataLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,19 +44,19 @@
 
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   static const char* _spatialDBFilename;
   static const int _id;
   static const char* _label;
 
-  static const double _dt;
-  static const double _fieldTIncr[];
-  static const double _fieldT[];
-  static const double _fieldTmdt[];
+  static const PylithScalar _dt;
+  static const PylithScalar _fieldTIncr[];
+  static const PylithScalar _fieldT[];
+  static const PylithScalar _fieldTmdt[];
 
   static const int _spaceDim;
   static const int _cellDim;
@@ -65,9 +65,9 @@
   static const int _numCorners;
   static const int _cells[];
 
-  static const double _dampingConsts[];
-  static const double _valsResidual[];
-  static const double _valsJacobian[];
+  static const PylithScalar _dampingConsts[];
+  static const PylithScalar _valsResidual[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,17 +23,17 @@
 
 const int pylith::bc::AbsorbingDampersDataQuad4::_numBasis = 2;
 const int pylith::bc::AbsorbingDampersDataQuad4::_numQuadPts = 1;
-const double pylith::bc::AbsorbingDampersDataQuad4::_quadPts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_quadPts[] = {
   0.0,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_quadWts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_quadWts[] = {
   2.0,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_basis[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_basis[] = {
   0.5,
   0.5,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_basisDerivRef[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_basisDerivRef[] = {
   -0.5,
    0.5,
 };
@@ -42,8 +42,8 @@
 const int pylith::bc::AbsorbingDampersDataQuad4::_id = 2;
 const char* pylith::bc::AbsorbingDampersDataQuad4::_label = "bc2";
 
-const double pylith::bc::AbsorbingDampersDataQuad4::_dt =   0.25;
-const double pylith::bc::AbsorbingDampersDataQuad4::_fieldTmdt[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_dt =   0.25;
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_fieldTmdt[] = {
   1.0,  2.4,
   1.1,  1.8,
   1.2,  2.4,
@@ -51,7 +51,7 @@
   1.4,  2.4,
   1.5,  1.6,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_fieldT[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_fieldT[] = {
   1.1,  2.0,
   1.3,  2.1,
   1.5,  2.2,
@@ -59,7 +59,7 @@
   1.9,  2.4,
   2.1,  2.5,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_fieldTIncr[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_fieldTIncr[] = {
   1.2,  1.6,
   1.5,  2.4,
   1.8,  2.0,
@@ -79,11 +79,11 @@
 };
 
 
-const double pylith::bc::AbsorbingDampersDataQuad4::_dampingConsts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_dampingConsts[] = {
   1.25e+07, 7.5e+06,
   1.25e+07, 7.5e+06,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_valsResidual[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_valsResidual[] = {
   -3.75000000e+07,   -2.92500000e+07,
   -3.75000000e+07,   -2.92500000e+07,
   0.0, 0.0, 
@@ -91,7 +91,7 @@
   -7.75000000e+07,   -5.02500000e+07,
   -7.75000000e+07,   -5.02500000e+07,
 };
-const double pylith::bc::AbsorbingDampersDataQuad4::_valsJacobian[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataQuad4::_valsJacobian[] = {
   1.25e+07, 0.0, // 0x
   1.25e+07, 0.0,
   0.0, 0.0,
@@ -172,19 +172,19 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
 
   dt = _dt;
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
 
   spaceDim = _spaceDim;
   cellDim = _cellDim;
@@ -193,9 +193,9 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  dampingConsts = const_cast<double*>(_dampingConsts);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  dampingConsts = const_cast<PylithScalar*>(_dampingConsts);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::bc::AbsorbingDampersDataQuad4::~AbsorbingDampersDataQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,19 +44,19 @@
 
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   static const char* _spatialDBFilename;
   static const int _id;
   static const char* _label;
 
-  static const double _dt;
-  static const double _fieldTIncr[];
-  static const double _fieldT[];
-  static const double _fieldTmdt[];
+  static const PylithScalar _dt;
+  static const PylithScalar _fieldTIncr[];
+  static const PylithScalar _fieldT[];
+  static const PylithScalar _fieldTmdt[];
 
   static const int _spaceDim;
   static const int _cellDim;
@@ -65,9 +65,9 @@
   static const int _numCorners;
   static const int _cells[];
 
-  static const double _dampingConsts[];
-  static const double _valsResidual[];
-  static const double _valsJacobian[];
+  static const PylithScalar _dampingConsts[];
+  static const PylithScalar _valsResidual[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,18 +23,18 @@
 
 const int pylith::bc::AbsorbingDampersDataTet4::_numBasis = 3;
 const int pylith::bc::AbsorbingDampersDataTet4::_numQuadPts = 1;
-const double pylith::bc::AbsorbingDampersDataTet4::_quadPts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_quadPts[] = {
   -0.3333333333333333, -0.3333333333333333
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_quadWts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_quadWts[] = {
   2.0,
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_basis[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_basis[] = {
   0.3333333333333333,
   0.3333333333333333,
   0.3333333333333333,
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_basisDerivRef[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_basisDerivRef[] = {
  -0.5, -0.5,
   0.5,  0.0,
   0.0,  0.5,
@@ -45,20 +45,20 @@
 const int pylith::bc::AbsorbingDampersDataTet4::_id = 2;
 const char* pylith::bc::AbsorbingDampersDataTet4::_label = "bc2";
 
-const double pylith::bc::AbsorbingDampersDataTet4::_dt =   0.25;
-const double pylith::bc::AbsorbingDampersDataTet4::_fieldTmdt[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_dt =   0.25;
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_fieldTmdt[] = {
   1.0,  2.4,  3.0,
   1.1,  1.8,  3.2,
   1.2,  2.4,  3.4,
   1.3,  2.2,  3.6
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_fieldT[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_fieldT[] = {
   1.1,  2.0,  3.2,
   1.3,  2.1,  3.6,
   1.5,  2.2,  4.0,
   1.7,  2.3,  4.4,
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_fieldTIncr[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_fieldTIncr[] = {
   1.2,  1.6,  3.4,
   1.5,  2.4,  4.0,
   1.8,  2.0,  4.6,
@@ -75,17 +75,17 @@
 };
 
 
-const double pylith::bc::AbsorbingDampersDataTet4::_dampingConsts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_dampingConsts[] = {
   1.25e+07,  7.5e+06,  7.5e+06
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_valsResidual[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_valsResidual[] = {
   -8.19444444e+06, -4.58333333e+06, -1.23333333e+07,
   0.0,              0.0,             0.0,
   -8.19444444e+06, -4.58333333e+06, -1.23333333e+07,
   -8.19444444e+06, -4.58333333e+06, -1.23333333e+07,
   0.0,              0.0,             0.0,  
 };
-const double pylith::bc::AbsorbingDampersDataTet4::_valsJacobian[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTet4::_valsJacobian[] = {
   1.38888889e+06, 0.0, 0.0, // 0x
   0.0, 0.0, 0.0,
   1.38888889e+06, 0.0, 0.0,
@@ -169,19 +169,19 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
 
   dt = _dt;
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
 
   spaceDim = _spaceDim;
   cellDim = _cellDim;
@@ -190,9 +190,9 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  dampingConsts = const_cast<double*>(_dampingConsts);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  dampingConsts = const_cast<PylithScalar*>(_dampingConsts);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::bc::AbsorbingDampersDataTet4::~AbsorbingDampersDataTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,19 +44,19 @@
 
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   static const char* _spatialDBFilename;
   static const int _id;
   static const char* _label;
 
-  static const double _dt;
-  static const double _fieldTIncr[];
-  static const double _fieldT[];
-  static const double _fieldTmdt[];
+  static const PylithScalar _dt;
+  static const PylithScalar _fieldTIncr[];
+  static const PylithScalar _fieldT[];
+  static const PylithScalar _fieldTmdt[];
 
   static const int _spaceDim;
   static const int _cellDim;
@@ -65,9 +65,9 @@
   static const int _numCorners;
   static const int _cells[];
 
-  static const double _dampingConsts[];
-  static const double _valsResidual[];
-  static const double _valsJacobian[];
+  static const PylithScalar _dampingConsts[];
+  static const PylithScalar _valsResidual[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,17 +23,17 @@
 
 const int pylith::bc::AbsorbingDampersDataTri3::_numBasis = 2;
 const int pylith::bc::AbsorbingDampersDataTri3::_numQuadPts = 1;
-const double pylith::bc::AbsorbingDampersDataTri3::_quadPts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_quadPts[] = {
   0.0,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_quadWts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_quadWts[] = {
   2.0,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_basis[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_basis[] = {
   0.5,
   0.5,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_basisDerivRef[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_basisDerivRef[] = {
   -0.5,
    0.5,
 };
@@ -43,20 +43,20 @@
 const int pylith::bc::AbsorbingDampersDataTri3::_id = 2;
 const char* pylith::bc::AbsorbingDampersDataTri3::_label = "bc";
 
-const double pylith::bc::AbsorbingDampersDataTri3::_dt =   0.25;
-const double pylith::bc::AbsorbingDampersDataTri3::_fieldTmdt[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_dt =   0.25;
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_fieldTmdt[] = {
   1.0,  2.4,
   1.1,  1.8,
   1.2,  2.4,
   1.3,  2.2,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_fieldT[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_fieldT[] = {
   1.1,  2.0,
   1.3,  2.1,
   1.5,  2.2,
   1.7,  2.3,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_fieldTIncr[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_fieldTIncr[] = {
   1.2,  1.6,
   1.5,  2.4,
   1.8,  2.0,
@@ -73,16 +73,16 @@
 };
 
 
-const double pylith::bc::AbsorbingDampersDataTri3::_dampingConsts[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_dampingConsts[] = {
   1.41421356e+07,  3.53553391e+06
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_valsResidual[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_valsResidual[] = {
   0.0, 0.0,
   -4.20000000e+07,   -1.30000000e+07,
   0.0, 0.0,
   -4.20000000e+07,   -1.30000000e+07,
 };
-const double pylith::bc::AbsorbingDampersDataTri3::_valsJacobian[] = {
+const PylithScalar pylith::bc::AbsorbingDampersDataTri3::_valsJacobian[] = {
   0.0, 0.0, // 0x
   0.0, 0.0,
   0.0, 0.0,
@@ -123,19 +123,19 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
   label = const_cast<char*>(_label);
 
   dt = _dt;
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
 
   spaceDim = _spaceDim;
   cellDim = _cellDim;
@@ -144,9 +144,9 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  dampingConsts = const_cast<double*>(_dampingConsts);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  dampingConsts = const_cast<PylithScalar*>(_dampingConsts);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::bc::AbsorbingDampersDataTri3::~AbsorbingDampersDataTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,19 +44,19 @@
 
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   static const char* _spatialDBFilename;
   static const int _id;
   static const char* _label;
 
-  static const double _dt;
-  static const double _fieldTIncr[];
-  static const double _fieldT[];
-  static const double _fieldTmdt[];
+  static const PylithScalar _dt;
+  static const PylithScalar _fieldTIncr[];
+  static const PylithScalar _fieldT[];
+  static const PylithScalar _fieldTmdt[];
 
   static const int _spaceDim;
   static const int _cellDim;
@@ -65,9 +65,9 @@
   static const int _numCorners;
   static const int _cells[];
 
-  static const double _dampingConsts[];
-  static const double _valsResidual[];
-  static const double _valsJacobian[];
+  static const PylithScalar _dampingConsts[];
+  static const PylithScalar _valsResidual[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_bc_dirichletdata_hh)
 #define pylith_bc_dirichletdata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace bc {
      class DirichletData;
@@ -40,8 +42,8 @@
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public:
 
-  double tRef; ///< Reference time for rate of change of values
-  double valueRate; ///< Rate of change of value at constrained points.
+  PylithScalar tRef; ///< Reference time for rate of change of values
+  PylithScalar valueRate; ///< Rate of change of value at constrained points.
 
   int numDOF; ///< Number of degrees of freedom at each point.
   int numFixedDOF; ///< Number of fixedDOF at constrained points.
@@ -52,7 +54,7 @@
 
   int* fixedDOF; ///< Degrees of freedom that are constrained at each point
   int* constrainedPoints; ///< Array of indices of constrained points.
-  double* valuesInitial; ///< Values at constrained points.
+  PylithScalar* valuesInitial; ///< Values at constrained points.
 
   char* meshFilename; ///< Filename for input mesh.
   char* dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,9 +45,9 @@
 const int pylith::bc::DirichletDataHex8::_numConstrainedPts = 4;
 const int pylith::bc::DirichletDataHex8::_constrainedPoints[] = { 0, 1, 6, 7 };
 
-const double pylith::bc::DirichletDataHex8::_tRef = 0.2;
-const double pylith::bc::DirichletDataHex8::_valueRate = 0.4;
-const double pylith::bc::DirichletDataHex8::_valuesInitial[] = {
+const PylithScalar pylith::bc::DirichletDataHex8::_tRef = 0.2;
+const PylithScalar pylith::bc::DirichletDataHex8::_valueRate = 0.4;
+const PylithScalar pylith::bc::DirichletDataHex8::_valuesInitial[] = {
   -0.2, 0.3,
    0.1, 0.7,
    0.5, 0.4,
@@ -73,7 +73,7 @@
 
   numConstrainedPts = _numConstrainedPts;
   constrainedPoints = const_cast<int*>(_constrainedPoints);
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valuesInitial[]; ///< Initial values.
-  static const double _valueRate; ///< Rate of change of values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _valueRate; ///< Rate of change of values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,9 +44,9 @@
 const int pylith::bc::DirichletDataLine2::_numConstrainedPts = 2;
 const int pylith::bc::DirichletDataLine2::_constrainedPoints[] = { 0, 2 };
 
-const double pylith::bc::DirichletDataLine2::_tRef = 0.6;
-const double pylith::bc::DirichletDataLine2::_valueRate = 0.3;
-const double pylith::bc::DirichletDataLine2::_valuesInitial[] =
+const PylithScalar pylith::bc::DirichletDataLine2::_tRef = 0.6;
+const PylithScalar pylith::bc::DirichletDataLine2::_valueRate = 0.3;
+const PylithScalar pylith::bc::DirichletDataLine2::_valuesInitial[] =
   { 1.1, 2.2 };
 
 const char* pylith::bc::DirichletDataLine2::_meshFilename = 
@@ -68,7 +68,7 @@
 
   tRef = _tRef;
   valueRate = _valueRate;
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valueRate; ///< Rate of change of values.
-  static const double _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valueRate; ///< Rate of change of values.
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,9 +36,9 @@
 const int pylith::bc::DirichletDataLine2b::_numConstrainedPts = 2;
 const int pylith::bc::DirichletDataLine2b::_constrainedPoints[] = { 0, 2 };
 
-const double pylith::bc::DirichletDataLine2b::_tRef = -0.2;
-const double pylith::bc::DirichletDataLine2b::_valueRate = 1.0;
-const double pylith::bc::DirichletDataLine2b::_valuesInitial[] = {0};
+const PylithScalar pylith::bc::DirichletDataLine2b::_tRef = -0.2;
+const PylithScalar pylith::bc::DirichletDataLine2b::_valueRate = 1.0;
+const PylithScalar pylith::bc::DirichletDataLine2b::_valuesInitial[] = {0};
 
 const char* pylith::bc::DirichletDataLine2b::_meshFilename = 
   "data/line2.mesh";
@@ -59,7 +59,7 @@
 
   tRef = _tRef;
   valueRate = _valueRate;
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataLine2b.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valueRate; ///< Rate of change of values.
-  static const double _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valueRate; ///< Rate of change of values.
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMulti.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMulti.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMulti.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_bc_dirichletdatamulti_hh)
 #define pylith_bc_dirichletdatamulti_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace bc {
      class DirichletDataMulti;
@@ -51,7 +53,7 @@
   int* constrainedPointsA; ///< Array of indices of constrained points.
   char* dbFilenameA; ///< Filename for db with initial values.
   char* dbFilenameARate; ///< Filename for db with rate of change of values.
-  double tRefA; ///< Reference time for rate of change of values.
+  PylithScalar tRefA; ///< Reference time for rate of change of values.
   //@}
 
   //@{ Boundary condition B
@@ -63,7 +65,7 @@
   int* constrainedPointsB; ///< Array of indices of constrained points.
   char* dbFilenameB; ///< Filename for db with initial values.
   char* dbFilenameBRate; ///< Filename for db with rate of change of values.
-  double tRefB; ///< Reference time for rate of change of values.
+  PylithScalar tRefB; ///< Reference time for rate of change of values.
   //@}
 
   //@{ Boundary condition C
@@ -75,11 +77,11 @@
   int* constrainedPointsC; ///< Array of indices of constrained points.
   char* dbFilenameC; ///< Filename for db with initial values.
   char* dbFilenameCRate; ///< Filename for db with rate of change of values.
-  double tRefC; ///< Reference time for rate of change of values.
+  PylithScalar tRefC; ///< Reference time for rate of change of values.
   //@}
 
-  double* field; ///< Values in field
-  double* fieldIncr; ///< Increment values in field
+  PylithScalar* field; ///< Values in field
+  PylithScalar* fieldIncr; ///< Increment values in field
   int* constraintSizes; ///< Number of constrained DOF at each vertex
   int* constrainedDOF; ///< Indices of constrained DOF at each constrained vertex
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -78,7 +78,7 @@
   "data/tet4_disp2.spatialdb";
 const char* pylith::bc::DirichletDataMultiTet4::_dbFilenameARate =
   "data/tet4_vel2.spatialdb";
-const double pylith::bc::DirichletDataMultiTet4::_tRefA = 0.0;
+const PylithScalar pylith::bc::DirichletDataMultiTet4::_tRefA = 0.0;
 
 const int pylith::bc::DirichletDataMultiTet4::_idB = 1;
 const char* pylith::bc::DirichletDataMultiTet4::_labelB = "bc2";
@@ -91,7 +91,7 @@
   "data/tet4_disp2.spatialdb";
 const char* pylith::bc::DirichletDataMultiTet4::_dbFilenameBRate =
   "data/tet4_vel2.spatialdb";
-const double pylith::bc::DirichletDataMultiTet4::_tRefB = 0.0;
+const PylithScalar pylith::bc::DirichletDataMultiTet4::_tRefB = 0.0;
 
 const int pylith::bc::DirichletDataMultiTet4::_idC = 1;
 const char* pylith::bc::DirichletDataMultiTet4::_labelC = "bc3";
@@ -104,7 +104,7 @@
   "data/tet4_disp2.spatialdb";
 const char* pylith::bc::DirichletDataMultiTet4::_dbFilenameCRate =
   "data/tet4_vel2.spatialdb";
-const double pylith::bc::DirichletDataMultiTet4::_tRefC = 0.0;
+const PylithScalar pylith::bc::DirichletDataMultiTet4::_tRefC = 0.0;
 
 const int pylith::bc::DirichletDataMultiTet4::_constraintSizes[] = {
   2,
@@ -123,7 +123,7 @@
 };
 
 // Values at t=10.0
-const double pylith::bc::DirichletDataMultiTet4::_field[] = {
+const PylithScalar pylith::bc::DirichletDataMultiTet4::_field[] = {
   10.1, 0.0, -9.99,
    0.0, 111.0, 0.0,
   20.2, 222.0, -19.98,
@@ -132,7 +132,7 @@
 };
 
 // Increment values from t=10.0 to t=14.0
-const double pylith::bc::DirichletDataMultiTet4::_fieldIncr[] = {
+const PylithScalar pylith::bc::DirichletDataMultiTet4::_fieldIncr[] = {
    4.0,   0.0,  -4.0,
    0.0,  40.0,   0.0,
    8.0,  80.0,  -8.0,
@@ -180,8 +180,8 @@
   dbFilenameCRate = const_cast<char*>(_dbFilenameCRate);
   tRefC = _tRefC;
 
-  field = const_cast<double*>(_field);
-  fieldIncr = const_cast<double*>(_fieldIncr);
+  field = const_cast<PylithScalar*>(_field);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
   constraintSizes = const_cast<int*>(_constraintSizes);
   constrainedDOF = const_cast<int*>(_constrainedDOF);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
   static const int _constrainedPointsA[]; ///< Array of indices of constrained pts.
   static const char* _dbFilenameA; ///< Filename for db of initial values.
   static const char* _dbFilenameARate; ///< Filename for db of rate of change.
-  static const double _tRefA; ///< Reference time for rate of change.
+  static const PylithScalar _tRefA; ///< Reference time for rate of change.
 
   static const int _numFixedDOFB; ///< Number of fixedDOF at constrained points.
   static const int _numConstrainedPtsB; ///< Number of points constrained.
@@ -62,7 +62,7 @@
   static const int _constrainedPointsB[]; ///< Array of indices of constrained pts.
   static const char* _dbFilenameB; ///< Filename for db of initial values.
   static const char* _dbFilenameBRate; ///< Filename for db of rate of change.
-  static const double _tRefB; ///< Reference time for rate of change.
+  static const PylithScalar _tRefB; ///< Reference time for rate of change.
 
   static const int _numFixedDOFC; ///< Number of fixedDOF at constrained points.
   static const int _numConstrainedPtsC; ///< Number of points constrained.
@@ -72,10 +72,10 @@
   static const int _constrainedPointsC[]; ///< Array of indices of constrained pts.
   static const char* _dbFilenameC; ///< Filename for db of initial values.
   static const char* _dbFilenameCRate; ///< Filename for db of rate of change.
-  static const double _tRefC; ///< Reference time for rate of change.
+  static const PylithScalar _tRefC; ///< Reference time for rate of change.
 
-  static const double _field[]; ///< Values in field
-  static const double _fieldIncr[]; ///< Increment values in field
+  static const PylithScalar _field[]; ///< Values in field
+  static const PylithScalar _fieldIncr[]; ///< Increment values in field
   static const int _constraintSizes[]; ///< Number of constrained DOF at each vertex
   static const int _constrainedDOF[]; ///< Indices of constrained DOF at each constrained vertex
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,7 +58,7 @@
   "data/tri3_disp.spatialdb";
 const char* pylith::bc::DirichletDataMultiTri3::_dbFilenameARate =
   "data/tri3_vel.spatialdb";
-const double pylith::bc::DirichletDataMultiTri3::_tRefA = 3.2;
+const PylithScalar pylith::bc::DirichletDataMultiTri3::_tRefA = 3.2;
 
 const int pylith::bc::DirichletDataMultiTri3::_idB = 1;
 const char* pylith::bc::DirichletDataMultiTri3::_labelB = "bc2";
@@ -71,7 +71,7 @@
   "data/tri3_disp2.spatialdb";
 const char* pylith::bc::DirichletDataMultiTri3::_dbFilenameBRate =
   "data/tri3_vel2.spatialdb";
-const double pylith::bc::DirichletDataMultiTri3::_tRefB = 0.4;
+const PylithScalar pylith::bc::DirichletDataMultiTri3::_tRefB = 0.4;
 
 const int pylith::bc::DirichletDataMultiTri3::_constraintSizes[] = {
   0,
@@ -87,7 +87,7 @@
 };
 
 // Values at t=10.0
-const double pylith::bc::DirichletDataMultiTri3::_field[] = {
+const PylithScalar pylith::bc::DirichletDataMultiTri3::_field[] = {
   0.0, 0.0,
   0.0, 1.66,
   -2.94, 0.0,
@@ -95,7 +95,7 @@
 };
 
 // Values from t=10.0 to t=14.0.
-const double pylith::bc::DirichletDataMultiTri3::_fieldIncr[] = {
+const PylithScalar pylith::bc::DirichletDataMultiTri3::_fieldIncr[] = {
   0.0, 0.0,
   0.0, 0.8,
  -1.6, 0.0,
@@ -131,8 +131,8 @@
   dbFilenameBRate = const_cast<char*>(_dbFilenameBRate);
   tRefB = _tRefB;
 
-  field = const_cast<double*>(_field);
-  fieldIncr = const_cast<double*>(_fieldIncr);
+  field = const_cast<PylithScalar*>(_field);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
   constraintSizes = const_cast<int*>(_constraintSizes);
   constrainedDOF = const_cast<int*>(_constrainedDOF);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataMultiTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,7 +52,7 @@
   static const int _constrainedPointsA[]; ///< Array of indices of constrained pts.
   static const char* _dbFilenameA; ///< Filename for db of initial values.
   static const char* _dbFilenameARate; ///< Filename for db of rate of change.
-  static const double _tRefA; ///< Reference time for rate of change.
+  static const PylithScalar _tRefA; ///< Reference time for rate of change.
 
   static const int _numFixedDOFB; ///< Number of fixedDOF at constrained points.
   static const int _numConstrainedPtsB; ///< Number of points constrained.
@@ -62,10 +62,10 @@
   static const int _constrainedPointsB[]; ///< Array of indices of constrained pts.
   static const char* _dbFilenameB; ///< Filename for db of initial values.
   static const char* _dbFilenameBRate; ///< Filename for db of rate of change.
-  static const double _tRefB; ///< Reference time for rate of change.
+  static const PylithScalar _tRefB; ///< Reference time for rate of change.
 
-  static const double _field[]; ///< Values in field
-  static const double _fieldIncr[]; ///< Increment values in field
+  static const PylithScalar _field[]; ///< Values in field
+  static const PylithScalar _fieldIncr[]; ///< Increment values in field
   static const int _constraintSizes[]; ///< Number of constrained DOF at each vertex
   static const int _constrainedDOF[]; ///< Indices of constrained DOF at each constrained vertex
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,9 +43,9 @@
 const int pylith::bc::DirichletDataQuad4::_numConstrainedPts = 3;
 const int pylith::bc::DirichletDataQuad4::_constrainedPoints[] = { 0, 2, 4 };
 
-const double pylith::bc::DirichletDataQuad4::_tRef = 3.0;
-const double pylith::bc::DirichletDataQuad4::_valueRate = -0.5;
-const double pylith::bc::DirichletDataQuad4::_valuesInitial[] =
+const PylithScalar pylith::bc::DirichletDataQuad4::_tRef = 3.0;
+const PylithScalar pylith::bc::DirichletDataQuad4::_valueRate = -0.5;
+const PylithScalar pylith::bc::DirichletDataQuad4::_valuesInitial[] =
   { 0.1, 0.6, 0.5, 0.3, 0.4, 0.2 };
 
 const char* pylith::bc::DirichletDataQuad4::_meshFilename = 
@@ -67,7 +67,7 @@
 
   tRef = _tRef;
   valueRate = _valueRate;
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valueRate; ///< Rate of change of values.
-  static const double _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valueRate; ///< Rate of change of values.
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,9 +44,9 @@
 const int pylith::bc::DirichletDataTet4::_constrainedPoints[] = { 1, 2, 3 };
 
 
-const double pylith::bc::DirichletDataTet4::_tRef = 1.2;
-const double pylith::bc::DirichletDataTet4::_valueRate = 4.0;
-const double pylith::bc::DirichletDataTet4::_valuesInitial[] = {
+const PylithScalar pylith::bc::DirichletDataTet4::_tRef = 1.2;
+const PylithScalar pylith::bc::DirichletDataTet4::_valueRate = 4.0;
+const PylithScalar pylith::bc::DirichletDataTet4::_valuesInitial[] = {
   0.7, 0.2,
   0.7, 0.2,
   0.7, 0.2,
@@ -71,7 +71,7 @@
 
   tRef = _tRef;
   valueRate = _valueRate;
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valueRate; ///< Rate of change of values.
-  static const double _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valueRate; ///< Rate of change of values.
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 const int pylith::bc::DirichletDataTri3::_numConstrainedPts = 2;
 const int pylith::bc::DirichletDataTri3::_constrainedPoints[] = { 1, 3 };
 
-const double pylith::bc::DirichletDataTri3::_tRef = 0.7;
-const double pylith::bc::DirichletDataTri3::_valueRate = -0.2;
-const double pylith::bc::DirichletDataTri3::_valuesInitial[] =
+const PylithScalar pylith::bc::DirichletDataTri3::_tRef = 0.7;
+const PylithScalar pylith::bc::DirichletDataTri3::_valueRate = -0.2;
+const PylithScalar pylith::bc::DirichletDataTri3::_valuesInitial[] =
   { 0.3, 0.7 };
 
 const char* pylith::bc::DirichletDataTri3::_meshFilename = 
@@ -66,7 +66,7 @@
 
   tRef = _tRef;
   valueRate = _valueRate;
-  valuesInitial = const_cast<double*>(_valuesInitial);
+  valuesInitial = const_cast<PylithScalar*>(_valuesInitial);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/DirichletDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,9 +53,9 @@
   static const int _fixedDOF[]; ///< Degrees of freedom constrained at points
 
   static const int _constrainedPoints[]; ///< Array of indices of constrained pts.
-  static const double _tRef; ///< Reference time for rate of change of value
-  static const double _valueRate; ///< Rate of change of values.
-  static const double _valuesInitial[]; ///< Initial values.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of value
+  static const PylithScalar _valueRate; ///< Rate of change of values.
+  static const PylithScalar _valuesInitial[]; ///< Initial values.
 
   static const char* _meshFilename; ///< Filename of input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_bc_neumanndata_hh)
 #define pylith_bc_neumanndata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace bc {
      class NeumannData;
@@ -46,10 +48,10 @@
   //@{
   int numBasis; ///< Number of basis functions for surface cells.
   int numQuadPts; ///< Number of quadrature points per boundary cell.
-  double* quadPts; ///< Coordinates of quadrature points in ref cell.
-  double* quadWts; ///< Weights of quadrature points.
-  double* basis; ///< Cell basis functions at quad points.
-  double* basisDerivRef; ///< Derivatives of basis functions at quad points.
+  PylithScalar* quadPts; ///< Coordinates of quadrature points in ref cell.
+  PylithScalar* quadWts; ///< Weights of quadrature points.
+  PylithScalar* basis; ///< Cell basis functions at quad points.
+  PylithScalar* basisDerivRef; ///< Derivatives of basis functions at quad points.
   //@}
 
   /// @name Parameter information
@@ -71,8 +73,8 @@
 
   /// @name Calculated values.
   //@{
-  double* tractionsCell; ///< Expected traction values at quadrature points.
-  double* valsResidual; ///< Expected residual at each vertex.
+  PylithScalar* tractionsCell; ///< Expected traction values at quadrature points.
+  PylithScalar* valsResidual; ///< Expected residual at each vertex.
   //@}
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -34,22 +34,22 @@
 
 const int pylith::bc::NeumannDataHex8::_numBasis = 4;
 const int pylith::bc::NeumannDataHex8::_numQuadPts = 4;
-const double pylith::bc::NeumannDataHex8::_quadPts[] = {
+const PylithScalar pylith::bc::NeumannDataHex8::_quadPts[] = {
   -0.57735027, -0.57735027,
   +0.57735027, -0.57735027,
   +0.57735027, +0.57735027,
   -0.57735027, +0.57735027,
 };
-const double pylith::bc::NeumannDataHex8::_quadWts[] = {
+const PylithScalar pylith::bc::NeumannDataHex8::_quadWts[] = {
   1.0, 1.0, 1.0, 1.0
 };
-const double pylith::bc::NeumannDataHex8::_basis[] = {
+const PylithScalar pylith::bc::NeumannDataHex8::_basis[] = {
   0.62200847,  0.16666667,  0.0446582,   0.16666667,
   0.16666667,  0.62200847,  0.16666667,   0.0446582,
   0.0446582,   0.16666667,  0.62200847,  0.16666667,
   0.16666667,   0.0446582,  0.16666667,  0.62200847,
 };
-const double pylith::bc::NeumannDataHex8::_basisDerivRef[] = {
+const PylithScalar pylith::bc::NeumannDataHex8::_basisDerivRef[] = {
   -0.39433757, -0.39433757,
   +0.39433757, -0.10566243,
   +0.10566243, +0.10566243,
@@ -86,7 +86,7 @@
   8, 6, 10, 12,
 };
 
-const double pylith::bc::NeumannDataHex8::_tractionsCell[] = { 4.0, 0.0, 0.0,
+const PylithScalar pylith::bc::NeumannDataHex8::_tractionsCell[] = { 4.0, 0.0, 0.0,
 							       4.0, 0.0, 0.0,
 							       4.0, 0.0, 0.0,
 							       4.0, 0.0, 0.0,
@@ -94,7 +94,7 @@
 							       4.0, 0.0, 0.0,
 							       4.0, 0.0, 0.0,
 							       4.0, 0.0, 0.0};
-const double pylith::bc::NeumannDataHex8::_valsResidual[] = { 4.0, 0.0, 0.0,
+const PylithScalar pylith::bc::NeumannDataHex8::_valsResidual[] = { 4.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0,
 							      4.0, 0.0, 0.0,
 							      0.0, 0.0, 0.0,
@@ -114,10 +114,10 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
@@ -130,8 +130,8 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  tractionsCell = const_cast<double*>(_tractionsCell);
-  valsResidual = const_cast<double*>(_valsResidual);
+  tractionsCell = const_cast<PylithScalar*>(_tractionsCell);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
 
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,10 +47,10 @@
   // Quadrature information
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   // BC information
   static const char* _spatialDBFilename;
@@ -66,8 +66,8 @@
   static const int _cells[];
 
   // Calculated values.
-  static const double _tractionsCell[];
-  static const double _valsResidual[];
+  static const PylithScalar _tractionsCell[];
+  static const PylithScalar _valsResidual[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,16 +32,16 @@
 
 const int pylith::bc::NeumannDataLine2::_numBasis = 1;
 const int pylith::bc::NeumannDataLine2::_numQuadPts = 1;
-const double pylith::bc::NeumannDataLine2::_quadPts[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_quadPts[] = {
   0.0,
 };
-const double pylith::bc::NeumannDataLine2::_quadWts[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_quadWts[] = {
   1.0,
 };
-const double pylith::bc::NeumannDataLine2::_basis[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_basis[] = {
   1.0,
 };
-const double pylith::bc::NeumannDataLine2::_basisDerivRef[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_basisDerivRef[] = {
   1.0,
 };
 
@@ -59,10 +59,10 @@
   2,
 };
 
-const double pylith::bc::NeumannDataLine2::_tractionsCell[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_tractionsCell[] = {
   1.0,
 };
-const double pylith::bc::NeumannDataLine2::_valsResidual[] = {
+const PylithScalar pylith::bc::NeumannDataLine2::_valsResidual[] = {
   1.0,
   0.0,
   0.0,
@@ -75,10 +75,10 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
@@ -91,8 +91,8 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  tractionsCell = const_cast<double*>(_tractionsCell);
-  valsResidual = const_cast<double*>(_valsResidual);
+  tractionsCell = const_cast<PylithScalar*>(_tractionsCell);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
 
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,10 +47,10 @@
   // Quadrature information
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   // BC information
   static const char* _spatialDBFilename;
@@ -66,8 +66,8 @@
   static const int _cells[];
 
   // Calculated values.
-  static const double _tractionsCell[];
-  static const double _valsResidual[];
+  static const PylithScalar _tractionsCell[];
+  static const PylithScalar _valsResidual[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,21 +42,21 @@
 
 const int pylith::bc::NeumannDataQuad4::_numBasis = 2;
 const int pylith::bc::NeumannDataQuad4::_numQuadPts = 2;
-const double pylith::bc::NeumannDataQuad4::_quadPts[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_quadPts[] = {
   -0.57735027,
    0.57735027,
 };
-const double pylith::bc::NeumannDataQuad4::_quadWts[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_quadWts[] = {
   1.0,
   1.0,
 };
-const double pylith::bc::NeumannDataQuad4::_basis[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_basis[] = {
   0.78867513459,
   0.21132486541,
   0.21132486541,
   0.78867513459,
 };
-const double pylith::bc::NeumannDataQuad4::_basisDerivRef[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_basisDerivRef[] = {
  -0.5,
   0.5,
  -0.5,
@@ -78,13 +78,13 @@
   4, 6,
 };
 
-const double pylith::bc::NeumannDataQuad4::_tractionsCell[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_tractionsCell[] = {
   0.0, -0.1056624327,
   0.0, -0.3943375673,
   0.0, -0.6056624327,
   0.0, -0.8943375673,
 };
-const double pylith::bc::NeumannDataQuad4::_valsResidual[] = {
+const PylithScalar pylith::bc::NeumannDataQuad4::_valsResidual[] = {
   0.0, -0.08333333333,
   0.0,  0.0,
   0.0, -0.5,
@@ -100,10 +100,10 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
@@ -116,8 +116,8 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  tractionsCell = const_cast<double*>(_tractionsCell);
-  valsResidual = const_cast<double*>(_valsResidual);
+  tractionsCell = const_cast<PylithScalar*>(_tractionsCell);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
 
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,10 +47,10 @@
   // Quadrature information
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   // BC information
   static const char* _spatialDBFilename;
@@ -66,8 +66,8 @@
   static const int _cells[];
 
   // Calculated values.
-  static const double _tractionsCell[];
-  static const double _valsResidual[];
+  static const PylithScalar _tractionsCell[];
+  static const PylithScalar _valsResidual[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,18 +41,18 @@
 
 const int pylith::bc::NeumannDataTet4::_numBasis = 3;
 const int pylith::bc::NeumannDataTet4::_numQuadPts = 1;
-const double pylith::bc::NeumannDataTet4::_quadPts[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_quadPts[] = {
   -0.3333333333333333, -0.3333333333333333
 };
-const double pylith::bc::NeumannDataTet4::_quadWts[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_quadWts[] = {
   2.0,
 };
-const double pylith::bc::NeumannDataTet4::_basis[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_basis[] = {
   0.3333333333333333,
   0.3333333333333333,
   0.3333333333333333,
 };
-const double pylith::bc::NeumannDataTet4::_basisDerivRef[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_basisDerivRef[] = {
  -0.5, -0.5,
   0.5,  0.0,
   0.0,  0.5,
@@ -72,10 +72,10 @@
   3, 4, 5,
 };
 
-const double pylith::bc::NeumannDataTet4::_tractionsCell[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_tractionsCell[] = {
   -0.5380048025,  0.87620875991,  1.3938468501
 };
-const double pylith::bc::NeumannDataTet4::_valsResidual[] = {
+const PylithScalar pylith::bc::NeumannDataTet4::_valsResidual[] = {
   0.0,               0.0,               0.0,
   -1.5530860877e-01,  2.529396817e-01,  4.0236892706e-01,
   -1.5530860877e-01,  2.529396817e-01,  4.0236892706e-01,
@@ -90,10 +90,10 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
@@ -106,8 +106,8 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  tractionsCell = const_cast<double*>(_tractionsCell);
-  valsResidual = const_cast<double*>(_valsResidual);
+  tractionsCell = const_cast<PylithScalar*>(_tractionsCell);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
 
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,10 +47,10 @@
   // Quadrature information
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   // BC information
   static const char* _spatialDBFilename;
@@ -66,8 +66,8 @@
   static const int _cells[];
 
   // Calculated values.
-  static const double _tractionsCell[];
-  static const double _valsResidual[];
+  static const PylithScalar _tractionsCell[];
+  static const PylithScalar _valsResidual[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,17 +38,17 @@
 
 const int pylith::bc::NeumannDataTri3::_numBasis = 2;
 const int pylith::bc::NeumannDataTri3::_numQuadPts = 1;
-const double pylith::bc::NeumannDataTri3::_quadPts[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_quadPts[] = {
   0.0,
 };
-const double pylith::bc::NeumannDataTri3::_quadWts[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_quadWts[] = {
   2.0,
 };
-const double pylith::bc::NeumannDataTri3::_basis[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_basis[] = {
   0.5,
   0.5,
 };
-const double pylith::bc::NeumannDataTri3::_basisDerivRef[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_basisDerivRef[] = {
  -0.5,
   0.5,
 };
@@ -67,10 +67,10 @@
   3,  5,
 };
 
-const double pylith::bc::NeumannDataTri3::_tractionsCell[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_tractionsCell[] = {
   1.4142135624,  0.0,
 };
-const double pylith::bc::NeumannDataTri3::_valsResidual[] = {
+const PylithScalar pylith::bc::NeumannDataTri3::_valsResidual[] = {
   0.0,  0.0,
   1.0,  0.0,
   0.0,  0.0,
@@ -84,10 +84,10 @@
 
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
 
   spatialDBFilename = const_cast<char*>(_spatialDBFilename);
   id = _id;
@@ -100,8 +100,8 @@
   numCorners = _numCorners;
   cells = const_cast<int*>(_cells);
 
-  tractionsCell = const_cast<double*>(_tractionsCell);
-  valsResidual = const_cast<double*>(_valsResidual);
+  tractionsCell = const_cast<PylithScalar*>(_tractionsCell);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
 
 } // constructor
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,10 +47,10 @@
   // Quadrature information
   static const int _numBasis;
   static const int _numQuadPts;
-  static const double _quadPts[];
-  static const double _quadWts[];
-  static const double _basis[];
-  static const double _basisDerivRef[];
+  static const PylithScalar _quadPts[];
+  static const PylithScalar _quadWts[];
+  static const PylithScalar _basis[];
+  static const PylithScalar _basisDerivRef[];
 
   // BC information
   static const char* _spatialDBFilename;
@@ -66,8 +66,8 @@
   static const int _cells[];
 
   // Calculated values.
-  static const double _tractionsCell[];
-  static const double _valsResidual[];
+  static const PylithScalar _tractionsCell[];
+  static const PylithScalar _valsResidual[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_bc_pointforcedata_hh)
 #define pylith_bc_pointforcedata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace bc {
      class PointForceData;
@@ -40,9 +42,9 @@
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public:
 
-  double tRef; ///< Reference time for rate of change of forces.
-  double forceRate; ///< Rate of change of force.
-  double tResidual; ///< Time for computing residual.
+  PylithScalar tRef; ///< Reference time for rate of change of forces.
+  PylithScalar forceRate; ///< Rate of change of force.
+  PylithScalar tResidual; ///< Time for computing residual.
 
   int numDOF; ///< Number of degrees of freedom at each point.
   int numForceDOF; ///< Number of forces at points.
@@ -53,8 +55,8 @@
 
   int* forceDOF; ///< Degrees of freedom that are constrained at each point
   int* forcePoints; ///< Array of indices of points with forces.
-  double* forceInitial; ///< Forces at points.
-  double* residual; ///< Residual field.
+  PylithScalar* forceInitial; ///< Forces at points.
+  PylithScalar* residual; ///< Residual field.
 
   char* meshFilename; ///< Filename for input mesh.
   char* dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,17 +45,17 @@
 const int pylith::bc::PointForceDataHex8::_numForcePts = 4;
 const int pylith::bc::PointForceDataHex8::_forcePoints[] = { 0, 1, 6, 7 };
 
-const double pylith::bc::PointForceDataHex8::_tRef = 0.2;
-const double pylith::bc::PointForceDataHex8::_forceRate = 0.4;
-const double pylith::bc::PointForceDataHex8::_forceInitial[] = {
+const PylithScalar pylith::bc::PointForceDataHex8::_tRef = 0.2;
+const PylithScalar pylith::bc::PointForceDataHex8::_forceRate = 0.4;
+const PylithScalar pylith::bc::PointForceDataHex8::_forceInitial[] = {
   -0.2, 0.3,
    0.1, 0.7,
    0.5, 0.4,
    3.2, 6.1,
 };
 
-const double pylith::bc::PointForceDataHex8::_tResidual = 0.45;
-const double pylith::bc::PointForceDataHex8::_residual[] = {
+const PylithScalar pylith::bc::PointForceDataHex8::_tResidual = 0.45;
+const PylithScalar pylith::bc::PointForceDataHex8::_residual[] = {
  -0.1, 0.0, 0.4, 
   0.2, 0.0, 0.8, 
   0.0, 0.0, 0.0, 
@@ -89,10 +89,10 @@
 
   tRef = _tRef;
   forceRate = _forceRate;
-  forceInitial = const_cast<double*>(_forceInitial);
+  forceInitial = const_cast<PylithScalar*>(_forceInitial);
 
   tResidual = _tResidual;
-  residual = const_cast<double*>(_residual);
+  residual = const_cast<PylithScalar*>(_residual);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
-  static const double _tRef; ///< Reference time for rate of change of forces.
-  static const double _forceRate; ///< Rate of change of force.
-  static const double _tResidual; ///< Time for computing residual.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of forces.
+  static const PylithScalar _forceRate; ///< Rate of change of force.
+  static const PylithScalar _tResidual; ///< Time for computing residual.
 
   static const int _numDOF; ///< Number of degrees of freedom at each point.
   static const int _numForceDOF; ///< Number of forces at points.
@@ -55,8 +55,8 @@
 
   static const int _forceDOF[]; ///< Degrees of freedom that are constrained at each point
   static const int _forcePoints[]; ///< Array of indices of points with forces.
-  static const double _forceInitial[]; ///< Forces at points.
-  static const double _residual[]; ///< Residual field.
+  static const PylithScalar _forceInitial[]; ///< Forces at points.
+  static const PylithScalar _residual[]; ///< Residual field.
 
   static const char* _meshFilename; ///< Filename for input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,13 +43,13 @@
 const int pylith::bc::PointForceDataLine2::_numForcePts = 2;
 const int pylith::bc::PointForceDataLine2::_forcePoints[] = { 0, 2 };
 
-const double pylith::bc::PointForceDataLine2::_tRef = 0.6;
-const double pylith::bc::PointForceDataLine2::_forceRate = 0.3;
-const double pylith::bc::PointForceDataLine2::_forceInitial[] =
+const PylithScalar pylith::bc::PointForceDataLine2::_tRef = 0.6;
+const PylithScalar pylith::bc::PointForceDataLine2::_forceRate = 0.3;
+const PylithScalar pylith::bc::PointForceDataLine2::_forceInitial[] =
   { 1.1, 2.2 };
 
-const double pylith::bc::PointForceDataLine2::_tResidual = 1.5;
-const double pylith::bc::PointForceDataLine2::_residual[] =
+const PylithScalar pylith::bc::PointForceDataLine2::_tResidual = 1.5;
+const PylithScalar pylith::bc::PointForceDataLine2::_residual[] =
   { 1.37,
     0.0,
     2.47,
@@ -74,10 +74,10 @@
 
   tRef = _tRef;
   forceRate = _forceRate;
-  forceInitial = const_cast<double*>(_forceInitial);
+  forceInitial = const_cast<PylithScalar*>(_forceInitial);
 
   tResidual = _tResidual;
-  residual = const_cast<double*>(_residual);
+  residual = const_cast<PylithScalar*>(_residual);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
-  static const double _tRef; ///< Reference time for rate of change of forces.
-  static const double _forceRate; ///< Rate of change of force.
-  static const double _tResidual; ///< Time for computing residual.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of forces.
+  static const PylithScalar _forceRate; ///< Rate of change of force.
+  static const PylithScalar _tResidual; ///< Time for computing residual.
 
   static const int _numDOF; ///< Number of degrees of freedom at each point.
   static const int _numForceDOF; ///< Number of forces at points.
@@ -55,8 +55,8 @@
 
   static const int _forceDOF[]; ///< Degrees of freedom that are constrained at each point
   static const int _forcePoints[]; ///< Array of indices of points with forces.
-  static const double _forceInitial[]; ///< Forces at points.
-  static const double _residual[]; ///< Residual field.
+  static const PylithScalar _forceInitial[]; ///< Forces at points.
+  static const PylithScalar _residual[]; ///< Residual field.
 
   static const char* _meshFilename; ///< Filename for input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,16 +43,16 @@
 const int pylith::bc::PointForceDataQuad4::_numForcePts = 3;
 const int pylith::bc::PointForceDataQuad4::_forcePoints[] = { 0, 2, 4 };
 
-const double pylith::bc::PointForceDataQuad4::_tRef = 3.0;
-const double pylith::bc::PointForceDataQuad4::_forceRate = -0.5;
-const double pylith::bc::PointForceDataQuad4::_forceInitial[] =
+const PylithScalar pylith::bc::PointForceDataQuad4::_tRef = 3.0;
+const PylithScalar pylith::bc::PointForceDataQuad4::_forceRate = -0.5;
+const PylithScalar pylith::bc::PointForceDataQuad4::_forceInitial[] =
   { 0.1, 0.6,
     0.5, 0.3,
     0.4, 0.2,
   };
 
-const double pylith::bc::PointForceDataQuad4::_tResidual = 4.5;
-const double pylith::bc::PointForceDataQuad4::_residual[] =
+const PylithScalar pylith::bc::PointForceDataQuad4::_tResidual = 4.5;
+const PylithScalar pylith::bc::PointForceDataQuad4::_residual[] =
   { -0.65, -0.15,
      0.0, 0.0,
     -0.25, -0.45,
@@ -80,10 +80,10 @@
 
   tRef = _tRef;
   forceRate = _forceRate;
-  forceInitial = const_cast<double*>(_forceInitial);
+  forceInitial = const_cast<PylithScalar*>(_forceInitial);
 
   tResidual = _tResidual;
-  residual = const_cast<double*>(_residual);
+  residual = const_cast<PylithScalar*>(_residual);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
-  static const double _tRef; ///< Reference time for rate of change of forces.
-  static const double _forceRate; ///< Rate of change of force.
-  static const double _tResidual; ///< Time for computing residual.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of forces.
+  static const PylithScalar _forceRate; ///< Rate of change of force.
+  static const PylithScalar _tResidual; ///< Time for computing residual.
 
   static const int _numDOF; ///< Number of degrees of freedom at each point.
   static const int _numForceDOF; ///< Number of forces at points.
@@ -55,8 +55,8 @@
 
   static const int _forceDOF[]; ///< Degrees of freedom that are constrained at each point
   static const int _forcePoints[]; ///< Array of indices of points with forces.
-  static const double _forceInitial[]; ///< Forces at points.
-  static const double _residual[]; ///< Residual field.
+  static const PylithScalar _forceInitial[]; ///< Forces at points.
+  static const PylithScalar _residual[]; ///< Residual field.
 
   static const char* _meshFilename; ///< Filename for input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,16 +43,16 @@
 const int pylith::bc::PointForceDataTet4::_numForcePts = 3;
 const int pylith::bc::PointForceDataTet4::_forcePoints[] = { 1, 2, 3 };
 
-const double pylith::bc::PointForceDataTet4::_tRef = 1.2;
-const double pylith::bc::PointForceDataTet4::_forceRate = 4.0;
-const double pylith::bc::PointForceDataTet4::_forceInitial[] = {
+const PylithScalar pylith::bc::PointForceDataTet4::_tRef = 1.2;
+const PylithScalar pylith::bc::PointForceDataTet4::_forceRate = 4.0;
+const PylithScalar pylith::bc::PointForceDataTet4::_forceInitial[] = {
   0.7, 0.2,
   0.7, 0.2,
   0.7, 0.2,
 };
 
-const double pylith::bc::PointForceDataTet4::_tResidual = 1.3;
-const double pylith::bc::PointForceDataTet4::_residual[] =
+const PylithScalar pylith::bc::PointForceDataTet4::_tResidual = 1.3;
+const PylithScalar pylith::bc::PointForceDataTet4::_residual[] =
   { 0.0, 0.0, 0.0,
     0.0, 1.1, 0.6,
     0.0, 1.1, 0.6,
@@ -79,10 +79,10 @@
 
   tRef = _tRef;
   forceRate = _forceRate;
-  forceInitial = const_cast<double*>(_forceInitial);
+  forceInitial = const_cast<PylithScalar*>(_forceInitial);
 
   tResidual = _tResidual;
-  residual = const_cast<double*>(_residual);
+  residual = const_cast<PylithScalar*>(_residual);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
-  static const double _tRef; ///< Reference time for rate of change of forces.
-  static const double _forceRate; ///< Rate of change of force.
-  static const double _tResidual; ///< Time for computing residual.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of forces.
+  static const PylithScalar _forceRate; ///< Rate of change of force.
+  static const PylithScalar _tResidual; ///< Time for computing residual.
 
   static const int _numDOF; ///< Number of degrees of freedom at each point.
   static const int _numForceDOF; ///< Number of forces at points.
@@ -55,8 +55,8 @@
 
   static const int _forceDOF[]; ///< Degrees of freedom that are constrained at each point
   static const int _forcePoints[]; ///< Array of indices of points with forces.
-  static const double _forceInitial[]; ///< Forces at points.
-  static const double _residual[]; ///< Residual field.
+  static const PylithScalar _forceInitial[]; ///< Forces at points.
+  static const PylithScalar _residual[]; ///< Residual field.
 
   static const char* _meshFilename; ///< Filename for input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,13 +42,13 @@
 const int pylith::bc::PointForceDataTri3::_numForcePts = 2;
 const int pylith::bc::PointForceDataTri3::_forcePoints[] = { 1, 3 };
 
-const double pylith::bc::PointForceDataTri3::_tRef = 0.7;
-const double pylith::bc::PointForceDataTri3::_forceRate = -0.2;
-const double pylith::bc::PointForceDataTri3::_forceInitial[] =
+const PylithScalar pylith::bc::PointForceDataTri3::_tRef = 0.7;
+const PylithScalar pylith::bc::PointForceDataTri3::_forceRate = -0.2;
+const PylithScalar pylith::bc::PointForceDataTri3::_forceInitial[] =
   { 0.3, 0.7 };
 
-const double pylith::bc::PointForceDataTri3::_tResidual = 1.5;
-const double pylith::bc::PointForceDataTri3::_residual[] =
+const PylithScalar pylith::bc::PointForceDataTri3::_tResidual = 1.5;
+const PylithScalar pylith::bc::PointForceDataTri3::_residual[] =
   { 0.0, 0.0,
     0.0, 0.14,
     0.0, 0.0,
@@ -74,10 +74,10 @@
 
   tRef = _tRef;
   forceRate = _forceRate;
-  forceInitial = const_cast<double*>(_forceInitial);
+  forceInitial = const_cast<PylithScalar*>(_forceInitial);
 
   tResidual = _tResidual;
-  residual = const_cast<double*>(_residual);
+  residual = const_cast<PylithScalar*>(_residual);
 
   meshFilename = const_cast<char*>(_meshFilename);
   dbFilename = const_cast<char*>(_dbFilename);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/PointForceDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,9 +42,9 @@
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private:
 
-  static const double _tRef; ///< Reference time for rate of change of forces.
-  static const double _forceRate; ///< Rate of change of force.
-  static const double _tResidual; ///< Time for computing residual.
+  static const PylithScalar _tRef; ///< Reference time for rate of change of forces.
+  static const PylithScalar _forceRate; ///< Rate of change of force.
+  static const PylithScalar _tResidual; ///< Time for computing residual.
 
   static const int _numDOF; ///< Number of degrees of freedom at each point.
   static const int _numForceDOF; ///< Number of forces at points.
@@ -55,8 +55,8 @@
 
   static const int _forceDOF[]; ///< Degrees of freedom that are constrained at each point
   static const int _forcePoints[]; ///< Array of indices of points with forces.
-  static const double _forceInitial[]; ///< Forces at points.
-  static const double _residual[]; ///< Residual field.
+  static const PylithScalar _forceInitial[]; ///< Forces at points.
+  static const PylithScalar _residual[]; ///< Residual field.
 
   static const char* _meshFilename; ///< Filename for input mesh.
   static const char* _dbFilename; ///< Filename of simple spatial database.

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,9 +49,9 @@
 	const char* slipTimeFilename;
 	const char* riseTimeFilename;
 	const int* constraintPts;
-	const double* finalSlipE;
-	const double* slipTimeE;
-	const double* riseTimeE;
+	const PylithScalar* finalSlipE;
+	const PylithScalar* slipTimeE;
+	const PylithScalar* riseTimeE;
 	const int numConstraintPts;
       }; // DataStruct
     } // _TestBruneSlipFn
@@ -137,9 +137,9 @@
   const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
   const char* riseTimeFilename = "data/line2_risetime.spatialdb";
   const int constraintPts[] = { 3 };
-  const double finalSlipE[] = { 2.3 };
-  const double slipTimeE[] = { 1.2 };
-  const double riseTimeE[] = { 1.4 };
+  const PylithScalar finalSlipE[] = { 2.3 };
+  const PylithScalar slipTimeE[] = { 1.2 };
+  const PylithScalar riseTimeE[] = { 1.4 };
   const int numConstraintPts = 1;
 
   _TestBruneSlipFn::DataStruct data = {meshFilename,
@@ -168,10 +168,10 @@
   const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
   const char* riseTimeFilename = "data/tri3_risetime.spatialdb";
   const int constraintPts[] = { 3, 4 };
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				2.4, 0.2};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
   const int numConstraintPts = 2;
 
   _TestBruneSlipFn::DataStruct data = {meshFilename,
@@ -200,11 +200,11 @@
   const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
   const char* riseTimeFilename = "data/tet4_risetime.spatialdb";
   const int constraintPts[] = { 3, 4, 5 };
-  const double finalSlipE[] = { 2.3, -0.7, 0.1,
+  const PylithScalar finalSlipE[] = { 2.3, -0.7, 0.1,
 				2.4, -0.8, 0.2,
 				2.5, -0.9, 0.3 };
-  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
-  const double riseTimeE[] = { 1.5, 1.6, 1.7 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const PylithScalar riseTimeE[] = { 1.5, 1.6, 1.7 };
   const int numConstraintPts = 3;
 
   _TestBruneSlipFn::DataStruct data = {meshFilename,
@@ -226,11 +226,11 @@
 void
 pylith::faults::TestBruneSlipFn::testSlip(void)
 { // testSlip
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				0.0, 0.0};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = 5.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = 5.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -250,32 +250,32 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 2.134;
+  const PylithScalar t = 2.134;
   slipfn.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
-    const double peakRate = slipMag / riseTimeE[iPoint] * 1.745;
-    const double tau = 
+    const PylithScalar peakRate = slipMag / riseTimeE[iPoint] * 1.745;
+    const PylithScalar tau = 
       (slipMag > 0.0) ? slipMag / (exp(1.0) * peakRate) : 1.0;
-    const double t0 = slipTimeE[iPoint];
-    const double slipNorm = 1.0 - exp(-(t-t0)/tau) * (1.0 + (t-t0)/tau);
+    const PylithScalar t0 = slipTimeE[iPoint];
+    const PylithScalar slipNorm = 1.0 - exp(-(t-t0)/tau) * (1.0 + (t-t0)/tau);
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
+      const PylithScalar slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
   } // for
@@ -286,11 +286,11 @@
 void
 pylith::faults::TestBruneSlipFn::testSlipIncr(void)
 { // testSlipIncr
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				0.0, 0.0};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = 1.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = 1.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -310,37 +310,37 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 1.234;
-  const double t1 = 3.635;
+  const PylithScalar t0 = 1.234;
+  const PylithScalar t1 = 3.635;
   slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
-    const double peakRate = slipMag / riseTimeE[iPoint] * 1.745;
-    const double tau = 
+    const PylithScalar peakRate = slipMag / riseTimeE[iPoint] * 1.745;
+    const PylithScalar tau = 
       (slipMag > 0.0) ? slipMag / (exp(1.0) * peakRate) : 1.0;
-    const double tRef = slipTimeE[iPoint];
-    const double slipNorm0 = 
+    const PylithScalar tRef = slipTimeE[iPoint];
+    const PylithScalar slipNorm0 = 
       (t0 > tRef) ? 1.0 - exp(-(t0-tRef)/tau) * (1.0 + (t0-tRef)/tau) : 0.0;
-    const double slipNorm1 =
+    const PylithScalar slipNorm1 =
       (t1 > tRef) ? 1.0 - exp(-(t1-tRef)/tau) * (1.0 + (t1-tRef)/tau) : 0.0;
 
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = 
+      const PylithScalar slipE = 
 	finalSlipE[iPoint*spaceDim+iDim] * (slipNorm1-slipNorm0);
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
@@ -352,21 +352,21 @@
 void
 pylith::faults::TestBruneSlipFn::testSlipTH(void)
 { // testSlipTH
-  const double t = 0.734;
-  const double finalSlip = 4.64;
-  const double riseTime = 3.23;
+  const PylithScalar t = 0.734;
+  const PylithScalar finalSlip = 4.64;
+  const PylithScalar riseTime = 3.23;
 
-  const double peakRate = finalSlip / riseTime * 1.745;
-  const double tau = finalSlip / (exp(1.0) * peakRate);
-  const double slipE = finalSlip * (1.0 - exp(-t/tau) * (1.0 + t/tau));
+  const PylithScalar peakRate = finalSlip / riseTime * 1.745;
+  const PylithScalar tau = finalSlip / (exp(1.0) * peakRate);
+  const PylithScalar slipE = finalSlip * (1.0 - exp(-t/tau) * (1.0 + t/tau));
 
-  double slip = BruneSlipFn::_slipFn(t, finalSlip, riseTime);
+  PylithScalar slip = BruneSlipFn::_slipFn(t, finalSlip, riseTime);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, slip, tolerance);
 
   slip = BruneSlipFn::_slipFn(-0.5, finalSlip, riseTime);
-  CPPUNIT_ASSERT_EQUAL(0.0, slip);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), slip);
 
   slip = BruneSlipFn::_slipFn(1.0e+10, finalSlip, riseTime);
   CPPUNIT_ASSERT_DOUBLES_EQUAL(finalSlip, slip, tolerance);
@@ -378,7 +378,7 @@
 pylith::faults::TestBruneSlipFn::_initialize(topology::Mesh* mesh,
 					     topology::SubMesh* faultMesh,
 					     BruneSlipFn* slipfn,
-					     const double originTime)
+					     const PylithScalar originTime)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
@@ -523,7 +523,7 @@
   slipfn.dbRiseTime(&dbRiseTime);
   
   spatialdata::units::Nondimensional normalizer;
-  const double originTime = 5.353;
+  const PylithScalar originTime = 5.353;
   
   slipfn.initialize(faultMesh, normalizer, originTime);
 
@@ -542,13 +542,13 @@
     slipfn._parameters->get("rise time").section();
   CPPUNIT_ASSERT(!riseTimeSection.isNull());
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
     CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
-    const double* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
+    const PylithScalar* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != finalSlipVertex);
     for (int iDim=0; iDim < spaceDim; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(data.finalSlipE[iPoint*spaceDim+iDim],
@@ -556,13 +556,13 @@
 				   tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
-    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
 				 slipTimeVertex[0], tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, riseTimeSection->getFiberDimension(*v_iter));
-    const double* riseTimeVertex = riseTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* riseTimeVertex = riseTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != riseTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.riseTimeE[iPoint],
 				 riseTimeVertex[0], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestBruneSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -110,7 +110,7 @@
   void _initialize(topology::Mesh* mesh,
 		   topology::SubMesh* faultMesh,
 		   BruneSlipFn* slipfn,
-		   const double originTime);
+		   const PylithScalar originTime);
 
   /** Test intialize().
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,8 +48,8 @@
 	const char* slipRateFilename;
 	const char* slipTimeFilename;
 	const int* constraintPts;
-	const double* slipRateE;
-	const double* slipTimeE;
+	const PylithScalar* slipRateE;
+	const PylithScalar* slipTimeE;
 	const int numConstraintPts;
       }; // DataStruct
     } // _TestConstRateSlipFn
@@ -114,8 +114,8 @@
   const char* slipRateFilename = "data/line2_sliprate.spatialdb";
   const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
   const int constraintPts[] = { 3 };
-  const double slipRateE[] = { 0.4 };
-  const double slipTimeE[] = { 1.2 };
+  const PylithScalar slipRateE[] = { 0.4 };
+  const PylithScalar slipTimeE[] = { 1.2 };
   const int numConstraintPts = 1;
 
   _TestConstRateSlipFn::DataStruct data = {meshFilename,
@@ -141,9 +141,9 @@
   const char* slipRateFilename = "data/tri3_sliprate.spatialdb";
   const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
   const int constraintPts[] = { 3, 4 };
-  const double slipRateE[] = { 0.1, 0.2, 
+  const PylithScalar slipRateE[] = { 0.1, 0.2, 
 			       0.3, 0.4 };
-  const double slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
   const int numConstraintPts = 2;
 
   _TestConstRateSlipFn::DataStruct data = {meshFilename,
@@ -169,10 +169,10 @@
   const char* slipRateFilename = "data/tet4_sliprate.spatialdb";
   const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
   const int constraintPts[] = { 3, 4, 5 };
-  const double slipRateE[] = { 1.6, -0.7, 0.1,
+  const PylithScalar slipRateE[] = { 1.6, -0.7, 0.1,
 			       1.7, -0.8, 0.2,
 			       1.8, -0.9, 0.3 };
-  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3, 1.4 };
   const int numConstraintPts = 3;
 
   _TestConstRateSlipFn::DataStruct data = {meshFilename,
@@ -192,10 +192,10 @@
 void
 pylith::faults::TestConstRateSlipFn::testSlip(void)
 { // testSlip
-  const double slipRateE[] = { 0.1, 0.2, 
+  const PylithScalar slipRateE[] = { 0.1, 0.2, 
 			       0.3, 0.4};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double originTime = 5.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar originTime = 5.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -215,24 +215,24 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 1.234;
+  const PylithScalar t = 1.234;
   slipfn.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    const double t0 = slipTimeE[iPoint];
+    const PylithScalar t0 = slipTimeE[iPoint];
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = (t - slipTimeE[iPoint]) > 0.0 ?
+      const PylithScalar slipE = (t - slipTimeE[iPoint]) > 0.0 ?
 	slipRateE[iPoint*spaceDim+iDim] * (t - slipTimeE[iPoint]) : 0.0;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
@@ -244,10 +244,10 @@
 void
 pylith::faults::TestConstRateSlipFn::testSlipIncr(void)
 { // testSlipIncr
-  const double slipRateE[] = { 0.1, 0.2, 
+  const PylithScalar slipRateE[] = { 0.1, 0.2, 
 			       0.3, 0.4 };
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double originTime = 1.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar originTime = 1.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -267,11 +267,11 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 1.234;
-  const double t1 = 3.635;
+  const PylithScalar t0 = 1.234;
+  const PylithScalar t1 = 3.635;
   slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
@@ -280,12 +280,12 @@
        ++v_iter, ++iPoint) {
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double tRef = (slipTimeE[iPoint] > t0) ? slipTimeE[iPoint] : t0;
-      const double slipE = 
+      const PylithScalar tRef = (slipTimeE[iPoint] > t0) ? slipTimeE[iPoint] : t0;
+      const PylithScalar slipE = 
 	slipRateE[iPoint*spaceDim+iDim] * (t1 - tRef);
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
@@ -298,7 +298,7 @@
 pylith::faults::TestConstRateSlipFn::_initialize(topology::Mesh* mesh,
 						 topology::SubMesh* faultMesh,
 					    	 ConstRateSlipFn* slipfn,
-						 const double originTime)
+						 const PylithScalar originTime)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
@@ -430,7 +430,7 @@
   slipfn.dbSlipTime(&dbSlipTime);
   
   spatialdata::units::Nondimensional normalizer;
-  const double originTime = 5.353;
+  const PylithScalar originTime = 5.353;
   
   slipfn.initialize(faultMesh, normalizer, originTime);
 
@@ -446,13 +446,13 @@
     slipfn._parameters->get("slip time").section();
   CPPUNIT_ASSERT(!slipTimeSection.isNull());
 
-  const double tolerance = 1.0e-06;\
+  const PylithScalar tolerance = 1.0e-06;\
   int iPoint = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
     CPPUNIT_ASSERT_EQUAL(spaceDim, slipRateSection->getFiberDimension(*v_iter));
-    const double* slipRateVertex = slipRateSection->restrictPoint(*v_iter);
+    const PylithScalar* slipRateVertex = slipRateSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipRateVertex);
     for (int iDim=0; iDim < spaceDim; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipRateE[iPoint*spaceDim+iDim],
@@ -460,7 +460,7 @@
 				   tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
-    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
 				 slipTimeVertex[0], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestConstRateSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -102,7 +102,7 @@
   void _initialize(topology::Mesh* mesh,
 		   topology::SubMesh* faultMesh,
 		   ConstRateSlipFn* slipfn,
-		   const double originTime);
+		   const PylithScalar originTime);
 
   /** Test intialize().
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
   topology::SubMesh faultMesh;
   EqKinSrc eqsrc;
   BruneSlipFn slipfn;
-  const double originTime = 2.45;
+  const PylithScalar originTime = 2.45;
   _initialize(&mesh, &faultMesh, &eqsrc, &slipfn, originTime);
   
   // Don't have access to details of slip time function, so we can't
@@ -86,11 +86,11 @@
 void
 pylith::faults::TestEqKinSrc::testSlip(void)
 { // testSlip
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				2.4, 0.2};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = 2.42;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = 2.42;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -111,10 +111,10 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 2.134;
+  const PylithScalar t = 2.134;
   eqsrc.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
 
   const ALE::Obj<RealSection>& slipSection = slip.section();
@@ -122,22 +122,22 @@
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
-    const double peakRate = slipMag / riseTimeE[iPoint] * 1.745;
-    const double tau = slipMag / (exp(1.0) * peakRate);
-    const double t0 = slipTimeE[iPoint];
-    const double slipNorm = 1.0 - exp(-(t-t0)/tau) * (1.0 + (t-t0)/tau);
+    const PylithScalar peakRate = slipMag / riseTimeE[iPoint] * 1.745;
+    const PylithScalar tau = slipMag / (exp(1.0) * peakRate);
+    const PylithScalar t0 = slipTimeE[iPoint];
+    const PylithScalar slipNorm = 1.0 - exp(-(t-t0)/tau) * (1.0 + (t-t0)/tau);
 
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
+      const PylithScalar slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
   } // for
@@ -148,11 +148,11 @@
 void
 pylith::faults::TestEqKinSrc::testSlipIncr(void)
 { // testSlip
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				2.4, 0.2};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = -4.29;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = -4.29;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -173,36 +173,36 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 1.234;
-  const double t1 = 2.525;
+  const PylithScalar t0 = 1.234;
+  const PylithScalar t1 = 2.525;
   eqsrc.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
-    const double peakRate = slipMag / riseTimeE[iPoint] * 1.745;
-    const double tau = slipMag / (exp(1.0) * peakRate);
-    const double tRef = slipTimeE[iPoint];
-    const double slipNorm0 = 
+    const PylithScalar peakRate = slipMag / riseTimeE[iPoint] * 1.745;
+    const PylithScalar tau = slipMag / (exp(1.0) * peakRate);
+    const PylithScalar tRef = slipTimeE[iPoint];
+    const PylithScalar slipNorm0 = 
       (t0 > tRef) ? 1.0 - exp(-(t0-tRef)/tau) * (1.0 + (t0-tRef)/tau) : 0.0;
-    const double slipNorm1 =
+    const PylithScalar slipNorm1 =
       (t1 > tRef) ? 1.0 - exp(-(t1-tRef)/tau) * (1.0 + (t1-tRef)/tau) : 0.0;
     
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = 
+      const PylithScalar slipE = 
 	finalSlipE[iPoint*spaceDim+iDim] * (slipNorm1 - slipNorm0);
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
@@ -216,7 +216,7 @@
 					  topology::SubMesh* faultMesh,
 					  EqKinSrc* eqsrc,
 					  BruneSlipFn* slipfn,
-					  const double originTime)
+					  const PylithScalar originTime)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestEqKinSrc.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -91,7 +91,7 @@
 		   topology::SubMesh* faultMesh,
 		   EqKinSrc* eqsrc,
 		   BruneSlipFn* slipfn,
-		   const double originTime);
+		   const PylithScalar originTime);
 
 }; // class TestEqKinSrc
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesive.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesive.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesive.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 #include "pylith/faults/FaultCohesiveTract.hh" // USES FaultsCohesiveTract
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
-#include "pylith/utils/array.hh" // USES int_array, double_array
+#include "pylith/utils/array.hh" // USES int_array, scalar_array
 #include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
 
 #include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -540,8 +540,8 @@
 	vertices->begin();
       v_iter != vertices->end();
       ++v_iter) {
-    const double* vertexCoords = coordsSection->restrictPoint(*v_iter);
-    const double tolerance = 1.0e-06;
+    const PylithScalar* vertexCoords = coordsSection->restrictPoint(*v_iter);
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       if (data.vertices[i] < 1.0)
         CPPUNIT_ASSERT_DOUBLES_EQUAL(data.vertices[i++], vertexCoords[iDim],
@@ -686,9 +686,9 @@
 	vertices->begin();
       v_iter != vertices->end();
       ++v_iter) {
-    const double* coordsVertex = coordsSection->restrictPoint(*v_iter);
+    const PylithScalar* coordsVertex = coordsSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != coordsVertex);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       if (data.vertices[i] < 1.0)
         CPPUNIT_ASSERT_DOUBLES_EQUAL(data.vertices[i++], coordsVertex[iDim],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -98,6 +98,20 @@
  } // testDBInitialTract
 
 // ----------------------------------------------------------------------
+// Test zeroTolerance().
+void
+pylith::faults::TestFaultCohesiveDyn::testZeroTolerance(void)
+{ // testZeroTolerance
+  FaultCohesiveDyn fault;
+
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0e-10), fault._zeroTolerance); // default
+
+  const PylithScalar value = 1.0e-20;
+  fault.zeroTolerance(value);
+  CPPUNIT_ASSERT_EQUAL(value, fault._zeroTolerance);
+ } // zeroTolerance
+
+// ----------------------------------------------------------------------
 // Test initialize().
 void
 pylith::faults::TestFaultCohesiveDyn::testInitialize(void)
@@ -143,11 +157,11 @@
        ++v_iter, ++iVertex) {
     const int fiberDim = orientationSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(orientationSize, fiberDim);
-    const double* orientationVertex =
+    const PylithScalar* orientationVertex =
       orientationSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != orientationVertex);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < orientationSize; ++i) {
       const int index = iVertex*orientationSize+i;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->orientation[index],
@@ -155,46 +169,28 @@
     } // for
   } // for
 
-  // Check area
-  const ALE::Obj<RealSection>& areaSection =
-    fault._fields->get("area").section();
-  CPPUNIT_ASSERT(!areaSection.isNull());
-  iVertex = 0;
-  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
-       v_iter != verticesEnd;
-       ++v_iter, ++iVertex) {
-    const int fiberDim = areaSection->getFiberDimension(*v_iter);
-    CPPUNIT_ASSERT_EQUAL(1, fiberDim);
-    const double* areaVertex = areaSection->restrictPoint(*v_iter);
-    CPPUNIT_ASSERT(0 != areaVertex);
-
-    const double tolerance = 1.0e-06;
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->area[iVertex], areaVertex[0],
-				 tolerance);
-  } // for
-
-  // Initial forces/tractions
+  // Initial tractions
   if (0 != fault._dbInitialTract) {
-    //fault._fields->get("initial forces").view("INITIAL FORCES"); // DEBUGGING
-    const ALE::Obj<RealSection>& forcesInitialSection = 
-      fault._fields->get("initial forces").section();
-    CPPUNIT_ASSERT(!forcesInitialSection.isNull());
+    //fault._fields->get("initial traction").view("INITIAL TRACTIONS"); // DEBUGGING
+    const ALE::Obj<RealSection>& initialTractionsSection = 
+      fault._fields->get("initial traction").section();
+    CPPUNIT_ASSERT(!initialTractionsSection.isNull());
     const int spaceDim = _data->spaceDim;
     iVertex = 0;
     for (SieveSubMesh::label_sequence::iterator v_iter = verticesBegin;
         v_iter != verticesEnd;
         ++v_iter, ++iVertex) {
-      const int fiberDim = forcesInitialSection->getFiberDimension(*v_iter);
+      const int fiberDim = initialTractionsSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-      const double* forcesInitialVertex = 
-	forcesInitialSection->restrictPoint(*v_iter);
-      CPPUNIT_ASSERT(0 != forcesInitialVertex);
+      const PylithScalar* initialTractionsVertex = 
+	initialTractionsSection->restrictPoint(*v_iter);
+      CPPUNIT_ASSERT(initialTractionsVertex);
 
-      const double tolerance = 1.0e-06;
+      const PylithScalar tolerance = 1.0e-06;
       for (int i = 0; i < spaceDim; ++i) {
         const int index = iVertex * spaceDim + i;
-        CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->forcesInitial[index], 
-				     forcesInitialVertex[i], tolerance);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->initialTractions[index], 
+				     initialTractionsVertex[i], tolerance);
       } // for
     } // for
   } // if
@@ -216,8 +212,8 @@
 
   const int spaceDim = _data->spaceDim;
 
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
   fault.constrainSolnSpace(&fields, t, jacobian);
 
@@ -239,23 +235,23 @@
     //dispIncrSection->view("DISP INCREMENT"); // DEBUGGING
 
     // Get expected values
-    const double* valsE = _data->fieldIncrStick; // No change in dispIncr
+    const PylithScalar* valsE = _data->fieldIncrStick; // No change in dispIncr
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
 	 v_iter != verticesEnd;
 	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
       // Check fiber dimension (number of values at point)
       const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = dispIncrSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = dispIncrSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
         if (fabs(valE) > tolerance)
           CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
@@ -270,8 +266,6 @@
     // Get fault vertex info
     const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
     CPPUNIT_ASSERT(!faultSieveMesh.isNull());
-    SieveSubMesh::renumbering_type& renumbering =
-      faultSieveMesh->getRenumbering();
     const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
       faultSieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
@@ -280,20 +274,20 @@
 
     // Get section containing slip
     const ALE::Obj<RealSection>& slipSection =
-      fault._fields->get("slip").section();
+      fault.vertexField("slip").section();
     CPPUNIT_ASSERT(!slipSection.isNull());
 
-    const double valE = 0.0; // slip should be zero
+    const PylithScalar valE = 0.0; // slip should be zero
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
 	   != verticesEnd;
 	 ++v_iter, ++iVertex) { // loop over fault vertices
       // Check fiber dimension (number of values at point)
       const int fiberDim = slipSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = slipSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
@@ -322,112 +316,111 @@
 
   const int spaceDim = _data->spaceDim;
 
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
   fault.constrainSolnSpace(&fields, t, jacobian);
 
-  //residual.view("RESIDUAL"); // DEBUGGING
+  { // Check slip values
+    // Slip values should be adjusted based on the change in the
+    // Lagrange multipliers as reflected in the slipSlipE data member.
 
-  { // Check solution values
-    // Lagrange multipliers should be adjusted according to friction
-    // as reflected in the fieldIncrSlipE data member.
-    const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
-    CPPUNIT_ASSERT(!sieveMesh.isNull());
-    const ALE::Obj<SieveMesh::label_sequence>& vertices =
-      sieveMesh->depthStratum(0);
+    // Get fault vertex info
+    const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+    CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+    const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+      faultSieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
-    const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
-    const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+    const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+    const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-    // Get section containing solution (disp + Lagrange multipliers)
-    const ALE::Obj<RealSection>& dispIncrSection =
-      fields.get("dispIncr(t->t+dt)").section();
-    CPPUNIT_ASSERT(!dispIncrSection.isNull());
+    // Get section containing slip
+    const ALE::Obj<RealSection>& slipSection =
+      fault.vertexField("slip").section();
+    CPPUNIT_ASSERT(!slipSection.isNull());
 
+    //slipSection->view("SLIP"); // DEBUGGING
+
     // Get expected values
-    const double* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
+    const PylithScalar* valsE = _data->slipSlipE;
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
-    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
-	 v_iter != verticesEnd;
-	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
+    const PylithScalar tolerance = 
+      (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-5;
+    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
+	   != verticesEnd;
+	 ++v_iter, ++iVertex) { // loop over fault vertices
       // Check fiber dimension (number of values at point)
-      const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
+      const int fiberDim = slipSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = dispIncrSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
 #if 0 // DEBUGGING
-	std::cout << "SOLUTION valE: " << valE
+	std::cout << "SLIP valE: " << valE
 		  << ", val: " << vals[i]
 		  << ", error: " << fabs(1.0-vals[i]/valE)
 		  << std::endl;
 #endif // DEBUGGING
-	if (fabs(valE) > tolerance)
+        if (fabs(valE) > tolerance)
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
       } // for
     } // for
-  } // Check solution values
+  } // Check slip values
 
-  { // Check slip values
-    // Slip values should be adjusted based on the change in the
-    // Lagrange multipliers as reflected in the slipSlipE data member.
-
-    // Get fault vertex info
-    const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
-    CPPUNIT_ASSERT(!faultSieveMesh.isNull());
-    SieveSubMesh::renumbering_type& renumbering =
-      faultSieveMesh->getRenumbering();
-    const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
-      faultSieveMesh->depthStratum(0);
+  { // Check solution values
+    // Lagrange multipliers should be adjusted according to friction
+    // as reflected in the fieldIncrSlipE data member.
+    const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+    CPPUNIT_ASSERT(!sieveMesh.isNull());
+    const ALE::Obj<SieveMesh::label_sequence>& vertices =
+      sieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
-    const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
-    const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+    const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+    const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-    // Get section containing slip
-    const ALE::Obj<RealSection>& slipSection =
-      fault._fields->get("slip").section();
-    CPPUNIT_ASSERT(!slipSection.isNull());
+    // Get section containing solution (disp + Lagrange multipliers)
+    const ALE::Obj<RealSection>& dispIncrSection =
+      fields.get("dispIncr(t->t+dt)").section();
+    CPPUNIT_ASSERT(!dispIncrSection.isNull());
 
     // Get expected values
-    const double* valsE = _data->slipSlipE;
+    const PylithScalar* valsE = _data->fieldIncrSlipE; // Expected values for dispIncr
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
-    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
-	   != verticesEnd;
-	 ++v_iter, ++iVertex) { // loop over fault vertices
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
+    for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
+	 v_iter != verticesEnd;
+	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
       // Check fiber dimension (number of values at point)
-      const int fiberDim = slipSection->getFiberDimension(*v_iter);
+      const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = slipSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = dispIncrSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
 #if 0 // DEBUGGING
-	std::cout << "SLIP valE: " << valE
+	std::cout << "SOLUTION valE: " << valE
 		  << ", val: " << vals[i]
 		  << ", error: " << fabs(1.0-vals[i]/valE)
 		  << std::endl;
 #endif // DEBUGGING
-        if (fabs(valE) > tolerance)
+	if (fabs(valE) > tolerance)
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
 	  CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
       } // for
     } // for
-  } // Check slip values
+  } // Check solution values
 
 } // testConstrainSolnSpaceSlip
 
@@ -447,8 +440,8 @@
 
   const int spaceDim = _data->spaceDim;
 
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
   fault.constrainSolnSpace(&fields, t, jacobian);
 
@@ -471,23 +464,23 @@
     CPPUNIT_ASSERT(!dispIncrSection.isNull());
 
     // Get expected values
-    const double* valsE = _data->fieldIncrOpenE; // Expected values for dispIncr
+    const PylithScalar* valsE = _data->fieldIncrOpenE; // Expected values for dispIncr
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (SieveMesh::label_sequence::iterator v_iter = verticesBegin;
 	 v_iter != verticesEnd;
 	 ++v_iter, ++iVertex) { // loop over all vertices in mesh
       // Check fiber dimension (number of values at point)
       const int fiberDim = dispIncrSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = dispIncrSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = dispIncrSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
 #if 0 // DEBUGGING
 	std::cout << "valE: " << valE
 		  << ", val: " << vals[i]
@@ -508,8 +501,6 @@
     // Get fault vertex info
     const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
     CPPUNIT_ASSERT(!faultSieveMesh.isNull());
-    SieveSubMesh::renumbering_type& renumbering =
-      faultSieveMesh->getRenumbering();
     const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
       faultSieveMesh->depthStratum(0);
     CPPUNIT_ASSERT(!vertices.isNull());
@@ -518,27 +509,27 @@
 
     // Get section containing slip
     const ALE::Obj<RealSection>& slipSection =
-      fault._fields->get("slip").section();
+      fault.vertexField("slip").section();
     CPPUNIT_ASSERT(!slipSection.isNull());
 
     // Get expected values
-    const double* valsE = _data->slipOpenE;
+    const PylithScalar* valsE = _data->slipOpenE;
     int iVertex = 0; // variable to use as index into valsE array
     const int fiberDimE = spaceDim; // number of values per point
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (SieveMesh::label_sequence::iterator v_iter = verticesBegin; v_iter
 	   != verticesEnd;
 	 ++v_iter, ++iVertex) { // loop over fault vertices
       // Check fiber dimension (number of values at point)
       const int fiberDim = slipSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = slipSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
 
       // Check values at point
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
 #if 0 // DEBUGGING
 	std::cout << "valE: " << valE
 		  << ", val: " << vals[i]
@@ -570,8 +561,8 @@
 
   const int spaceDim = _data->spaceDim;
 
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
   fault.updateStateVars(t, &fields);
 
@@ -602,7 +593,7 @@
   const ALE::Obj<RealSection>& tractionsSection = tractions.section();
   CPPUNIT_ASSERT(!tractionsSection.isNull());
 
-  const double t = 0;
+  const PylithScalar t = 0;
   fault.updateStateVars(t, &fields);
   fault._calcTractions(&tractions, fields.get("disp(t)"));
 
@@ -627,7 +618,7 @@
   CPPUNIT_ASSERT(!dispSection.isNull());
 
   int iVertex = 0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter, ++iVertex) {
@@ -646,23 +637,28 @@
     CPPUNIT_ASSERT(found);
     int fiberDim = tractionsSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* tractionsVertex = tractionsSection->restrictPoint(*v_iter);
-    CPPUNIT_ASSERT(0 != tractionsVertex);
+    const PylithScalar* tractionsVertex = tractionsSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(tractionsVertex);
 
-    fiberDim = dispSection->getFiberDimension(meshVertex);
-    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* dispVertex = dispSection->restrictPoint(meshVertex);
-    CPPUNIT_ASSERT(0 != dispVertex);
+    const PylithScalar* tractionsVertexGlobalE = 
+      dispSection->restrictPoint(meshVertex);
+    CPPUNIT_ASSERT(tractionsVertexGlobalE);
+    const PylithScalar* orientationVertex = 
+      &_data->orientation[iVertex*spaceDim*spaceDim];
+    CPPUNIT_ASSERT(orientationVertex);
 
-    const double scale = 1.0 / _data->area[iVertex];
     for (int iDim=0; iDim < spaceDim; ++iDim) {
-      const double tractionE = dispVertex[iDim] * scale;
+      PylithScalar tractionE = 0.0;
+      for (int jDim=0; jDim < spaceDim; ++jDim) {
+	tractionE += 
+	  orientationVertex[iDim*spaceDim+jDim]*tractionsVertexGlobalE[jDim];
+      } // for
       if (tractionE != 0.0)
         CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, tractionsVertex[iDim]/tractionE,
 				     tolerance);
       else
         CPPUNIT_ASSERT_DOUBLES_EQUAL(tractionE, tractionsVertex[iDim],
-             tolerance);
+				     tolerance);
     } // for
   } // for
 } // testCalcTractions
@@ -741,7 +737,7 @@
   mesh->coordsys(&cs);
   mesh->nondimensionalize(normalizer);
   
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
   
   fault->initialize(*mesh, upDir);
   
@@ -756,6 +752,8 @@
   disp.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
   disp.allocate();
   fields->copyLayout("disp(t)");
+
+  fault->verifyConfiguration(*mesh);
 } // _initialize
 
 // ----------------------------------------------------------------------
@@ -766,7 +764,7 @@
           FaultCohesiveDyn* const fault,
           topology::SolutionFields* const fields,
           topology::Jacobian* const jacobian,
-          const double* const fieldIncr)
+          const PylithScalar* const fieldIncr)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != fault);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveDyn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -53,6 +53,7 @@
 
   CPPUNIT_TEST( testConstructor );
   CPPUNIT_TEST( testDBInitialTract );
+  CPPUNIT_TEST( testZeroTolerance );
 
   // Tests in derived classes:
   // testInitialize()
@@ -89,6 +90,9 @@
   /// Test dbInitialTract().
   void testDBInitialTract(void);
 
+  /// Test zeroTolerance().
+  void testZeroTolerance(void);
+
   /// Test initialize().
   void testInitialize(void);
 
@@ -136,7 +140,7 @@
       FaultCohesiveDyn* const fault,
       topology::SolutionFields* const fields,
       topology::Jacobian* const jacobian,
-      const double* const fieldIncrVals);
+      const PylithScalar* const fieldIncrVals);
 
   /** Determine if vertex is a Lagrange multiplier constraint vertex.
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -143,6 +143,8 @@
 void
 pylith::faults::TestFaultCohesiveKin::testInitialize(void)
 { // testInitialize
+  CPPUNIT_ASSERT(_data);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -212,11 +214,11 @@
        ++v_iter, ++iVertex) {
     const int fiberDim = orientationSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(orientationSize, fiberDim);
-    const double* orientationVertex =
+    const PylithScalar* orientationVertex =
       orientationSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != orientationVertex);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < orientationSize; ++i) {
       const int index = iVertex*orientationSize+i;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->orientation[index],
@@ -234,10 +236,10 @@
        ++v_iter, ++iVertex) {
     const int fiberDim = areaSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(1, fiberDim);
-    const double* areaVertex = areaSection->restrictPoint(*v_iter);
+    const PylithScalar* areaVertex = areaSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != areaVertex);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->area[iVertex], areaVertex[0],
 				 tolerance);
   } // for
@@ -248,6 +250,11 @@
 void
 pylith::faults::TestFaultCohesiveKin::testIntegrateResidual(void)
 { // testIntegrateResidual
+  CPPUNIT_ASSERT(_data);
+  CPPUNIT_ASSERT(_data->fieldT);
+  CPPUNIT_ASSERT(_data->residual);
+  CPPUNIT_ASSERT(_data->residualIncr);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -273,8 +280,8 @@
        ++v_iter, ++iVertex)
     dispSection->updatePoint(*v_iter, &_data->fieldT[iVertex*spaceDim]);
   
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
 
   { // Integrate residual with disp (as opposed to disp increment).
@@ -284,21 +291,21 @@
     //residual.view("RESIDUAL"); // DEBUGGING
 
     // Check values
-    const double* valsE = _data->residual;
+    const PylithScalar* valsE = _data->residual;
     iVertex = 0;
     const int fiberDimE = spaceDim;
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
         v_iter != verticesEnd;
         ++v_iter, ++iVertex) {
       const int fiberDim = residualSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = residualSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = residualSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
       
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
         if (fabs(valE) > tolerance)
           CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
@@ -315,21 +322,21 @@
     //residual.view("RESIDUAL"); // DEBUGGING
 
     // Check values
-    const double* valsE = _data->residualIncr;
+    const PylithScalar* valsE = _data->residualIncr;
     iVertex = 0;
     const int fiberDimE = spaceDim;
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
 	 v_iter != verticesEnd;
 	 ++v_iter, ++iVertex) {
       const int fiberDim = residualSection->getFiberDimension(*v_iter);
       CPPUNIT_ASSERT_EQUAL(fiberDimE, fiberDim);
-      const double* vals = residualSection->restrictPoint(*v_iter);
+      const PylithScalar* vals = residualSection->restrictPoint(*v_iter);
       CPPUNIT_ASSERT(0 != vals);
       
       for (int i = 0; i < fiberDimE; ++i) {
         const int index = iVertex * spaceDim + i;
-        const double valE = valsE[index];
+        const PylithScalar valE = valsE[index];
         if (fabs(valE) > tolerance)
           CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valE, tolerance);
         else
@@ -344,6 +351,10 @@
 void
 pylith::faults::TestFaultCohesiveKin::testIntegrateJacobian(void)
 { // testIntegrateJacobian
+  CPPUNIT_ASSERT(_data);
+  CPPUNIT_ASSERT(_data->fieldT);
+  CPPUNIT_ASSERT(_data->jacobian);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -367,7 +378,7 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 2.134;
+  const PylithScalar t = 2.134;
   fault.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
 
@@ -375,7 +386,7 @@
 
   //MatView(jacobian.matrix(), PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
 
-  const double* valsE = _data->jacobian;
+  const PylithScalar* valsE = _data->jacobian;
   const int nrowsE = dispSection->sizeWithBC();
   const int ncolsE = nrowsE;
 
@@ -392,7 +403,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -400,11 +411,11 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
-      const double valE = valsE[index];
+      const PylithScalar valE = valsE[index];
 #if 0 // DEBUGGING
       if (fabs(valE-vals[index]) > tolerance)
 	std::cout << "ERROR: iRow: " << iRow << ", iCol: " << iCol
@@ -427,6 +438,9 @@
 void
 pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianLumped(void)
 { // testIntegrateJacobianLumped
+  CPPUNIT_ASSERT(_data);
+  CPPUNIT_ASSERT(_data->jacobianLumped);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -438,56 +452,74 @@
   jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
   jacobian.allocate();
 
-  const double t = 2.134;
+  const PylithScalar t = 2.134;
   fault.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
   jacobian.complete();
 
-  // jacobian.view("JACOBIAN"); // DEBUGGING
+  //jacobian.view("JACOBIAN"); // DEBUGGING
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
 
+  // Only check Lagrange multiplier values
+
   int iVertex = 0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int spaceDim = _data->spaceDim;
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
-  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+
+  const ALE::Obj<SieveSubMesh>& sieveMesh = mesh.sieveMesh();
+  CPPUNIT_ASSERT(!sieveMesh.isNull());
   const ALE::Obj<SieveMesh::label_sequence>& vertices =
-    faultSieveMesh->depthStratum(0);
+    sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
-  const SieveSubMesh::label_sequence::iterator verticesBegin = 
-    vertices->begin();
-  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   SieveSubMesh::renumbering_type& renumbering = 
     faultSieveMesh->getRenumbering();
   const SieveMesh::renumbering_type::const_iterator renumberingBegin = 
     renumbering.begin();
   const SieveMesh::renumbering_type::const_iterator renumberingEnd = 
     renumbering.end();
+
   for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter, ++iVertex) {
-    SieveMesh::point_type meshVertex = -1;
     bool found = false;
 
     for (SieveMesh::renumbering_type::const_iterator r_iter = renumberingBegin;
 	 r_iter != renumberingEnd;
 	 ++r_iter) {
-      if (r_iter->second == *v_iter) {
-        meshVertex = r_iter->first;
+      if (r_iter->first == *v_iter) {
         found = true;
         break;
       } // if
     } // for
+    if (!found) // only check Lagrange multiplier values
+      continue;
+
     CPPUNIT_ASSERT(found);
-    int fiberDim = jacobianSection->getFiberDimension(meshVertex);
+    int fiberDim = jacobianSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* jacobianVertex = jacobianSection->restrictPoint(meshVertex);
-    CPPUNIT_ASSERT(0 != jacobianVertex);
-    for (int iDim=0; iDim < spaceDim; ++iDim)
-      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, jacobianVertex[iDim],
-				   tolerance);
+    const PylithScalar* vals = jacobianSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vals);
+    
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const PylithScalar valE = _data->jacobianLumped[iVertex*spaceDim+iDim];
+#if 0 // debugging
+      std::cout << "vertex: " << *v_iter << ", iDim: " << iDim
+		<< ", valE: " << valE
+		<< ", val: " << vals[iDim]
+		<< std::endl;
+#endif
+      if (fabs(valE) > 1.0)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[iDim]/valE, tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[iDim], tolerance);
+    } // for
   } // for
 } // testIntegrateJacobianLumped
 
@@ -496,6 +528,12 @@
 void
 pylith::faults::TestFaultCohesiveKin::testAdjustSolnLumped(void)
 { // testAdjustSolnLumped
+  CPPUNIT_ASSERT(_data);
+  CPPUNIT_ASSERT(_data->fieldT);
+  CPPUNIT_ASSERT(_data->fieldIncr);
+  CPPUNIT_ASSERT(_data->fieldIncrAdjusted);
+  CPPUNIT_ASSERT(_data->jacobianLumped);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -522,8 +560,8 @@
   } // setup disp
 
   // compute residual so that slip and residual are setup
-  const double t = 2.134;
-  const double dt = 0.01;
+  const PylithScalar t = 2.134;
+  const PylithScalar dt = 0.01;
   fault.timeStep(dt);
   topology::Field<topology::Mesh>& residual = fields.get("residual");
   fault.integrateResidual(residual, t, &fields);
@@ -570,133 +608,34 @@
   CPPUNIT_ASSERT(!solutionSection.isNull());
 
   int i = 0;
-  const double tolerance = 1.0e-06;
-  const double* solutionE = _data->fieldIncrAdjusted;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
+  const PylithScalar* solutionE = _data->fieldIncrAdjusted;
   for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
        v_iter != verticesEnd;
        ++v_iter) {
     const int fiberDim = solutionSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* solutionVertex = solutionSection->restrictPoint(*v_iter);
+    const PylithScalar* solutionVertex = solutionSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != solutionVertex);
-    for (int iDim=0; iDim < spaceDim; ++iDim, ++i)
+    for (int iDim=0; iDim < spaceDim; ++iDim, ++i) {
       if (0.0 != solutionE[i])
         CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, solutionVertex[iDim]/solutionE[i],
           tolerance);
       else
         CPPUNIT_ASSERT_DOUBLES_EQUAL(solutionE[i], solutionVertex[iDim],
 				     tolerance);
+    } // for
   } // for
 } // testAdjustSolnLumped
 
 // ----------------------------------------------------------------------
-// Test updateStateVars().
-void
-pylith::faults::TestFaultCohesiveKin::testUpdateStateVars(void)
-{ // testUpdateStateVars
-  topology::Mesh mesh;
-  FaultCohesiveKin fault;
-  topology::SolutionFields fields(mesh);
-  _initialize(&mesh, &fault, &fields);
-
-  const int spaceDim = _data->spaceDim;
-  const ALE::Obj<RealSection>& dispSection = fields.get("disp(t)").section();
-  CPPUNIT_ASSERT(!dispSection.isNull());
-  { // setup disp
-    dispSection->zero();
-    
-    const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
-    CPPUNIT_ASSERT(!sieveMesh.isNull());
-    const ALE::Obj<SieveMesh::label_sequence>& vertices = sieveMesh->depthStratum(0);
-    CPPUNIT_ASSERT(!vertices.isNull());
-    const SieveMesh::label_sequence::iterator verticesBegin = vertices->begin();
-    const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
-    int iVertex = 0;
-    for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
-	 v_iter != verticesEnd;
-	 ++v_iter, ++iVertex)
-      dispSection->updatePoint(*v_iter, &_data->fieldT[iVertex*spaceDim]);
-  } // setup disp
-  topology::Field<topology::Mesh>& residual = fields.get("residual");
-
-  const double t = 2.134;
-  const double dt = 0.01;
-  fault.useSolnIncr(false);
-  fault.timeStep(dt);
-  fault.integrateResidual(residual, t, &fields);
-  fault.updateStateVars(t, &fields);
-
-  CPPUNIT_ASSERT(0 != fault._faultMesh);
-  const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
-  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
-  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
-    faultSieveMesh->depthStratum(0);
-  CPPUNIT_ASSERT(!vertices.isNull());
-  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
-  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
-  SieveSubMesh::renumbering_type& renumbering = faultSieveMesh->getRenumbering();
-
-  // Compute expected slip using eqsrcs
-  topology::Field<topology::SubMesh> slipE(*fault._faultMesh);
-  slipE.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
-  slipE.allocate();
-  const ALE::Obj<RealSection> slipESection = slipE.section();
-  CPPUNIT_ASSERT(!slipESection.isNull());
-
-  const ALE::Obj<RealSection> slipSection =
-    fault._fields->get("slip").section();
-  CPPUNIT_ASSERT(!slipSection.isNull());
-
-  const FaultCohesiveKin::srcs_type::const_iterator srcsEnd = fault._eqSrcs.end();
-  for (FaultCohesiveKin::srcs_type::iterator s_iter=fault._eqSrcs.begin(); 
-       s_iter != srcsEnd; 
-       ++s_iter) {
-    EqKinSrc* src = s_iter->second;
-    assert(0 != src);
-    if (t >= src->originTime())
-      src->slip(&slipE, t);
-  } // for
-
-  int iVertex = 0;
-  const double tolerance = 1.0e-06;
-  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
-       v_iter != verticesEnd;
-       ++v_iter, ++iVertex) {
-    const SieveSubMesh::point_type meshVertex = _data->verticesLagrange[iVertex];
-    bool found = false;
-    for(SieveSubMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
-	r_iter != renumbering.end();
-	++r_iter) {
-      if (r_iter->second == *v_iter) {
-        found = true;
-        break;
-      } // if
-    } // for
-    CPPUNIT_ASSERT(found);
-
-    // Check _slip
-    int fiberDim = slipSection->getFiberDimension(*v_iter);
-    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* slipV = slipSection->restrictPoint(*v_iter);
-    CPPUNIT_ASSERT(0 != slipV);
-
-    const double* slipE = slipESection->restrictPoint(*v_iter);
-    CPPUNIT_ASSERT(0 != slipE);
-
-    for (int iDim=0; iDim < spaceDim; ++iDim) {
-      if (slipE[iDim] > 1.0) 
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, slipV[iDim]/slipE[iDim], tolerance);
-      else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iDim], slipV[iDim], tolerance);
-    } // for
-  } // for
-} // testUpdateStateVars
-
-// ----------------------------------------------------------------------
 // Test calcTractionsChange().
 void
 pylith::faults::TestFaultCohesiveKin::testCalcTractionsChange(void)
 { // testCalcTractionsChange
+  CPPUNIT_ASSERT(_data);
+  CPPUNIT_ASSERT(_data->fieldT);
+
   topology::Mesh mesh;
   FaultCohesiveKin fault;
   topology::SolutionFields fields(mesh);
@@ -729,12 +668,12 @@
   const ALE::Obj<RealSection>& tractionsSection = tractions.section();
   CPPUNIT_ASSERT(!tractionsSection.isNull());
 
-  const double t = 0;
+  const PylithScalar t = 0;
   fault.updateStateVars(t, &fields);  
   fault._calcTractionsChange(&tractions, fields.get("disp(t)"));
 
   int iVertex = 0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
   CPPUNIT_ASSERT(!faultSieveMesh.isNull());
   const ALE::Obj<SieveMesh::label_sequence>& vertices =
@@ -767,17 +706,28 @@
     CPPUNIT_ASSERT(found);
     int fiberDim = tractionsSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* tractionsVertex = tractionsSection->restrictPoint(*v_iter);
+    const PylithScalar* tractionsVertex = tractionsSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != tractionsVertex);
 
     fiberDim = dispSection->getFiberDimension(meshVertex);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* dispVertex = dispSection->restrictPoint(meshVertex);
+    const PylithScalar* dispVertex = dispSection->restrictPoint(meshVertex);
     CPPUNIT_ASSERT(0 != dispVertex);
 
-    const double scale = 1.0 / _data->area[iVertex];
+    const PylithScalar* orientationVertex = 
+      &_data->orientation[iVertex*spaceDim*spaceDim];
+
     for (int iDim=0; iDim < spaceDim; ++iDim) {
-      const double tractionE = dispVertex[iDim] * scale;
+      PylithScalar tractionE = 0.0;
+      for (int jDim=0; jDim < spaceDim; ++jDim)
+	tractionE += orientationVertex[iDim*spaceDim+jDim] * dispVertex[jDim];
+#if 0 // DEBUGGING
+      std::cout << "vertex: " << *v_iter
+		<< ", iDim: " << iDim
+		<< ", tractionE: " << tractionE
+		<< ", traction: " << tractionsVertex[iDim]
+		<< std::endl;
+#endif
       if (tractionE > 1.0) 
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, tractionsVertex[iDim]/tractionE,
 				     tolerance);
@@ -793,7 +743,7 @@
 void
 pylith::faults::TestFaultCohesiveKin::testSplitField(void)
 { // testSplitField
-  assert(0 != _data);
+  CPPUNIT_ASSERT(_data);
 
   topology::Mesh mesh;
   FaultCohesiveKin fault;
@@ -929,7 +879,7 @@
   mesh->coordsys(&cs);
   mesh->nondimensionalize(normalizer);
 
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
   
   fault->initialize(*mesh, upDir); 
   
@@ -950,6 +900,8 @@
   residual.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
   residual.allocate();
   fields->copyLayout("residual");
+
+  fault->verifyConfiguration(*mesh);
 } // _initialize
 
 // ----------------------------------------------------------------------
@@ -957,7 +909,7 @@
 bool
 pylith::faults::TestFaultCohesiveKin::_isLagrangeVertex(const int vertex) const
 { // _isLagrangeVertex
-  assert(0 != _data);
+  CPPUNIT_ASSERT(_data);
 
   const int numFaultVertices = _data->numFaultVertices;
   bool isFound = false;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -107,9 +107,6 @@
   /// Test adjustSolnLumped().
   void testAdjustSolnLumped(void);
 
-  /// Test updateStateVars().
-  void testUpdateStateVars(void);
-
   /// Test _calcTractionsChange().
   void testCalcTractionsChange(void);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,6 @@
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testAdjustSolnLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,6 @@
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testAdjustSolnLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,6 @@
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testAdjustSolnLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,6 @@
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,6 @@
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testAdjustSolnLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,6 @@
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,6 @@
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,6 @@
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
   CPPUNIT_TEST( testAdjustSolnLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,6 @@
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
   CPPUNIT_TEST( testIntegrateJacobianLumped );
-  CPPUNIT_TEST( testUpdateStateVars );
   CPPUNIT_TEST( testCalcTractionsChange );
   CPPUNIT_TEST( testSplitField );
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,9 +54,9 @@
 	const char* slipTimeFilename;
 	const char* riseTimeFilename;
 	const int* constraintPts;
-	const double* finalSlipE;
-	const double* slipTimeE;
-	const double* riseTimeE;
+	const PylithScalar* finalSlipE;
+	const PylithScalar* slipTimeE;
+	const PylithScalar* riseTimeE;
 	const int numConstraintPts;
       }; // DataStruct
     } // _TestLiuCosSlipFn
@@ -137,9 +137,9 @@
   const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
   const char* riseTimeFilename = "data/line2_risetime.spatialdb";
   const int constraintPts[] = { 3 };
-  const double finalSlipE[] = { 2.3 };
-  const double slipTimeE[] = { 1.2 };
-  const double riseTimeE[] = { 1.4 };
+  const PylithScalar finalSlipE[] = { 2.3 };
+  const PylithScalar slipTimeE[] = { 1.2 };
+  const PylithScalar riseTimeE[] = { 1.4 };
   const int numConstraintPts = 1;
 
   _TestLiuCosSlipFn::DataStruct data = {meshFilename,
@@ -168,10 +168,10 @@
   const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
   const char* riseTimeFilename = "data/tri3_risetime.spatialdb";
   const int constraintPts[] = { 3, 4 };
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				2.4, 0.2};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
   const int numConstraintPts = 2;
 
   _TestLiuCosSlipFn::DataStruct data = {meshFilename,
@@ -200,11 +200,11 @@
   const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
   const char* riseTimeFilename = "data/tet4_risetime.spatialdb";
   const int constraintPts[] = { 3, 4, 5 };
-  const double finalSlipE[] = { 2.3, -0.7, 0.1,
+  const PylithScalar finalSlipE[] = { 2.3, -0.7, 0.1,
 				2.4, -0.8, 0.2,
 				2.5, -0.9, 0.3 };
-  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
-  const double riseTimeE[] = { 1.5, 1.6, 1.7 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const PylithScalar riseTimeE[] = { 1.5, 1.6, 1.7 };
   const int numConstraintPts = 3;
 
   _TestLiuCosSlipFn::DataStruct data = {meshFilename,
@@ -226,11 +226,11 @@
 void
 pylith::faults::TestLiuCosSlipFn::testSlip(void)
 { // testSlip
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				0.0, 0.0};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = 5.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = 5.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -250,32 +250,32 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 2.134;
+  const PylithScalar t = 2.134;
   slipfn.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
 
-    const double slipNorm = (slipMag > 0.0) ?
+    const PylithScalar slipNorm = (slipMag > 0.0) ?
       _slipFn(t - slipTimeE[iPoint], slipMag, riseTimeE[iPoint]) / slipMag :
       0.0;
 
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
     
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
+      const PylithScalar slipE = finalSlipE[iPoint*spaceDim+iDim] * slipNorm;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
   } // for
@@ -286,11 +286,11 @@
 void
 pylith::faults::TestLiuCosSlipFn::testSlipIncr(void)
 { // testSlipIncr
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				0.0, 0.0};
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double riseTimeE[] = { 1.4, 1.5 };
-  const double originTime = 1.064;
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar riseTimeE[] = { 1.4, 1.5 };
+  const PylithScalar originTime = 1.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -310,36 +310,36 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 1.234;
-  const double t1 = 3.635;
+  const PylithScalar t0 = 1.234;
+  const PylithScalar t1 = 3.635;
   slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
-    double slipMag = 0.0;
+    PylithScalar slipMag = 0.0;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       slipMag += pow(finalSlipE[iPoint*spaceDim+iDim], 2);
     slipMag = sqrt(slipMag);
 
-    const double slipNorm0 = (slipMag > 0.0) ?
+    const PylithScalar slipNorm0 = (slipMag > 0.0) ?
       _slipFn(t0 - slipTimeE[iPoint], slipMag, riseTimeE[iPoint]) / slipMag :
       0.0;
-    const double slipNorm1 = (slipMag > 0.0) ?
+    const PylithScalar slipNorm1 = (slipMag > 0.0) ?
       _slipFn(t1 - slipTimeE[iPoint], slipMag, riseTimeE[iPoint]) / slipMag :
       0.0;
 
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double slipE = 
+      const PylithScalar slipE = 
 	finalSlipE[iPoint*spaceDim+iDim] * (slipNorm1-slipNorm0);
       CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, vals[iDim], tolerance);
     } // for
@@ -351,19 +351,19 @@
 void
 pylith::faults::TestLiuCosSlipFn::testSlipTH(void)
 { // testSlipTH
-  const double t = 0.734;
-  const double finalSlip = 4.64;
-  const double riseTime = 3.23;
+  const PylithScalar t = 0.734;
+  const PylithScalar finalSlip = 4.64;
+  const PylithScalar riseTime = 3.23;
 
-  const double slipE = _slipFn(t, finalSlip, riseTime);
+  const PylithScalar slipE = _slipFn(t, finalSlip, riseTime);
 
-  double slip = LiuCosSlipFn::_slipFn(t, finalSlip, riseTime);
+  PylithScalar slip = LiuCosSlipFn::_slipFn(t, finalSlip, riseTime);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE, slip, tolerance);
 
   slip = LiuCosSlipFn::_slipFn(-0.5, finalSlip, riseTime);
-  CPPUNIT_ASSERT_EQUAL(0.0, slip);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), slip);
 
   slip = LiuCosSlipFn::_slipFn(1.0e+10, finalSlip, riseTime);
   CPPUNIT_ASSERT_DOUBLES_EQUAL(finalSlip, slip, tolerance);
@@ -375,7 +375,7 @@
 pylith::faults::TestLiuCosSlipFn::_initialize(topology::Mesh* mesh,
 					      topology::SubMesh* faultMesh,
 					      LiuCosSlipFn* slipfn,
-					      const double originTime)
+					      const PylithScalar originTime)
 { // _initialize
   assert(0 != slipfn);
 
@@ -516,7 +516,7 @@
   slipfn.dbRiseTime(&dbRiseTime);
   
   spatialdata::units::Nondimensional normalizer;
-  const double originTime = 5.353;
+  const PylithScalar originTime = 5.353;
   
   slipfn.initialize(faultMesh, normalizer, originTime);
 
@@ -535,13 +535,13 @@
     slipfn._parameters->get("rise time").section();
   CPPUNIT_ASSERT(!riseTimeSection.isNull());
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
     CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
-    const double* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
+    const PylithScalar* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != finalSlipVertex);
     for (int iDim=0; iDim < spaceDim; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(data.finalSlipE[iPoint*spaceDim+iDim],
@@ -549,13 +549,13 @@
 				   tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
-    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
 				 slipTimeVertex[0], tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, riseTimeSection->getFiberDimension(*v_iter));
-    const double* riseTimeVertex = riseTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* riseTimeVertex = riseTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != riseTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.riseTimeE[iPoint],
 				 riseTimeVertex[0], tolerance);
@@ -564,10 +564,10 @@
 
 // ----------------------------------------------------------------------
 // Slip time function.
-double
-pylith::faults::TestLiuCosSlipFn::_slipFn(const double t,
-					  const double finalSlip,
-					  const double riseTime)
+PylithScalar
+pylith::faults::TestLiuCosSlipFn::_slipFn(const PylithScalar t,
+					  const PylithScalar finalSlip,
+					  const PylithScalar riseTime)
 { // _slipFn
   const float tau = riseTime * 1.525;
   const float tau1 = 0.13 * tau;
@@ -575,7 +575,7 @@
   const float Cn = 
     M_PI /  (1.4 * M_PI * tau1 + 1.2 * tau1 + 0.3 * M_PI * tau2);
   
-  double slip = 0.0;
+  PylithScalar slip = 0.0;
   if (t <= tau1) {
     slip = 0.7*t - 0.7*tau1/M_PI*sin(M_PI*t/tau1) 
       - 0.6*tau1/(0.5*M_PI)*(cos(0.5*M_PI*t/tau1) - 1.0);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestLiuCosSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -110,7 +110,7 @@
   void _initialize(topology::Mesh* mesh,
 		   topology::SubMesh* faultMesh,
 		   LiuCosSlipFn* slipfn,
-		   const double originTime);
+		   const PylithScalar originTime);
 
   /** Test intialize().
    *
@@ -126,9 +126,9 @@
    * @param riseTime Rise time (t95).
    */
   static
-  double _slipFn(const double t,
-		 const double finalSlip,
-		 const double riseTime);
+  PylithScalar _slipFn(const PylithScalar t,
+		 const PylithScalar finalSlip,
+		 const PylithScalar riseTime);
 
 }; // class TestLiuCosSlipFn
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,8 +48,8 @@
 	const char* finalSlipFilename;
 	const char* slipTimeFilename;
 	const int* constraintPts;
-	const double* finalSlipE;
-	const double* slipTimeE;
+	const PylithScalar* finalSlipE;
+	const PylithScalar* slipTimeE;
 	const int numConstraintPts;
       }; // DataStruct
     } // _TestStepSlipFn
@@ -114,8 +114,8 @@
   const char* finalSlipFilename = "data/line2_finalslip.spatialdb";
   const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
   const int constraintPts[] = { 3 };
-  const double finalSlipE[] = { 2.3 };
-  const double slipTimeE[] = { 1.2 };
+  const PylithScalar finalSlipE[] = { 2.3 };
+  const PylithScalar slipTimeE[] = { 1.2 };
   const int numConstraintPts = 1;
 
   _TestStepSlipFn::DataStruct data = {meshFilename,
@@ -141,9 +141,9 @@
   const char* finalSlipFilename = "data/tri3_finalslip.spatialdb";
   const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
   const int constraintPts[] = { 3, 4 };
-  const double finalSlipE[] = { 2.3, 0.1, 
+  const PylithScalar finalSlipE[] = { 2.3, 0.1, 
 				2.4, 0.2 };
-  const double slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
   const int numConstraintPts = 2;
 
   _TestStepSlipFn::DataStruct data = {meshFilename,
@@ -169,10 +169,10 @@
   const char* finalSlipFilename = "data/tet4_finalslip.spatialdb";
   const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
   const int constraintPts[] = { 3, 4, 5 };
-  const double finalSlipE[] = { 2.3, -0.7, 0.1,
+  const PylithScalar finalSlipE[] = { 2.3, -0.7, 0.1,
 				2.4, -0.8, 0.2,
 				2.5, -0.9, 0.3 };
-  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3, 1.4 };
   const int numConstraintPts = 3;
 
   _TestStepSlipFn::DataStruct data = {meshFilename,
@@ -192,9 +192,9 @@
 void
 pylith::faults::TestStepSlipFn::testSlip(void)
 { // testSlip
-  const double slipE[] = { 2.3, 0.1, 
+  const PylithScalar slipE[] = { 2.3, 0.1, 
 			   0.0, 0.0};
-  const double originTime = 5.064;
+  const PylithScalar originTime = 5.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -214,10 +214,10 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 1.234;
+  const PylithScalar t = 1.234;
   slipfn.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
@@ -226,7 +226,7 @@
        ++v_iter, ++iPoint) {
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim)
@@ -240,9 +240,9 @@
 void
 pylith::faults::TestStepSlipFn::testSlipIncr(void)
 { // testSlipIncr
-  const double slipE[] = { 0.0, 0.0, 
+  const PylithScalar slipE[] = { 0.0, 0.0, 
 			   2.4, 0.2};
-  const double originTime = 1.064;
+  const PylithScalar originTime = 1.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -262,11 +262,11 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 1.234;
-  const double t1 = 2.525;
+  const PylithScalar t0 = 1.234;
+  const PylithScalar t1 = 2.525;
   slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
@@ -275,7 +275,7 @@
        ++v_iter, ++iPoint) {
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim)
@@ -290,7 +290,7 @@
 pylith::faults::TestStepSlipFn::_initialize(topology::Mesh* mesh,
 					    topology::SubMesh* faultMesh,
 					    StepSlipFn* slipfn,
-					    const double originTime)
+					    const PylithScalar originTime)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
   CPPUNIT_ASSERT(0 != faultMesh);
@@ -422,7 +422,7 @@
   slipfn.dbSlipTime(&dbSlipTime);
   
   spatialdata::units::Nondimensional normalizer;
-  const double originTime = 5.353;
+  const PylithScalar originTime = 5.353;
   
   slipfn.initialize(faultMesh, normalizer, originTime);
 
@@ -438,13 +438,13 @@
     slipfn._parameters->get("slip time").section();
   CPPUNIT_ASSERT(!slipTimeSection.isNull());
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
     CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
-    const double* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
+    const PylithScalar* finalSlipVertex = finalSlipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != finalSlipVertex);
     for (int iDim=0; iDim < spaceDim; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(data.finalSlipE[iPoint*spaceDim+iDim],
@@ -452,7 +452,7 @@
 				   tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
-    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
 				 slipTimeVertex[0], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestStepSlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -102,7 +102,7 @@
   void _initialize(topology::Mesh* mesh,
 		   topology::SubMesh* faultMesh,
 		   StepSlipFn* slipfn,
-		   const double originTime);
+		   const PylithScalar originTime);
 
   /** Test intialize().
    *

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,8 +55,8 @@
 	const char* slipTimeFilename;
 	const char* timeHistoryFilename;
 	const int* constraintPts;
-	const double* amplitudeE;
-	const double* slipTimeE;
+	const PylithScalar* amplitudeE;
+	const PylithScalar* slipTimeE;
 	const int numConstraintPts;
       }; // DataStruct
     } // _TestTimeHistorySlipFn
@@ -137,8 +137,8 @@
   const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
   const char* timeHistoryFilename = "data/slipfn.timedb";
   const int constraintPts[] = { 3 };
-  const double amplitudeE[] = { 2.3 };
-  const double slipTimeE[] = { 1.2 };
+  const PylithScalar amplitudeE[] = { 2.3 };
+  const PylithScalar slipTimeE[] = { 1.2 };
   const int numConstraintPts = 1;
 
   _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
@@ -166,9 +166,9 @@
   const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
   const char* timeHistoryFilename = "data/slipfn.timedb";
   const int constraintPts[] = { 3, 4 };
-  const double amplitudeE[] = { 2.3, 0.1, 
+  const PylithScalar amplitudeE[] = { 2.3, 0.1, 
 				2.4, 0.2};
-  const double slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
   const int numConstraintPts = 2;
 
   _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
@@ -196,10 +196,10 @@
   const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
   const char* timeHistoryFilename = "data/slipfn.timedb";
   const int constraintPts[] = { 3, 4, 5 };
-  const double amplitudeE[] = { 2.3, -0.7, 0.1,
+  const PylithScalar amplitudeE[] = { 2.3, -0.7, 0.1,
 				2.4, -0.8, 0.2,
 				2.5, -0.9, 0.3 };
-  const double slipTimeE[] = { 1.2, 1.3, 1.4 };
+  const PylithScalar slipTimeE[] = { 1.2, 1.3, 1.4 };
   const int numConstraintPts = 3;
 
   _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
@@ -220,10 +220,10 @@
 void
 pylith::faults::TestTimeHistorySlipFn::testSlip(void)
 { // testSlip
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double slipE[] = { 0.92, 0.04,
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar slipE[] = { 0.92, 0.04,
 			   0.84, 0.07 };
-  const double originTime = 5.064;
+  const PylithScalar originTime = 5.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -244,10 +244,10 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t = 2.0;
+  const PylithScalar t = 2.0;
   slipfn.slip(&slip, originTime+t);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
@@ -256,7 +256,7 @@
        ++v_iter, ++iPoint) {
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
     
     for (int iDim=0; iDim < fiberDim; ++iDim)
@@ -270,10 +270,10 @@
 void
 pylith::faults::TestTimeHistorySlipFn::testSlipIncr(void)
 { // testSlipIncr
-  const double slipTimeE[] = { 1.2, 1.3 };
-  const double slipE[] = { 0.92, 0.04, 
+  const PylithScalar slipTimeE[] = { 1.2, 1.3 };
+  const PylithScalar slipE[] = { 0.92, 0.04, 
 			   0.984, 0.082};
-  const double originTime = 1.064;
+  const PylithScalar originTime = 1.064;
 
   topology::Mesh mesh;
   topology::SubMesh faultMesh;
@@ -294,11 +294,11 @@
   slip.newSection(vertices, spaceDim);
   slip.allocate();
 
-  const double t0 = 3.2;
-  const double t1 = 9.7;
+  const PylithScalar t0 = 3.2;
+  const PylithScalar t1 = 9.7;
   slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   const ALE::Obj<RealSection>& slipSection = slip.section();
   CPPUNIT_ASSERT(!slipSection.isNull());
@@ -308,7 +308,7 @@
 
     const int fiberDim = slipSection->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
-    const double* vals = slipSection->restrictPoint(*v_iter);
+    const PylithScalar* vals = slipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vals);
 
     for (int iDim=0; iDim < fiberDim; ++iDim)
@@ -324,7 +324,7 @@
 					      topology::SubMesh* faultMesh,
 					      TimeHistorySlipFn* slipfn,
 					      spatialdata::spatialdb::TimeHistory* th,
-					      const double originTime)
+					      const PylithScalar originTime)
 { // _initialize
   assert(0 != slipfn);
 
@@ -461,7 +461,7 @@
   slipfn.dbTimeHistory(&dbTimeHistory);
   
   spatialdata::units::Nondimensional normalizer;
-  const double originTime = 5.353;
+  const PylithScalar originTime = 5.353;
   
   slipfn.initialize(faultMesh, normalizer, originTime);
 
@@ -477,13 +477,13 @@
     slipfn._parameters->get("slip time").section();
   CPPUNIT_ASSERT(!slipTimeSection.isNull());
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int iPoint = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++iPoint) {
     CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
-    const double* amplitudeVertex = finalSlipSection->restrictPoint(*v_iter);
+    const PylithScalar* amplitudeVertex = finalSlipSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != amplitudeVertex);
     for (int iDim=0; iDim < spaceDim; ++iDim)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(data.amplitudeE[iPoint*spaceDim+iDim],
@@ -491,7 +491,7 @@
 				   tolerance);
 
     CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
-    const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+    const PylithScalar* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != slipTimeVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
 				 slipTimeVertex[0], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestTimeHistorySlipFn.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -109,7 +109,7 @@
 		   topology::SubMesh* faultMesh,
 		   TimeHistorySlipFn* slipfn,
 		   spatialdata::spatialdb::TimeHistory* th,
-		   const double originTime);
+		   const PylithScalar originTime);
 
   /** Test intialize().
    *
@@ -125,9 +125,9 @@
    * @param riseTime Rise time (t95).
    */
   static
-  double _slipFn(const double t,
-		 const double finalSlip,
-		 const double riseTime);
+  PylithScalar _slipFn(const PylithScalar t,
+		 const PylithScalar finalSlip,
+		 const PylithScalar riseTime);
 
 }; // class TestTimeHistorySlipFn
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_faults_cohesivedata_hh)
 #define pylith_faults_cohesivedata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace faults {
      class CohesiveData;
@@ -45,7 +47,7 @@
   int numCells; ///< Number of cells
   int cellDim; ///< Number of dimensions associated with cell
 
-  double* vertices; ///< Pointer to coordinates of vertices
+  PylithScalar* vertices; ///< Pointer to coordinates of vertices
   int* numCorners; ///< Number of vertices in cell
   int* cells; ///< Pointer to indices of vertices in cells
   int* materialIds; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8Lagrange::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8Lagrange::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8Lagrange::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -111,7 +111,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8Lagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8b::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8b::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8b::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8b.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8c::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8c::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8c::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8c.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8d::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8d::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8d::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8e::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8e::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8e::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,7 +44,7 @@
 
 const int pylith::faults::CohesiveDataHex8f::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8f::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8f::_vertices[] = {
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
   -2.0, -1.0,  1.0,
@@ -107,7 +107,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataHex8g::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8g::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8g::_vertices[] = {
   -2.0, -1.0, -2.0,
   -2.0,  1.0, -2.0,
   -2.0, -1.0,  0.0,
@@ -134,7 +134,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8g.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -56,7 +56,7 @@
 
 const int pylith::faults::CohesiveDataHex8h::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8h::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8h::_vertices[] = {
   -2.0, -1.0, -2.0,
   -2.0,  1.0, -2.0,
   -2.0, -1.0,  0.0,
@@ -133,7 +133,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8h.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 const int pylith::faults::CohesiveDataHex8i::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataHex8i::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataHex8i::_vertices[] = {
   -2.0, -2.0, -2.0,
   -2.0, -1.0, -2.0,
   -3.0,  0.0, -2.0,
@@ -126,7 +126,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataHex8i.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 
 const int pylith::faults::CohesiveDataLine2::_cellDim = 1;
 
-const double pylith::faults::CohesiveDataLine2::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataLine2::_vertices[] = {
   -1.0,
    0.0,
    1.0,
@@ -86,7 +86,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 
 const int pylith::faults::CohesiveDataLine2Lagrange::_cellDim = 1;
 
-const double pylith::faults::CohesiveDataLine2Lagrange::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataLine2Lagrange::_vertices[] = {
   -1.0,
    0.0,
    1.0,
@@ -88,7 +88,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataLine2Lagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataQuad4::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataQuad4Lagrange::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4Lagrange::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4Lagrange::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -114,7 +114,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4Lagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataQuad4b::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4b::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4b::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4b.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataQuad4c::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4c::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4c::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4c.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataQuad4d::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4d::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4d::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,7 +75,7 @@
 
 const int pylith::faults::CohesiveDataQuad4e::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4e::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4e::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -140,7 +140,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,7 +75,7 @@
 
 const int pylith::faults::CohesiveDataQuad4f::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4f::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4f::_vertices[] = {
   -2.0, -1.0,
   -2.0,  1.0,
    0.0, -1.0,
@@ -140,7 +140,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -75,7 +75,7 @@
 
 const int pylith::faults::CohesiveDataQuad4g::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4g::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4g::_vertices[] = {
   -2.0, -2.0,
   -2.0,  0.0,
   -2.0,  2.0,
@@ -144,7 +144,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4g.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -72,7 +72,7 @@
 
 const int pylith::faults::CohesiveDataQuad4h::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataQuad4h::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataQuad4h::_vertices[] = {
   -3.0,  3.0,
   -1.0,  3.0,
    1.0,  3.0,
@@ -158,7 +158,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataQuad4h.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4Lagrange::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4Lagrange::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4Lagrange::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -101,7 +101,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4Lagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4b::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4b::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4b::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4b.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4c::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4c::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4c::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4c.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4d::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4d::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4d::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4f::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4f::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4f::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4g::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4g::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4g::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4g.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4h::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4h::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4h::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4h.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,7 +43,7 @@
 
 const int pylith::faults::CohesiveDataTet4i::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4i::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4i::_vertices[] = {
   -1.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  0.0,  1.0,
@@ -105,7 +105,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4i.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 
 const int pylith::faults::CohesiveDataTet4j::_cellDim = 3;
 
-const double pylith::faults::CohesiveDataTet4j::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTet4j::_vertices[] = {
   -2.0, -1.0,  0.0,
   -2.0,  0.0,  0.0,
   -2.0,  0.0,  1.0,
@@ -97,7 +97,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTet4j.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 const int pylith::faults::CohesiveDataTri3::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 const int pylith::faults::CohesiveDataTri3Lagrange::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3Lagrange::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3Lagrange::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -115,7 +115,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3Lagrange.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 const int pylith::faults::CohesiveDataTri3b::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3b::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3b::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3b.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -60,7 +60,7 @@
 
 const int pylith::faults::CohesiveDataTri3c::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3c::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3c::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -112,7 +112,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3c.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
 
 const int pylith::faults::CohesiveDataTri3d::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3d::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3d::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -134,7 +134,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
 
 const int pylith::faults::CohesiveDataTri3e::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3e::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3e::_vertices[] = {
  -1.0,  0.0,
   0.0,  1.0,
   0.0, -1.0,
@@ -134,7 +134,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -57,7 +57,7 @@
 
 const int pylith::faults::CohesiveDataTri3f::_cellDim = 2;
 
-const double pylith::faults::CohesiveDataTri3f::_vertices[] = {
+const PylithScalar pylith::faults::CohesiveDataTri3f::_vertices[] = {
  -2.0, -1.0,
  -2.0,  1.0,
   0.0, -1.0,
@@ -115,7 +115,7 @@
   spaceDim = _spaceDim;
   numCells = _numCells;
   cellDim = _cellDim;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   numCorners = const_cast<int*>(_numCorners);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDataTri3f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const int _numCells; ///< Number of cells
   static const int _cellDim; ///< Number of dimensions associated with cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _numCorners[]; ///< Number of vertices in cell
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
   fieldIncrOpen(0),
   jacobian(0),
   orientation(0),
-  forcesInitial(0),
+  initialTractions(0),
   area(0),
   fieldIncrSlipE(0),
   slipSlipE(0),

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_faults_cohesivedynldata_hh)
 #define pylith_faults_cohesivedynldata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace faults {
      class CohesiveDynData;
@@ -48,11 +50,11 @@
   int cellDim; ///< Number of dimensions associated with cell
   int numBasis; ///< Number of vertices in cell
   int numQuadPts; ///< Number of quadrature points
-  double* quadPts; ///< Coordinates of quad pts in ref cell
-  double* quadWts; ///< Weights of quadrature points
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDeriv; ///< Derivatives of basis fns at quad pts
-  double* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
+  PylithScalar* quadPts; ///< Coordinates of quad pts in ref cell
+  PylithScalar* quadWts; ///< Weights of quadrature points
+  PylithScalar* basis; ///< Basis fns at quadrature points
+  PylithScalar* basisDeriv; ///< Derivatives of basis fns at quad pts
+  PylithScalar* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
   //@}
 
   /// @name Fault information
@@ -64,22 +66,22 @@
 
   /// @name Input fields
   //@{
-  double* fieldT; ///< Solution field at time t.
-  double* fieldIncrStick; ///< Soln increment field at time t for stick case.
-  double* fieldIncrSlip; ///< Soln increment field at time t for slipping case.
-  double* fieldIncrOpen; ///< Soln increment field at time t for opening case.
-  double* jacobian; ///< Jacobian sparse matrix.
+  PylithScalar* fieldT; ///< Solution field at time t.
+  PylithScalar* fieldIncrStick; ///< Soln increment field at time t for stick case.
+  PylithScalar* fieldIncrSlip; ///< Soln increment field at time t for slipping case.
+  PylithScalar* fieldIncrOpen; ///< Soln increment field at time t for opening case.
+  PylithScalar* jacobian; ///< Jacobian sparse matrix.
   //@}
 
   /// @name Calculated values.
   //@{
-  double* orientation; ///< Expected values for fault orientation.
-  double* area; ///< Expected values for fault area.
-  double* forcesInitial; ///< Expected values for initial forces.
-  double* fieldIncrSlipE; ///< Expected values for solution increment for slipping case.
-  double* slipSlipE; ///< Expected values for slip for slipping case.
-  double* fieldIncrOpenE; ///< Expected values for solution increment for opening case.
-  double* slipOpenE; ///< Expected values for slip for opening case.
+  PylithScalar* orientation; ///< Expected values for fault orientation.
+  PylithScalar* area; ///< Expected values for fault area.
+  PylithScalar* initialTractions; ///< Expected values for initial tractions.
+  PylithScalar* fieldIncrSlipE; ///< Expected values for solution increment for slipping case.
+  PylithScalar* slipSlipE; ///< Expected values for slip for slipping case.
+  PylithScalar* fieldIncrOpenE; ///< Expected values for solution increment for opening case.
+  PylithScalar* slipOpenE; ///< Expected values for slip for opening case.
 
   int* constraintVertices; ///< Expected points for constraint vertices
   int numConstraintVert; ///< Number of constraint vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,25 +48,25 @@
 
 const int pylith::faults::CohesiveDynDataHex8::_numQuadPts = 4;
 
-const double pylith::faults::CohesiveDynDataHex8::_quadPts[] = {
-  -0.57735027, -0.57735027,
-  +0.57735027, -0.57735027,
-  +0.57735027, +0.57735027,
-  -0.57735027, +0.57735027,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_quadPts[] = {
+  -1.0, -1.0,
+  +1.0, -1.0,
+  +1.0, +1.0,
+  -1.0, +1.0
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_quadWts[] = {
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_quadWts[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_basis[] = {
-  0.62200847,  0.16666667,  0.0446582,   0.16666667,
-  0.16666667,  0.62200847,  0.16666667,   0.0446582,
-  0.0446582,   0.16666667,  0.62200847,  0.16666667,
-  0.16666667,   0.0446582,  0.16666667,  0.62200847,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_basis[] = {
+  1.0, 0.0, 0.0, 0.0,
+  0.0, 1.0, 0.0, 0.0,
+  0.0, 0.0, 1.0, 0.0,
+  0.0, 0.0, 0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_basisDeriv[] = {
   -0.39433757, -0.39433757,
   +0.39433757, -0.10566243,
   +0.10566243, +0.10566243,
@@ -88,7 +88,7 @@
   -0.39433757, +0.39433757,
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_verticesRef[] = {
   -1.0, -1.0,
   +1.0, -1.0,
   +1.0, +1.0,
@@ -102,1254 +102,1008 @@
 const char* pylith::faults::CohesiveDynDataHex8::_initialTractFilename = 
   "data/hex8_initialtract.spatialdb";
 
-const double pylith::faults::CohesiveDynDataHex8::_fieldT[] = {
-  4.1, 6.1, 8.1,
-  4.2, 6.2, 8.2,
-  4.3, 6.3, 8.3,
-  4.4, 6.4, 8.4,
-  4.5, 6.5, 8.5, // 6
-  4.6, 6.6, 8.6, // 7
-  4.7, 6.7, 8.7, // 8
-  4.8, 6.8, 8.8, // 9
-  4.9, 6.9, 8.9,
-  4.0, 6.0, 8.0,
-  5.1, 7.1, 9.1,
-  5.2, 7.2, 9.2,
-  5.3, 7.3, 9.3, // 14
-  5.5, 7.5, 9.5, // 15
-  5.7, 7.7, 9.7, // 16
-  5.9, 7.9, 9.9, // 17
-  5.4, 7.4, 9.4, // 18
-  5.6, 7.6, 9.6, // 19
-  5.8, 7.8, 9.8, // 20
-  5.0, 7.0, 9.0, // 21
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldT[] = {
+  4.1, 2.1, 3.1,
+  4.2, 2.2, 3.2,
+  4.3, 2.3, 3.3,
+  4.4, 2.4, 3.4,
+  4.5, 2.5, 3.5, // 6
+  4.6, 2.6, 3.6, // 7
+  4.7, 2.7, 3.7, // 8
+  4.8, 2.8, 3.8, // 9
+  4.9, 2.9, 3.9,
+  4.0, 2.0, 3.0,
+  4.1, 2.1, 3.1,
+  4.2, 2.2, 3.2,
+  4.5, 2.5, 3.5, // 14
+  4.6, 2.6, 3.6, // 15
+  4.7, 2.7, 3.7, // 16
+  4.8, 2.8, 3.8, // 17
+  4.4, 2.4, 3.4, // 18
+  4.6, 2.6, 3.6, // 19
+  4.8, 2.8, 3.8, // 20
+  4.0, 2.0, 3.0, // 21
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
-const double pylith::faults::CohesiveDynDataHex8::_jacobian[] = {
-    1,  0.1,  0.2,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_jacobian[] = {
+  1.0,  0.1,  0.2, // 2x
   0.3,  0.4,  0.5,
   0.6,  0.7,  0.8,
-  0.9,    1,  1.1,
+  0.9,  1.0,  1.1,
   1.2,  1.3,  1.4,
   1.5,  1.6,  1.7,
-  1.8,  1.9,    2,
+  1.8,  1.9,  2.0,
   2.1,  2.2,  2.3,
   2.4,  2.5,  2.6,
   2.7,  2.8,  2.9,
-    3,  3.1,  3.2,
+  3.0,  3.1,  3.2,
   3.3,  3.4,  3.5,
   3.6,  3.7,  3.8,
-  3.9,    4,  4.1,
+  3.9,  4.0,  4.1,
   4.2,  4.3,  4.4,
   4.5,  4.6,  4.7,
-  4.8,  4.9,    5,
+  4.8,  4.9,  5.0,
   5.1,  5.2,  5.3,
   5.4,  5.5,  5.6,
   5.7,  5.8,  5.9,
-    6,    1,  6.1,
-  6.2,  6.3,  6.4,
-  6.5,  6.6,  6.7,
-  6.8,  6.9,    7,
-  7.1,  7.2,  7.3,
-  7.4,  7.5,  7.6,
-  7.7,  7.8,  7.9,
-    8,  8.1,  8.2,
-  8.3,  8.4,  8.5,
-  8.6,  8.7,  8.8,
-  8.9,    9,  9.1,
-  9.2,  9.3,  9.4,
-  9.5,  9.6,  9.7,
-  9.8,  9.9,   10,
- 10.1, 10.2, 10.3,
- 10.4, 10.5, 10.6,
- 10.7, 10.8, 10.9,
-   11, 11.1, 11.2,
- 11.3, 11.4, 11.5,
- 11.6, 11.7, 11.8,
- 11.9,   12,    1,
- 12.1, 12.2, 12.3,
- 12.4, 12.5, 12.6,
- 12.7, 12.8, 12.9,
-   13, 13.1, 13.2,
- 13.3, 13.4, 13.5,
- 13.6, 13.7, 13.8,
- 13.9,   14, 14.1,
- 14.2, 14.3, 14.4,
- 14.5, 14.6, 14.7,
- 14.8, 14.9,   15,
- 15.1, 15.2, 15.3,
- 15.4, 15.5, 15.6,
- 15.7, 15.8, 15.9,
-   16, 16.1, 16.2,
- 16.3, 16.4, 16.5,
- 16.6, 16.7, 16.8,
- 16.9,   17, 17.1,
- 17.2, 17.3, 17.4,
- 17.5, 17.6, 17.7,
- 17.8, 17.9,   18,
-    1, 18.1, 18.2,
- 18.3, 18.4, 18.5,
- 18.6, 18.7, 18.8,
- 18.9,   19, 19.1,
- 19.2, 19.3, 19.4,
- 19.5, 19.6, 19.7,
- 19.8, 19.9,   20,
- 20.1, 20.2, 20.3,
- 20.4, 20.5, 20.6,
- 20.7, 20.8, 20.9,
-   21, 21.1, 21.2,
- 21.3, 21.4, 21.5,
- 21.6, 21.7, 21.8,
- 21.9,   22, 22.1,
- 22.2, 22.3, 22.4,
- 22.5, 22.6, 22.7,
- 22.8, 22.9,   23,
- 23.1, 23.2, 23.3,
- 23.4, 23.5, 23.6,
- 23.7, 23.8, 23.9,
-   24,    1, 24.1,
- 24.2, 24.3, 24.4,
- 24.5, 24.6, 24.7,
- 24.8, 24.9,   25,
- 25.1, 25.2, 25.3,
- 25.4, 25.5, 25.6,
- 25.7, 25.8, 25.9,
-   26, 26.1, 26.2,
- 26.3, 26.4, 26.5,
- 26.6, 26.7, 26.8,
- 26.9,   27, 27.1,
- 27.2, 27.3, 27.4,
- 27.5, 27.6, 27.7,
- 27.8, 27.9,   28,
- 28.1, 28.2, 28.3,
- 28.4, 28.5, 28.6,
- 28.7, 28.8, 28.9,
-   29, 29.1, 29.2,
- 29.3, 29.4, 29.5,
- 29.6, 29.7, 29.8,
- 29.9,   30,    1,
- 30.1, 30.2, 30.3,
- 30.4, 30.5, 30.6,
- 30.7, 30.8, 30.9,
-   31, 31.1, 31.2,
- 31.3, 31.4, 31.5,
- 31.6, 31.7, 31.8,
- 31.9,   32, 32.1,
- 32.2, 32.3, 32.4,
- 32.5, 32.6, 32.7,
- 32.8, 32.9,   33,
- 33.1, 33.2, 33.3,
- 33.4, 33.5, 33.6,
- 33.7, 33.8, 33.9,
-   34, 34.1, 34.2,
- 34.3, 34.4, 34.5,
- 34.6, 34.7, 34.8,
- 34.9,   35, 35.1,
- 35.2, 35.3, 35.4,
- 35.5, 35.6, 35.7,
- 35.8, 35.9,   36,
-    1, 36.1, 36.2,
- 36.3, 36.4, 36.5,
- 36.6, 36.7, 36.8,
- 36.9,   37, 37.1,
- 37.2, 37.3, 37.4,
- 37.5, 37.6, 37.7,
- 37.8, 37.9,   38,
- 38.1, 38.2, 38.3,
- 38.4, 38.5, 38.6,
- 38.7, 38.8, 38.9,
-   39, 39.1, 39.2,
- 39.3, 39.4, 39.5,
- 39.6, 39.7, 39.8,
- 39.9,   40, 40.1,
- 40.2, 40.3, 40.4,
- 40.5, 40.6, 40.7,
- 40.8, 40.9,   41,
- 41.1, 41.2, 41.3,
- 41.4, 41.5, 41.6,
- 41.7, 41.8, 41.9,
-   42,    1, 42.1,
- 42.2, 42.3, 42.4,
- 42.5, 42.6, 42.7,
- 42.8, 42.9,   43,
- 43.1, 43.2, 43.3,
- 43.4, 43.5, 43.6,
- 43.7, 43.8, 43.9,
-   44, 44.1, 44.2,
- 44.3, 44.4, 44.5,
- 44.6, 44.7, 44.8,
- 44.9,   45, 45.1,
- 45.2, 45.3, 45.4,
- 45.5, 45.6, 45.7,
- 45.8, 45.9,   46,
- 46.1, 46.2, 46.3,
- 46.4, 46.5, 46.6,
- 46.7, 46.8, 46.9,
-   47, 47.1, 47.2,
- 47.3, 47.4, 47.5,
- 47.6, 47.7, 47.8,
- 47.9,   48,    1,
- 48.1, 48.2, 48.3,
- 48.4, 48.5, 48.6,
- 48.7, 48.8, 48.9,
-   49, 49.1, 49.2,
- 49.3, 49.4, 49.5,
- 49.6, 49.7, 49.8,
- 49.9,   50, 50.1,
- 50.2, 50.3, 50.4,
- 50.5, 50.6, 50.7,
- 50.8, 50.9,   51,
- 51.1, 51.2, 51.3,
- 51.4, 51.5, 51.6,
- 51.7, 51.8, 51.9,
-   52, 52.1, 52.2,
- 52.3, 52.4, 52.5,
- 52.6, 52.7, 52.8,
- 52.9,   53, 53.1,
- 53.2, 53.3, 53.4,
- 53.5, 53.6, 53.7,
- 53.8, 53.9,   54,
-    1, 54.1, 54.2,
- 54.3, 54.4, 54.5,
- 54.6, 54.7, 54.8,
- 54.9,   55, 55.1,
- 55.2, 55.3, 55.4,
- 55.5, 55.6, 55.7,
- 55.8, 55.9,   56,
- 56.1, 56.2, 56.3,
- 56.4, 56.5, 56.6,
- 56.7, 56.8, 56.9,
-   57, 57.1, 57.2,
- 57.3, 57.4, 57.5,
- 57.6, 57.7, 57.8,
- 57.9,   58, 58.1,
- 58.2, 58.3, 58.4,
- 58.5, 58.6, 58.7,
- 58.8, 58.9,   59,
- 59.1, 59.2, 59.3,
- 59.4, 59.5, 59.6,
- 59.7, 59.8, 59.9,
-   60,    1, 60.1,
- 60.2, 60.3, 60.4,
- 60.5, 60.6, 60.7,
- 60.8, 60.9,   61,
- 61.1, 61.2, 61.3,
- 61.4, 61.5, 61.6,
- 61.7, 61.8, 61.9,
-   62, 62.1, 62.2,
- 62.3, 62.4, 62.5,
- 62.6, 62.7, 62.8,
- 62.9,   63, 63.1,
- 63.2, 63.3, 63.4,
- 63.5, 63.6, 63.7,
- 63.8, 63.9,   64,
- 64.1, 64.2, 64.3,
- 64.4, 64.5, 64.6,
- 64.7, 64.8, 64.9,
-   65, 65.1, 65.2,
- 65.3, 65.4, 65.5,
- 65.6, 65.7, 65.8,
- 65.9,   66,    1,
- 66.1, 66.2, 66.3,
- 66.4, 66.5, 66.6,
- 66.7, 66.8, 66.9,
-   67, 67.1, 67.2,
- 67.3, 67.4, 67.5,
- 67.6, 67.7, 67.8,
- 67.9,   68, 68.1,
- 68.2, 68.3, 68.4,
- 68.5, 68.6, 68.7,
- 68.8, 68.9,   69,
- 69.1, 69.2, 69.3,
- 69.4, 69.5, 69.6,
- 69.7, 69.8, 69.9,
-   70, 70.1, 70.2,
- 70.3, 70.4, 70.5,
- 70.6, 70.7, 70.8,
- 70.9,   71, 71.1,
- 71.2, 71.3, 71.4,
- 71.5, 71.6, 71.7,
- 71.8, 71.9,   72,
-    1, 72.1, 72.2,
- 72.3, 72.4, 72.5,
- 72.6, 72.7, 72.8,
- 72.9,   73, 73.1,
- 73.2, 73.3, 73.4,
- 73.5, 73.6, 73.7,
- 73.8, 73.9,   74,
- 74.1, 74.2, 74.3,
- 74.4, 74.5, 74.6,
- 74.7, 74.8, 74.9,
-   75, 75.1, 75.2,
- 75.3, 75.4, 75.5,
- 75.6, 75.7,    1,
- 75.8, 75.9,   76,
- 76.1, 76.2, 76.3,
- 76.4, 76.5, 76.6,
- 76.7, 76.8, 76.9,
-   77, 77.1, 77.2,
- 77.3, 77.4, 77.5,
- 77.6, 77.7, 77.8,
- 77.9,    1,   78,
- 78.1, 78.2, 78.3,
- 78.4, 78.5, 78.6,
- 78.7, 78.8, 78.9,
-   79, 79.1, 79.2,
- 79.3, 79.4, 79.5,
- 79.6, 79.7, 79.8,
- 79.9,   80, 80.1,
- 80.2, 80.3, 80.4,
- 80.5, 80.6, 80.7,
- 80.8, 80.9,   81,
- 81.1, 81.2, 81.3,
-    1, 81.4, 81.5,
- 81.6, 81.7, 81.8,
- 81.9,   82, 82.1,
- 82.2, 82.3, 82.4,
- 82.5, 82.6, 82.7,
- 82.8, 82.9,   83,
- 83.1, 83.2, 83.3,
- 83.4, 83.5, 83.6,
- 83.7, 83.8,    1,
- 83.9,   84, 84.1,
- 84.2, 84.3, 84.4,
- 84.5, 84.6, 84.7,
- 84.8, 84.9,   85,
- 85.1, 85.2, 85.3,
- 85.4, 85.5, 85.6,
- 85.7, 85.8, 85.9,
-   86, 86.1, 86.2,
- 86.3, 86.4, 86.5,
- 86.6, 86.7, 86.8,
- 86.9,   87, 87.1,
- 87.2,    1, 87.3,
- 87.4, 87.5, 87.6,
- 87.7, 87.8, 87.9,
-   88, 88.1, 88.2,
- 88.3, 88.4, 88.5,
- 88.6, 88.7, 88.8,
- 88.9,   89, 89.1,
- 89.2, 89.3, 89.4,
- 89.5, 89.6, 89.7,
-    1, 89.8, 89.9,
-   90, 90.1, 90.2,
- 90.3, 90.4, 90.5,
- 90.6, 90.7, 90.8,
- 90.9,   91, 91.1,
- 91.2, 91.3, 91.4,
- 91.5, 91.6, 91.7,
- 91.8, 91.9,   92,
- 92.1, 92.2, 92.3,
- 92.4, 92.5, 92.6,
- 92.7, 92.8, 92.9,
-   93, 93.1, 93.2,
- 93.3, 93.4,    1,
- 93.5, 93.6, 93.7,
- 93.8, 93.9,   94,
- 94.1, 94.2, 94.3,
- 94.4, 94.5, 94.6,
- 94.7, 94.8, 94.9,
-   95, 95.1, 95.2,
- 95.3, 95.4, 95.5,
- 95.6,    1, 95.7,
- 95.8, 95.9,   96,
- 96.1, 96.2, 96.3,
- 96.4, 96.5, 96.6,
- 96.7, 96.8, 96.9,
-   97, 97.1, 97.2,
- 97.3, 97.4, 97.5,
- 97.6, 97.7, 97.8,
- 97.9,   98, 98.1,
- 98.2, 98.3, 98.4,
- 98.5, 98.6, 98.7,
- 98.8, 98.9,   99,
-    1, 99.1, 99.2,
- 99.3, 99.4, 99.5,
- 99.6, 99.7, 99.8,
- 99.9,  100,100.1,
-100.2,100.3,100.4,
-100.5,100.6,100.7,
-100.8,100.9,  101,
-101.1,101.2,101.3,
-101.4,101.5,    1,
-101.6,101.7,101.8,
-101.9,  102,102.1,
-102.2,102.3,102.4,
-102.5,102.6,102.7,
-102.8,102.9,  103,
-103.1,103.2,103.3,
-103.4,103.5,103.6,
-103.7,103.8,103.9,
-  104,104.1,104.2,
-104.3,104.4,104.5,
-104.6,104.7,104.8,
-104.9,    1,  105,
-105.1,105.2,105.3,
-105.4,105.5,105.6,
-105.7,105.8,105.9,
-  106,106.1,106.2,
-106.3,106.4,106.5,
-106.6,106.7,106.8,
-106.9,  107,107.1,
-107.2,107.3,107.4,
-    1,107.5,107.6,
-107.7,107.8,107.9,
-  108,108.1,108.2,
-108.3,108.4,108.5,
-108.6,108.7,108.8,
-108.9,  109,109.1,
-109.2,109.3,109.4,
-109.5,109.6,109.7,
-109.8,109.9,  110,
-110.1,110.2,110.3,
-110.4,110.5,110.6,
-110.7,110.8,110.9,
-  111,111.1,    1,
-111.2,111.3,111.4,
-111.5,111.6,111.7,
-111.8,111.9,  112,
-112.1,112.2,112.3,
-112.4,112.5,112.6,
-112.7,112.8,112.9,
-  113,113.1,113.2,
-113.3,    1,113.4,
-113.5,113.6,113.7,
-113.8,113.9,  114,
-114.1,114.2,114.3,
-114.4,114.5,114.6,
-114.7,114.8,114.9,
-  115,115.1,115.2,
-115.3,115.4,115.5,
-115.6,115.7,115.8,
-115.9,  116,116.1,
-116.2,116.3,116.4,
-116.5,116.6,116.7,
-    1,116.8,116.9,
-  117,117.1,117.2,
-117.3,117.4,117.5,
-117.6,117.7,117.8,
-117.9,  118,118.1,
-118.2,118.3,118.4,
-118.5,118.6,118.7,
-118.8,118.9,  119,
-119.1,119.2,    1,
-119.3,119.4,119.5,
-119.6,119.7,119.8,
-119.9,  120,120.1,
-120.2,120.3,120.4,
-120.5,120.6,120.7,
-120.8,120.9,  121,
-121.1,121.2,121.3,
-121.4,121.5,121.6,
-121.7,121.8,121.9,
-  122,122.1,122.2,
-122.3,122.4,122.5,
-122.6,    1,122.7,
-122.8,122.9,  123,
-123.1,123.2,123.3,
-123.4,123.5,123.6,
-123.7,123.8,123.9,
-  124,124.1,124.2,
-124.3,124.4,124.5,
-124.6,124.7,124.8,
-124.9,  125,125.1,
-    1,125.2,125.3,
-125.4,125.5,125.6,
-125.7,125.8,125.9,
-  126,126.1,126.2,
-126.3,126.4,126.5,
-126.6,126.7,126.8,
-126.9,  127,127.1,
-127.2,127.3,127.4,
-127.5,127.6,127.7,
-127.8,127.9,  128,
-128.1,128.2,128.3,
-128.4,128.5,128.6,
-128.7,128.8,    1,
-128.9,  129,129.1,
-129.2,129.3,129.4,
-129.5,129.6,129.7,
-129.8,129.9,  130,
-130.1,130.2,130.3,
-130.4,130.5,130.6,
-130.7,130.8,130.9,
-  131,    1,131.1,
-131.2,131.3,131.4,
-131.5,131.6,131.7,
-131.8,131.9,  132,
-132.1,132.2,132.3,
-132.4,132.5,132.6,
-132.7,132.8,132.9,
-  133,133.1,133.2,
-133.3,133.4,133.5,
-133.6,133.7,133.8,
-133.9,  134,134.1,
-134.2,134.3,134.4,
-    1,134.5,134.6,
-134.7,134.8,134.9,
-  135,135.1,135.2,
-135.3,135.4,135.5,
-135.6,135.7,135.8,
-135.9,  136,136.1,
-136.2,136.3,136.4,
-136.5,136.6,136.7,
-136.8,136.9,    1,
-  137,137.1,137.2,
-137.3,137.4,137.5,
-137.6,137.7,137.8,
-137.9,  138,138.1,
-138.2,138.3,138.4,
-138.5,138.6,138.7,
-138.8,138.9,  139,
-139.1,139.2,139.3,
-139.4,139.5,139.6,
-139.7,139.8,139.9,
-  140,140.1,140.2,
-140.3,    1,140.4,
-140.5,140.6,140.7,
-140.8,140.9,  141,
-141.1,141.2,141.3,
-141.4,141.5,141.6,
-141.7,141.8,141.9,
-  142,142.1,142.2,
-142.3,142.4,142.5,
-142.6,142.7,142.8,
-    1,142.9,  143,
-143.1,143.2,143.3,
-143.4,143.5,143.6,
-143.7,143.8,143.9,
-  144,144.1,144.2,
-144.3,144.4,144.5,
-144.6,144.7,144.8,
-144.9,  145,145.1,
-145.2,145.3,145.4,
-145.5,145.6,145.7,
-145.8,145.9,  146,
-146.1,146.2,146.3,
-146.4,146.5,146.6,
-146.7,146.8,146.9,
-  147,147.1,147.2,
-147.3,147.4,147.5,
-147.6,147.7,147.8,
-147.9,  148,148.1,
-148.2,148.3,148.4,
-148.5,148.6,148.7,
-148.8,    1,148.9,
-  149,149.1,149.2,
-149.3,149.4,149.5,
-149.6,149.7,149.8,
-149.9,  150,150.1,
-150.2,150.3,150.4,
-150.5,150.6,150.7,
-150.8,150.9,  151,
-151.1,151.2,151.3,
-151.4,151.5,151.6,
-151.7,151.8,151.9,
-  152,152.1,152.2,
-152.3,152.4,152.5,
-152.6,152.7,152.8,
-152.9,  153,153.1,
-153.2,153.3,153.4,
-153.5,153.6,153.7,
-153.8,153.9,  154,
-154.1,154.2,154.3,
-154.4,154.5,154.6,
-154.7,154.8,    1,
-154.9,  155,155.1,
-155.2,155.3,155.4,
-155.5,155.6,155.7,
-155.8,155.9,  156,
-156.1,156.2,156.3,
-156.4,156.5,156.6,
-156.7,156.8,156.9,
-  157,157.1,157.2,
-157.3,157.4,157.5,
-157.6,157.7,157.8,
-157.9,  158,158.1,
-158.2,158.3,158.4,
-158.5,158.6,158.7,
-158.8,158.9,  159,
-159.1,159.2,159.3,
-159.4,159.5,159.6,
-159.7,159.8,159.9,
-  160,160.1,160.2,
-160.3,160.4,160.5,
-160.6,160.7,160.8,
-    1,160.9,  161,
-161.1,161.2,161.3,
-161.4,161.5,161.6,
-161.7,161.8,161.9,
-  162,162.1,162.2,
-162.3,162.4,162.5,
-162.6,162.7,162.8,
-162.9,  163,163.1,
-163.2,163.3,163.4,
-163.5,163.6,163.7,
-163.8,163.9,  164,
-164.1,164.2,164.3,
-164.4,164.5,164.6,
-164.7,164.8,164.9,
-  165,165.1,165.2,
-165.3,165.4,165.5,
-165.6,165.7,165.8,
-165.9,  166,166.1,
-166.2,166.3,166.4,
-166.5,166.6,166.7,
-166.8,    1,166.9,
-  167,167.1,167.2,
-167.3,167.4,167.5,
-167.6,167.7,167.8,
-167.9,  168,168.1,
-168.2,168.3,168.4,
-168.5,168.6,168.7,
-168.8,168.9,  169,
-169.1,169.2,169.3,
-169.4,169.5,169.6,
-169.7,169.8,169.9,
-  170,170.1,170.2,
-170.3,170.4,170.5,
-170.6,170.7,170.8,
-170.9,  171,171.1,
-171.2,171.3,171.4,
-171.5,171.6,171.7,
-171.8,171.9,  172,
-172.1,172.2,172.3,
-172.4,172.5,172.6,
-172.7,172.8,    1,
-172.9,  173,173.1,
-173.2,173.3,173.4,
-173.5,173.6,173.7,
-173.8,173.9,  174,
-174.1,174.2,174.3,
-174.4,174.5,174.6,
-174.7,174.8,174.9,
-  175,175.1,175.2,
-175.3,175.4,175.5,
-175.6,175.7,175.8,
-175.9,  176,176.1,
-176.2,176.3,176.4,
-176.5,176.6,176.7,
-176.8,176.9,  177,
-177.1,177.2,177.3,
-177.4,177.5,177.6,
-177.7,177.8,177.9,
-  178,178.1,178.2,
-178.3,178.4,178.5,
-178.6,178.7,178.8,
-    1,178.9,  179,
-179.1,179.2,179.3,
-179.4,179.5,179.6,
-179.7,179.8,179.9,
-  180,180.1,180.2,
-180.3,180.4,180.5,
-180.6,180.7,180.8,
-180.9,  181,181.1,
-181.2,181.3,181.4,
-181.5,181.6,181.7,
-181.8,181.9,  182,
-182.1,182.2,182.3,
-182.4,182.5,182.6,
-182.7,182.8,182.9,
-  183,183.1,183.2,
-183.3,183.4,183.5,
-183.6,183.7,183.8,
-183.9,  184,184.1,
-184.2,184.3,184.4,
-184.5,184.6,184.7,
-184.8,    1,184.9,
-  185,185.1,185.2,
-185.3,185.4,185.5,
-185.6,185.7,185.8,
-185.9,  186,186.1,
-186.2,186.3,186.4,
-186.5,186.6,186.7,
-186.8,186.9,  187,
-187.1,187.2,187.3,
-187.4,187.5,187.6,
-187.7,187.8,187.9,
-  188,188.1,188.2,
-188.3,188.4,188.5,
-188.6,188.7,188.8,
-188.9,  189,189.1,
-189.2,189.3,189.4,
-189.5,189.6,189.7,
-189.8,189.9,  190,
-190.1,190.2,190.3,
-190.4,190.5,190.6,
-190.7,190.8,    1,
-190.9,  191,191.1,
-191.2,191.3,191.4,
-191.5,191.6,191.7,
-191.8,191.9,  192,
-192.1,192.2,192.3,
-192.4,192.5,192.6,
-192.7,192.8,192.9,
-  193,193.1,193.2,
-193.3,193.4,193.5,
-193.6,193.7,193.8,
-193.9,  194,194.1,
-194.2,194.3,194.4,
-194.5,194.6,194.7,
-194.8,194.9,  195,
-195.1,195.2,195.3,
-195.4,195.5,195.6,
-195.7,195.8,195.9,
-  196,196.1,196.2,
-196.3,196.4,196.5,
-196.6,196.7,196.8,
-    1,196.9,  197,
-197.1,197.2,197.3,
-197.4,197.5,197.6,
-197.7,197.8,197.9,
-  198,198.1,198.2,
-198.3,198.4,198.5,
-198.6,198.7,198.8,
-198.9,  199,199.1,
-199.2,199.3,199.4,
-199.5,199.6,199.7,
-199.8,199.9,  200,
-200.1,200.2,200.3,
-200.4,200.5,200.6,
-200.7,200.8,200.9,
-  201,201.1,201.2,
-201.3,201.4,201.5,
-201.6,201.7,201.8,
-201.9,  202,202.1,
-202.2,202.3,202.4,
-202.5,202.6,202.7,
-202.8,    1,202.9,
-  203,203.1,203.2,
-203.3,203.4,203.5,
-203.6,203.7,203.8,
-203.9,  204,204.1,
-204.2,204.3,204.4,
-204.5,204.6,204.7,
-204.8,204.9,  205,
-205.1,205.2,205.3,
-205.4,205.5,205.6,
-205.7,205.8,205.9,
-  206,206.1,206.2,
-206.3,206.4,206.5,
-206.6,206.7,206.8,
-206.9,  207,207.1,
-207.2,207.3,207.4,
-207.5,207.6,207.7,
-207.8,207.9,  208,
-208.1,208.2,208.3,
-208.4,208.5,208.6,
-208.7,208.8,    1,
-208.9,  209,209.1,
-209.2,209.3,209.4,
-209.5,209.6,209.7,
-209.8,209.9,  210,
-210.1,210.2,210.3,
-210.4,210.5,210.6,
-210.7,210.8,210.9,
-  211,211.1,211.2,
-211.3,211.4,211.5,
-211.6,211.7,211.8,
-211.9,  212,212.1,
-212.2,212.3,212.4,
-212.5,212.6,212.7,
-212.8,212.9,  213,
-213.1,213.2,213.3,
-213.4,213.5,213.6,
-213.7,213.8,213.9,
-  214,214.1,214.2,
-214.3,214.4,214.5,
-214.6,214.7,214.8,
-    1,214.9,  215,
-215.1,215.2,215.3,
-215.4,215.5,215.6,
-215.7,215.8,215.9,
-  216,216.1,   -1,
-216.2,216.3,216.4,
-216.5,216.6,216.7,
-216.8,216.9,  217,
-217.1,217.2,217.3,
-217.4,217.5,217.6,
-217.7,217.8,217.9,
-  218,218.1,218.2,
-218.3,218.4,218.5,
-218.6,218.7,218.8,
-218.9,  219,219.1,
-219.2,219.3,219.4,
-219.5,219.6,219.7,
-219.8,219.9,  220,
-220.1,220.2,220.3,
-220.4,220.5,220.6,
-220.7,    1,220.8,
-220.9,  221,221.1,
-221.2,221.3,221.4,
-221.5,221.6,221.7,
-   -1,221.8,221.9,
-  222,222.1,222.2,
-222.3,222.4,222.5,
-222.6,222.7,222.8,
-222.9,  223,223.1,
-223.2,223.3,223.4,
-223.5,223.6,223.7,
-223.8,223.9,  224,
-224.1,224.2,224.3,
-224.4,224.5,224.6,
-224.7,224.8,224.9,
-  225,225.1,225.2,
-225.3,225.4,225.5,
-225.6,225.7,225.8,
-225.9,  226,226.1,
-226.2,226.3,226.4,
-226.5,226.6,    1,
-226.7,226.8,226.9,
-  227,227.1,227.2,
-227.3,227.4,227.5,
-227.6,   -1,227.7,
-227.8,227.9,  228,
-228.1,228.2,228.3,
-228.4,228.5,228.6,
-228.7,228.8,228.9,
-  229,229.1,229.2,
-229.3,229.4,229.5,
-229.6,229.7,229.8,
-229.9,  230,230.1,
-230.2,230.3,230.4,
-230.5,230.6,230.7,
-230.8,230.9,  231,
-231.1,231.2,231.3,
-231.4,231.5,231.6,
-231.7,231.8,231.9,
-  232,232.1,232.2,
-232.3,232.4,232.5,
-    1,232.6,232.7,
-232.8,232.9,  233,
-233.1,233.2,233.3,
-233.4,233.5,233.6,
-233.7,233.8,   -1,
-233.9,  234,234.1,
-234.2,234.3,234.4,
-234.5,234.6,234.7,
-234.8,234.9,  235,
-235.1,235.2,235.3,
-235.4,235.5,235.6,
-235.7,235.8,235.9,
-  236,236.1,236.2,
-236.3,236.4,236.5,
-236.6,236.7,236.8,
-236.9,  237,237.1,
-237.2,237.3,237.4,
-237.5,237.6,237.7,
-237.8,237.9,  238,
-238.1,238.2,238.3,
-238.4,    1,238.5,
-238.6,238.7,238.8,
-238.9,  239,239.1,
-239.2,239.3,239.4,
-   -1,239.5,239.6,
-239.7,239.8,239.9,
-  240,240.1,240.2,
-240.3,240.4,240.5,
-240.6,240.7,240.8,
-240.9,  241,241.1,
-241.2,241.3,241.4,
-241.5,241.6,241.7,
-241.8,241.9,  242,
-242.1,242.2,242.3,
-242.4,242.5,242.6,
-242.7,242.8,242.9,
-  243,243.1,243.2,
-243.3,243.4,243.5,
-243.6,243.7,243.8,
-243.9,  244,244.1,
-244.2,244.3,    1,
-244.4,244.5,244.6,
-244.7,244.8,244.9,
-  245,245.1,245.2,
-245.3,   -1,245.4,
-245.5,245.6,245.7,
-245.8,245.9,  246,
-246.1,246.2,246.3,
-246.4,246.5,246.6,
-246.7,246.8,246.9,
-  247,247.1,247.2,
-247.3,247.4,247.5,
-247.6,247.7,247.8,
-247.9,  248,248.1,
-248.2,248.3,248.4,
-248.5,248.6,248.7,
-248.8,248.9,  249,
-249.1,249.2,249.3,
-249.4,249.5,249.6,
-249.7,249.8,249.9,
-  250,250.1,250.2,
-    1,250.3,250.4,
-250.5,250.6,250.7,
-250.8,250.9,  251,
-251.1,251.2,251.3,
-251.4,251.5,   -1,
-251.6,251.7,251.8,
-251.9,  252,252.1,
-252.2,252.3,252.4,
-252.5,252.6,252.7,
-252.8,252.9,  253,
-253.1,253.2,253.3,
-253.4,253.5,253.6,
-253.7,253.8,253.9,
-  254,254.1,254.2,
-254.3,254.4,254.5,
-254.6,254.7,254.8,
-254.9,  255,255.1,
-255.2,255.3,255.4,
-255.5,255.6,255.7,
-255.8,255.9,  256,
-256.1,    1,256.2,
-256.3,256.4,256.5,
-256.6,256.7,256.8,
-256.9,  257,257.1,
-   -1,257.2,257.3,
-257.4,257.5,257.6,
-257.7,257.8,257.9,
-  258,258.1,258.2,
-258.3,258.4,258.5,
-258.6,258.7,258.8,
-258.9,  259,259.1,
-259.2,259.3,259.4,
-259.5,259.6,259.7,
-259.8,259.9,  260,
-260.1,260.2,260.3,
-260.4,260.5,260.6,
-260.7,260.8,260.9,
-  261,261.1,261.2,
-261.3,261.4,261.5,
-261.6,261.7,261.8,
-261.9,  262,    1,
-262.1,262.2,262.3,
-262.4,262.5,262.6,
-262.7,262.8,262.9,
-  263,   -1,263.1,
-263.2,263.3,263.4,
-263.5,263.6,263.7,
-263.8,263.9,  264,
-264.1,264.2,264.3,
-264.4,264.5,264.6,
-264.7,264.8,264.9,
-  265,265.1,265.2,
-265.3,265.4,265.5,
-265.6,265.7,265.8,
-265.9,  266,266.1,
-266.2,266.3,266.4,
-266.5,266.6,266.7,
-266.8,266.9,  267,
-267.1,267.2,267.3,
-267.4,267.5,267.6,
-267.7,267.8,267.9,
-    1,  268,268.1,
-268.2,268.3,268.4,
-268.5,268.6,268.7,
-268.8,268.9,  269,
-269.1,269.2,   -1,
-269.3,269.4,269.5,
-269.6,269.7,269.8,
-269.9,  270,270.1,
-270.2,270.3,270.4,
-270.5,270.6,270.7,
-270.8,270.9,  271,
-271.1,271.2,271.3,
-271.4,271.5,271.6,
-271.7,271.8,271.9,
-  272,272.1,272.2,
-272.3,272.4,272.5,
-272.6,272.7,272.8,
-272.9,  273,273.1,
-273.2,273.3,273.4,
-273.5,273.6,273.7,
-273.8,    1,273.9,
-  274,274.1,274.2,
-274.3,274.4,274.5,
-274.6,274.7,274.8,
-   -1,274.9,  275,
-275.1,275.2,275.3,
-275.4,275.5,275.6,
-275.7,275.8,275.9,
-  276,276.1,276.2,
-276.3,276.4,276.5,
-276.6,276.7,276.8,
-276.9,  277,277.1,
-277.2,277.3,277.4,
-277.5,277.6,277.7,
-277.8,277.9,  278,
-278.1,278.2,278.3,
-278.4,278.5,278.6,
-278.7,278.8,278.9,
-  279,279.1,279.2,
-279.3,279.4,279.5,
-279.6,279.7,    1,
-279.8,279.9,  280,
-280.1,280.2,280.3,
-280.4,280.5,280.6,
-280.7,   -1,280.8,
-280.9,  281,281.1,
-281.2,281.3,281.4,
-281.5,281.6,281.7,
-281.8,281.9,  282,
-282.1,    1,282.2,
-282.3,282.4,282.5,
-282.6,282.7,282.8,
-282.9,  283,283.1,
-283.2,283.3,283.4,
-283.5,283.6,283.7,
-283.8,283.9,  284,
-284.1,284.2,284.3,
-284.4,   -1,284.5,
-284.6,284.7,284.8,
-284.9,  285,285.1,
-285.2,285.3,285.4,
-285.5,285.6,285.7,
-285.8,285.9,  286,
-286.1,286.2,286.3,
-286.4,286.5,286.6,
-286.7,286.8,286.9,
-  287,287.1,287.2,
-287.3,287.4,287.5,
-287.6,287.7,287.8,
-287.9,  288,    1,
-288.1,288.2,288.3,
-288.4,288.5,288.6,
-288.7,288.8,288.9,
-  289,289.1,289.2,
-289.3,289.4,289.5,
-289.6,289.7,289.8,
-289.9,  290,290.1,
-290.2,290.3,   -1,
-290.4,290.5,290.6,
-290.7,290.8,290.9,
-  291,291.1,291.2,
-291.3,291.4,291.5,
-291.6,291.7,291.8,
-291.9,  292,292.1,
-292.2,292.3,292.4,
-292.5,292.6,292.7,
-292.8,292.9,  293,
-293.1,293.2,293.3,
-293.4,293.5,293.6,
-    1,293.7,293.8,
-293.9,  294,294.1,
-294.2,294.3,294.4,
-294.5,294.6,294.7,
-294.8,294.9,  295,
-295.1,295.2,295.3,
-295.4,295.5,295.6,
-295.7,295.8,295.9,
-   -1,  296,296.1,
-296.2,296.3,296.4,
-296.5,296.6,296.7,
-296.8,296.9,  297,
-297.1,297.2,297.3,
-297.4,297.5,297.6,
-297.7,297.8,297.9,
-  298,298.1,298.2,
-298.3,298.4,298.5,
-298.6,298.7,298.8,
-298.9,  299,299.1,
-299.2,299.3,299.4,
-299.5,299.6,299.7,
-299.8,    1,299.9,
-  300,300.1,300.2,
-300.3,300.4,300.5,
-300.6,300.7,300.8,
-300.9,  301,301.1,
-301.2,301.3,301.4,
-301.5,301.6,301.7,
-301.8,301.9,  302,
-302.1,   -1,302.2,
-302.3,302.4,302.5,
-302.6,302.7,302.8,
-302.9,  303,303.1,
-303.2,303.3,303.4,
-303.5,303.6,303.7,
-303.8,303.9,  304,
-304.1,304.2,304.3,
-304.4,304.5,304.6,
-304.7,304.8,304.9,
-  305,305.1,305.2,
-305.3,305.4,305.5,
-305.6,305.7,    1,
-305.8,305.9,  306,
-306.1,306.2,306.3,
-306.4,306.5,306.6,
-306.7,306.8,306.9,
-  307,307.1,307.2,
-307.3,307.4,307.5,
-307.6,307.7,307.8,
-307.9,  308,   -1,
-308.1,308.2,308.3,
-308.4,308.5,308.6,
-308.7,308.8,308.9,
-  309,309.1,309.2,
-309.3,309.4,309.5,
-309.6,309.7,309.8,
-309.9,  310,310.1,
-310.2,310.3,310.4,
-310.5,310.6,310.7,
-310.8,310.9,  311,
-311.1,311.2,311.3,
-    1,311.4,311.5,
-311.6,311.7,311.8,
-311.9,  312,312.1,
-312.2,312.3,312.4,
-312.5,312.6,312.7,
-312.8,312.9,  313,
-313.1,313.2,313.3,
-313.4,313.5,313.6,
-   -1,313.7,313.8,
-313.9,  314,314.1,
-314.2,314.3,314.4,
-314.5,314.6,314.7,
-314.8,314.9,  315,
-315.1,315.2,315.3,
-315.4,315.5,315.6,
-315.7,315.8,315.9,
-  316,316.1,316.2,
-316.3,316.4,316.5,
-316.6,316.7,316.8,
-316.9,  317,317.1,
-317.2,317.3,317.4,
-317.5,    1,317.6,
-317.7,317.8,317.9,
-  318,318.1,318.2,
-318.3,318.4,318.5,
-318.6,318.7,318.8,
-318.9,  319,319.1,
-319.2,319.3,319.4,
-319.5,319.6,319.7,
-319.8,   -1,319.9,
-  320,320.1,320.2,
-320.3,320.4,320.5,
-320.6,320.7,320.8,
-320.9,  321,321.1,
-321.2,321.3,321.4,
-321.5,321.6,321.7,
-321.8,321.9,  322,
-322.1,322.2,322.3,
-322.4,322.5,322.6,
-322.7,322.8,322.9,
-  323,323.1,323.2,
-323.3,323.4,    1,
-323.5,323.6,323.7,
-323.8,323.9,  324,
-324.1,324.2,324.3,
-324.4,324.5,324.6,
-324.7,324.8,324.9,
-  325,325.1,325.2,
-325.3,325.4,325.5,
-325.6,325.7,   -1,
-325.8,325.9,  326,
-326.1,326.2,326.3,
-326.4,326.5,326.6,
-326.7,326.8,326.9,
-  327,327.1,327.2,
-327.3,327.4,327.5,
-327.6,327.7,327.8,
-327.9,  328,328.1,
-328.2,328.3,328.4,
-328.5,328.6,328.7,
-328.8,328.9,  329,
-    1,329.1,329.2,
-329.3,329.4,329.5,
-329.6,329.7,329.8,
-329.9,  330,330.1,
-330.2,330.3,330.4,
-330.5,330.6,330.7,
-330.8,330.9,  331,
-331.1,331.2,331.3,
-   -1,331.4,331.5,
-331.6,331.7,331.8,
-331.9,  332,332.1,
-332.2,332.3,332.4,
-332.5,332.6,332.7,
-332.8,332.9,  333,
-333.1,333.2,333.3,
-333.4,333.5,333.6,
-333.7,333.8,333.9,
-  334,334.1,334.2,
-334.3,334.4,334.5,
-334.6,334.7,334.8,
-334.9,  335,335.1,
-335.2,    1,335.3,
-335.4,335.5,335.6,
-335.7,335.8,335.9,
-  336,336.1,336.2,
-336.3,336.4,336.5,
-336.6,336.7,336.8,
-336.9,  337,337.1,
-337.2,337.3,337.4,
-337.5,   -1,337.6,
-337.7,337.8,337.9,
-  338,338.1,338.2,
-338.3,338.4,338.5,
-338.6,338.7,338.8,
-338.9,  339,339.1,
-339.2,339.3,339.4,
-339.5,339.6,339.7,
-339.8,339.9,  340,
-340.1,340.2,340.3,
-340.4,340.5,340.6,
-340.7,340.8,340.9,
-  341,341.1,    1,
-341.2,341.3,341.4,
-341.5,341.6,341.7,
-341.8,341.9,  342,
-342.1,342.2,342.3,
-342.4,342.5,342.6,
-342.7,342.8,342.9,
-  343,343.1,343.2,
-343.3,343.4,   -1,
-343.5,343.6,343.7,
-343.8,343.9,  344,
-344.1,344.2,344.3,
-344.4,344.5,344.6,
-344.7,344.8,344.9,
-  345,345.1,345.2,
-345.3,345.4,345.5,
-345.6,345.7,345.8,
-345.9,  346,346.1,
-346.2,346.3,346.4,
-346.5,346.6,346.7,
-    1,346.8,346.9,
-  347,347.1,347.2,
-347.3,347.4,347.5,
-347.6,347.7,347.8,
-347.9,  348,348.1,
-348.2,348.3,348.4,
-348.5,348.6,348.7,
-348.8,348.9,  349,
-   -1,349.1,349.2,
-349.3,349.4,349.5,
-349.6,349.7,349.8,
-349.9,  350,350.1,
-350.2,350.3,350.4,
+  3.0,  4.1,  1.2, // 2y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 2z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 3x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 3y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 3z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 4x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 4y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 4z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 5x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 5y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 5z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 6x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+ +6.0, -0.5, -0.6, // 6
+ -0.7, -0.8, -0.9, // 7
+ -1.0, -0.8, -0.7, // 8
+ -0.6, -0.5, -0.4, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 6y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.5, +6.1, -1.0, // 6
+ -1.1, -1.2, -1.3, // 7
+ -1.4, -1.3, -1.2, // 8
+ -1.1, -1.0, -0.9, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 6z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.6, -1.0, +6.2, // 6
+ -0.5, -0.6, -0.7, // 7
+ -0.8, -0.9, -0.8, // 8
+ -0.7, -0.6, -0.5, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 7x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+ -0.7, -1.1, -0.5, // 6
+ +6.3, -0.8, -0.7, // 7
+ -0.6, -0.5, -0.4, // 8
+ -0.3, -0.2, -0.1, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 7y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.8, -1.2, -0.6, // 6
+ -0.8, +6.4, -0.3, // 7
+ -0.4, -0.5, -0.6, // 8
+ -0.7, -0.8, -0.9, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 7z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.9, -1.3, -0.7, // 6
+ -0.7, -0.3, +6.5, // 7
+ -0.3, -0.8, -0.7, // 8
+ -0.6, -0.9, -0.7, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 8x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+ -1.0, -1.4, -0.8, // 6
+ -0.6, -0.4, -0.3, // 7
+ +6.6, -1.1, -0.8, // 8
+ -0.7, -0.6, -0.5, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 8y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.8, -1.3, -0.9, // 6
+ -0.5, -0.5, -0.8, // 7
+ -1.1, +6.7, -0.8, // 8
+ -0.9, -1.0, -1.1, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 8z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.7, -1.2, -0.8, // 6
+ -0.4, -0.6, -0.7, // 7
+ -0.8, -0.8, +6.8, // 8
+ -1.0, -1.1, -1.2, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 9x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+ -0.6, -1.1, -0.7, // 6
+ -0.3, -0.7, -0.6, // 7
+ -0.7, -0.9, -1.0, // 8
+ +6.9, -0.5, -0.4, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 9y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.5, -1.0, -0.6, // 6
+ -0.2, -0.8, -0.9, // 7
+ -0.6, -1.0, -1.1, // 8
+ -0.5, +6.0, -1.2, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 9z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+ -0.4, -0.9, -0.5, // 6
+ -0.1, -0.9, -0.7, // 7
+ -0.5, -1.1, -1.2, // 8
+ -0.4, -1.2, +6.1, // 9
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 10x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 10y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 10z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 11x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 11y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 11z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 12x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 12y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 12z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 13x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 13y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 13z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  3.2,  5.3,  3.4,
+  1.5,  4.6,  2.7,
+  2.8,  3.9,  2.0,
+  2.1,  6.2,  2.3,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 14x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+ +7.0, -0.5, -0.6, // 14
+ -0.7, -0.8, -0.9, // 15
+ -1.0, -0.8, -0.7, // 16
+ -0.6, -0.5, -0.4, // 17
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 14y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.5, +7.1, -1.0, // 14
+ -1.1, -1.2, -1.3, // 15
+ -1.4, -1.3, -1.2, // 16
+ -1.1, -1.0, -0.9, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 14z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.6, -1.0, +7.2, // 14
+ -0.5, -0.6, -0.7, // 15
+ -0.8, -0.9, -0.8, // 16
+ -0.7, -0.6, -0.5, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 15x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+ -0.7, -1.1, -0.5, // 14
+ +7.3, -0.8, -0.7, // 15
+ -0.6, -0.5, -0.4, // 16
+ -0.3, -0.2, -0.1, // 17
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 15y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.8, -1.2, -0.6, // 14
+ -0.8, +7.4, -0.3, // 15
+ -0.4, -0.5, -0.6, // 16
+ -0.7, -0.8, -0.9, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 15z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.9, -1.3, -0.7, // 14
+ -0.7, -0.3, +7.5, // 15
+ -0.3, -0.8, -0.7, // 16
+ -0.6, -0.9, -0.7, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 16x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+ -1.0, -1.4, -0.8, // 14
+ -0.6, -0.4, -0.3, // 15
+ +7.6, -1.1, -0.8, // 16
+ -0.7, -0.6, -0.5, // 17
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 16y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.8, -1.3, -0.9, // 14
+ -0.5, -0.5, -0.8, // 15
+ -1.1, +7.7, -0.8, // 16
+ -0.9, -1.0, -1.1, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 16z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.7, -1.2, -0.8, // 14
+ -0.4, -0.6, -0.7, // 15
+ -0.8, -0.8, +7.8, // 16
+ -1.0, -1.1, -1.2, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  1.0,  0.1,  0.2, // 17x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  3.3,  3.4,  3.5,
+  3.6,  3.7,  3.8,
+  3.9,  4.0,  4.1,
+  4.2,  4.3,  4.4,
+  4.5,  4.6,  4.7,
+ -0.6, -1.1, -0.7, // 14
+ -0.3, -0.7, -0.6, // 15
+ -0.7, -0.9, -1.0, // 16
+ +7.9, -0.5, -0.4, // 17
+  4.8,  4.9,  5.0,
+  5.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  5.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 17y
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.5, -1.0, -0.6, // 14
+ -0.2, -0.8, -0.9, // 15
+ -0.6, -1.0, -1.1, // 16
+ -0.5, +7.0, -1.2, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
+  3.0,  4.1,  1.2, // 17z
+  3.3,  6.4,  4.5,
+  3.6,  3.7,  6.8,
+  3.9,  7.0,  6.1,
+  1.4,  6.5,  2.6,
+  1.7,  9.8,  2.9,
+  1.0,  5.1,  3.2,
+  1.3,  3.4,  3.5,
+  2.6,  2.7,  3.8,
+  2.9,  4.0,  4.1,
+  2.2,  4.3,  4.4,
+  3.5,  4.6,  4.7,
+ -0.4, -0.9, -0.5, // 14
+ -0.1, -0.9, -0.7, // 15
+ -0.5, -1.1, -1.2, // 16
+ -0.4, -1.2, +7.1, // 17
+  3.8,  4.9,  5.0,
+  4.1,  5.2,  5.3,
+  5.4,  5.5,  5.6,
+  7.7,  5.8,  5.9,
 };
 
-// ----------------------------------------------------------------------
-// Computed values
-// ----------------------------------------------------------------------
-
-const double pylith::faults::CohesiveDynDataHex8::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_orientation[] = {
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_area[] = {
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_area[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_forcesInitial[] = {
-  3.063397471, -1.063397471, +2.063397471, 
-  3.121132498, -1.121132498, +2.121132498, 
-  3.178867525, -1.178867525, +2.178867525,
-  3.236602552, -1.236602552, +2.236602552,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_initialTractions[] = {
+  +3.0, -1.0, +2.0,
+  +3.1, -1.1, +2.1,
+  +3.2, -1.2, +2.2,
+  +3.3, -1.3, +2.3,
 };
 
 
@@ -1361,27 +1115,27 @@
 // Stick case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataHex8::_fieldIncrStick[] = {
-  0.1, 2.1, 28.1,
-  0.2, 2.2, 28.2,
-  0.3, 2.3, 28.3,
-  0.4, 2.4, 28.4,
-  0.5, 2.5, 28.5, // 6
-  0.6, 2.6, 28.6, // 7
-  0.7, 2.7, 28.7, // 8
-  0.8, 2.8, 28.8, // 9
-  0.9, 2.9, 28.9,
-  0.0, 2.0, 28.0,
-  1.1, 3.1, 29.1,
-  1.2, 3.2, 29.2,
-  1.3, 3.3, 29.3, // 14
-  1.5, 3.5, 29.5, // 15
-  1.7, 3.7, 29.7, // 16
-  1.9, 3.9, 29.9, // 17
-  1.4, 3.4, -89.4, // 18
-  1.6, 3.6, -89.6, // 19
-  1.8, 3.8, -89.8, // 20
-  1.0, 3.0, -89.0, // 21
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldIncrStick[] = {
+  0.1, 2.1, 1.1,
+  0.2, 2.2, 1.2,
+  0.3, 2.3, 1.3,
+  0.4, 2.4, 1.4,
+  0.5, 2.5, 1.5, // 6
+  0.6, 2.6, 1.6, // 7
+  0.7, 2.7, 1.7, // 8
+  0.8, 2.8, 1.8, // 9
+  0.9, 2.9, 1.9,
+  0.0, 2.0, 1.0,
+  1.1, 3.1, 2.1,
+  1.2, 3.2, 2.2,
+  1.3, 3.3, 2.3, // 14
+  1.5, 3.5, 2.5, // 15
+  1.7, 3.7, 2.7, // 16
+  1.9, 3.9, 2.9, // 17
+  41.4, 3.4, 2.4, // 18
+  41.6, 3.6, 2.6, // 19
+  41.8, 3.8, 2.8, // 20
+  41.0, 3.0, 2.0, // 21
 };
 
 // No change in fieldIncr
@@ -1391,116 +1145,116 @@
 // Slip case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataHex8::_fieldIncrSlip[] = {
-  5.1, 7.1, 9.1,
-  5.2, 7.2, 9.2,
-  5.3, 7.3, 9.3,
-  5.4, 7.4, 9.4,
-  5.5, 7.5, 9.5, // 6
-  5.6, 7.6, 9.6, // 7
-  5.7, 7.7, 9.7, // 8
-  5.8, 7.8, 9.8, // 9
-  5.9, 7.9, 9.9,
-  5.0, 7.0, 9.0,
-  6.1, 8.1, 10.1,
-  6.2, 8.2, 10.2,
-  6.3, 8.3, 10.3, // 14
-  6.5, 8.5, 10.5, // 15
-  6.7, 8.7, 10.7, // 16
-  6.9, 8.9, 10.9, // 17
-  -6.4, -8.4, -10.4, // 18
-  -6.6, -8.6, -10.6, // 19
-  -6.8, -8.8, -10.8, // 20
-  -6.0, -8.0, -10.0, // 21
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldIncrSlip[] = {
+  1.1, 2.1, 0.1,
+  1.2, 2.2, 0.2,
+  1.3, 2.3, 0.3,
+  1.4, 2.4, 0.4,
+  1.5, 2.5, 0.5, // 6
+  1.6, 2.6, 0.6, // 7
+  1.7, 2.7, 0.7, // 8
+  1.8, 2.8, 0.8, // 9
+  1.9, 2.9, 0.9,
+  1.0, 2.0, 0.0,
+  1.1, 2.1, 0.1,
+  1.2, 2.2, 0.2,
+  1.5, 2.5, 0.5, // 14
+  1.6, 2.6, 0.6, // 15
+  1.7, 2.7, 0.7, // 16
+  1.8, 2.8, 0.8, // 17
+  1.4, 2.4, 0.4, // 18
+  1.6, 2.6, 0.6, // 19
+  1.8, 2.8, 0.8, // 20
+  1.0, 2.0, 0.2, // 21
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataHex8::_fieldIncrSlipE[] = {
-   5.100000000000,   7.100000000000,   9.100000000000,
-   5.200000000000,   7.200000000000,   9.200000000000,
-   5.300000000000,   7.300000000000,   9.300000000000,
-   5.400000000000,   7.400000000000,   9.400000000000,
-   5.500000000000,   7.504978662071,   9.495178588558,
-   5.600000000000,   7.604183996601,   9.595885186290,
-   5.700000000000,   7.703622549597,   9.696395508868,
-   5.800000000000,   7.803201980792,   9.796783683690,
-   5.900000000000,   7.900000000000,   9.900000000000,
-   5.000000000000,   7.000000000000,   9.000000000000,
-   6.100000000000,   8.100000000000,  10.100000000000,
-   6.200000000000,   8.200000000000,  10.200000000000,
-   6.300000000000,   8.295021337929,  10.304821411442,
-   6.500000000000,   8.495816003399,  10.504114813710,
-   6.700000000000,   8.696377450403,  10.703604491132,
-   6.900000000000,   8.896798019208,  10.903216316310,
-  -5.824264068712,  -7.824264068712, -10.400000000000,
-  -6.024264068712,  -8.024264068712, -10.600000000000,
-  -6.224264068712,  -8.224264068712, -10.800000000000,
-  -5.424264068712,  -7.424264068712, -10.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldIncrSlipE[] = {
+   1.100000000000,   2.100000000000,   0.100000000000,
+   1.200000000000,   2.200000000000,   0.200000000000,
+   1.300000000000,   2.300000000000,   0.300000000000,
+   1.400000000000,   2.400000000000,   0.400000000000,
+   1.500000000000,   3.745293503266,   1.312227205500,
+   1.600000000000,   3.294980394575,   1.386664200491,
+   1.700000000000,   3.591763265955,   1.582543631245,
+   1.800000000000,   3.703107773803,   1.671356663600,
+   1.900000000000,   2.900000000000,   0.900000000000,
+   1.000000000000,   2.000000000000,   0.000000000000,
+   1.100000000000,   2.100000000000,   0.100000000000,
+   1.200000000000,   2.200000000000,   0.200000000000,
+   1.500000000000,   1.254706496734,  -0.312227205500,
+   1.600000000000,   1.905019605425,  -0.186664200491,
+   1.700000000000,   1.808236734045,  -0.182543631245,
+   1.800000000000,   1.896892226197,  -0.071356663600,
+   1.400000000000,   0.328479469127,  -1.239953753608,
+   1.600000000000,   0.293941190358,  -1.262585961634,
+   1.800000000000,   0.259995967920,  -1.286431883494,
+   1.000000000000,   0.342606428329,  -1.125914857337,
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_slipSlipE[] = {
-   0.009957324142,   0.009642822884,   0.000000000000,
-   0.008367993202,   0.008229627421,   0.000000000000,
-   0.007245099193,   0.007208982264,   0.000000000000,
-   0.006403961584,   0.006432632620,   0.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_slipSlipE[] = {
+   2.490587006532,  -1.624454410999,   0.000000000000,
+   1.389960789150,  -1.573328400983,   0.000000000000,
+   1.783526531910,  -1.765087262491,   0.000000000000,
+   1.806215547605,  -1.742713327201,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
 // Open case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataHex8::_fieldIncrOpen[] = {
-  5.1, 7.1, 9.1,
-  5.2, 7.2, 9.2,
-  5.3, 7.3, 9.3,
-  5.4, 7.4, 9.4,
-  5.5, 7.5, 9.5, // 6
-  5.6, 7.6, 9.6, // 7
-  5.7, 7.7, 9.7, // 8
-  5.8, 7.8, 9.8, // 9
-  5.9, 7.9, 9.9,
-  5.0, 7.0, 9.0,
-  6.1, 8.1, 10.1,
-  6.2, 8.2, 10.2,
-  6.3, 8.3, 10.3, // 14
-  6.5, 8.5, 10.5, // 15
-  6.7, 8.7, 10.7, // 16
-  6.9, 8.9, 10.9, // 17
-  6.4, 8.4, 10.4, // 18
-  6.6, 8.6, 10.6, // 19
-  6.8, 8.8, 10.8, // 20
-  6.0, 8.0, 10.0, // 21
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldIncrOpen[] = {
+  1.1, 2.1, 0.1,
+  1.2, 2.2, 0.2,
+  1.3, 2.3, 0.3,
+  1.4, 2.4, 0.4,
+  1.5, 2.5, 0.5, // 6
+  1.6, 2.6, 0.6, // 7
+  1.7, 2.7, 0.7, // 8
+  1.8, 2.8, 0.8, // 9
+  1.9, 2.9, 0.9,
+  1.0, 2.0, 0.0,
+  1.1, 2.1, 0.1,
+  1.2, 2.2, 0.2,
+  1.5, 2.5, 0.5, // 14
+  1.6, 2.6, 0.6, // 15
+  1.7, 2.7, 0.7, // 16
+  1.8, 2.8, 0.8, // 17
+ -10.4, 2.4, 0.4, // 18
+ -10.6, 2.6, 0.6, // 19
+ -10.8, 2.8, 0.8, // 20
+ -10.0, 2.0, 0.2, // 21
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataHex8::_fieldIncrOpenE[] = {
-   5.100000000000,   7.100000000000,   9.100000000000,
-   5.200000000000,   7.200000000000,   9.200000000000,
-   5.300000000000,   7.300000000000,   9.300000000000,
-   5.400000000000,   7.400000000000,   9.400000000000,
-   5.500000000000,   7.442454974471,   9.676228188067,
-   5.600000000000,   7.555401305851,   9.759311696661,
-   5.700000000000,   7.664478333931,   9.847182893464,
-   5.800000000000,   7.782595639240,   9.927084810574,
-   5.900000000000,   7.900000000000,   9.900000000000,
-   5.000000000000,   7.000000000000,   9.000000000000,
-   6.100000000000,   8.100000000000,  10.100000000000,
-   6.200000000000,   8.200000000000,  10.200000000000,
-   6.300000000000,   8.357545025529,  10.123771811933,
-   6.500000000000,   8.544598694149,  10.340688303339,
-   6.700000000000,   8.735521666069,  10.552817106536,
-   6.900000000000,   8.917404360760,  10.772915189426,
-  -5.400000000000,  -7.400000000000,  -9.400000000000,
-  -5.600000000000,  -7.600000000000,  -9.600000000000,
-  -5.800000000000,  -7.800000000000,  -9.800000000000,
-  -5.000000000000,  -7.000000000000,  -9.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_fieldIncrOpenE[] = {
+   1.100000000000,   2.100000000000,   0.100000000000,
+   1.200000000000,   2.200000000000,   0.200000000000,
+   1.300000000000,   2.300000000000,   0.300000000000,
+   1.400000000000,   2.400000000000,   0.400000000000,
+   3.473386524898,   3.450458773757,   1.061077907335,
+   3.302801176428,   2.966499592247,   1.097759351340,
+   3.627558189277,   3.252968860584,   1.264881344260,
+   3.475698668581,   3.241605816971,   1.233144951440,
+   1.900000000000,   2.900000000000,   0.900000000000,
+   1.000000000000,   2.000000000000,   0.000000000000,
+   1.100000000000,   2.100000000000,   0.100000000000,
+   1.200000000000,   2.200000000000,   0.200000000000,
+  -0.473386524898,   1.549541226243,  -0.061077907335,
+  -0.102801176428,   2.233500407753,   0.102240648660,
+  -0.227558189277,   2.147031139416,   0.135118655740,
+   0.124301331419,   2.358394183029,   0.366855048560,
+  -4.400000000000,  -2.400000000000,  -3.400000000000,
+  -4.600000000000,  -2.600000000000,  -3.600000000000,
+  -4.800000000000,  -2.800000000000,  -3.800000000000,
+  -4.000000000000,  -2.000000000000,  -3.000000000000,
 };
 
-const double pylith::faults::CohesiveDynDataHex8::_slipOpenE[] = {
-  -0.115090051058,  -0.352456376134,   0.000000000000,
-  -0.089197388297,  -0.318623393323,   0.000000000000,
-  -0.071043332138,  -0.294365786929,   0.000000000000,
-  -0.034808721519,  -0.254169621148,   0.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataHex8::_slipOpenE[] = {
+   1.900917547514,  -1.122155814671,   3.946773049797,
+   0.732999184495,  -0.995518702680,   3.405602352856,
+   1.105937721169,  -1.129762688519,   3.855116378553,
+   0.883211633942,  -0.866289902880,   3.351397337162,
 };
 
 // ----------------------------------------------------------------------
@@ -1511,36 +1265,36 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   initialTractFilename = const_cast<char*>(_initialTractFilename);
 
-  fieldT = const_cast<double*>(_fieldT);
-  jacobian = const_cast<double*>(_jacobian);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  forcesInitial = const_cast<double*>(_forcesInitial);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  initialTractions = const_cast<PylithScalar*>(_initialTractions);
 
   constraintVertices = const_cast<int*>(_constraintVertices);
   numConstraintVert = _numConstraintVert;  
 
   // Stick
-  fieldIncrStick = const_cast<double*>(_fieldIncrStick);
+  fieldIncrStick = const_cast<PylithScalar*>(_fieldIncrStick);
 
   // Slip
-  fieldIncrSlip = const_cast<double*>(_fieldIncrSlip);
-  fieldIncrSlipE = const_cast<double*>(_fieldIncrSlipE);
-  slipSlipE = const_cast<double*>(_slipSlipE);
+  fieldIncrSlip = const_cast<PylithScalar*>(_fieldIncrSlip);
+  fieldIncrSlipE = const_cast<PylithScalar*>(_fieldIncrSlipE);
+  slipSlipE = const_cast<PylithScalar*>(_slipSlipE);
 
   // Open
-  fieldIncrOpen = const_cast<double*>(_fieldIncrOpen);
-  fieldIncrOpenE = const_cast<double*>(_fieldIncrOpenE);
-  slipOpenE = const_cast<double*>(_slipOpenE);
+  fieldIncrOpen = const_cast<PylithScalar*>(_fieldIncrOpen);
+  fieldIncrOpenE = const_cast<PylithScalar*>(_fieldIncrOpenE);
+  slipOpenE = const_cast<PylithScalar*>(_slipOpenE);
 } // constructor
 
 pylith::faults::CohesiveDynDataHex8::~CohesiveDynDataHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,29 +49,29 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
   static const char* _initialTractFilename; ///< Name of db for initial tractions.
 
-  static const double _fieldT[]; ///< Solution field at time t.
-  static const double _fieldIncrStick[]; ///< Solution increment at time t for stick case.
-  static const double _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
-  static const double _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
-  static const double _jacobian[]; ///< Jacobian sparse matrix.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncrStick[]; ///< Solution increment at time t for stick case.
+  static const PylithScalar _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
+  static const PylithScalar _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
+  static const PylithScalar _jacobian[]; ///< Jacobian sparse matrix.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _forcesInitial[]; ///< Expected values for initial forces.
-  static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
-  static const double _slipSlipE[]; ///< Expected values for slip for slip case.
-  static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
-  static const double _slipOpenE[]; ///< Expected values for slip for opening case.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _initialTractions[]; ///< Expected values for initial tractions.
+  static const PylithScalar _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
+  static const PylithScalar _slipSlipE[]; ///< Expected values for slip for slip case.
+  static const PylithScalar _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
+  static const PylithScalar _slipOpenE[]; ///< Expected values for slip for opening case.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _numConstraintVert; ///< Number of constraint vertices
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,27 +59,27 @@
 
 const int pylith::faults::CohesiveDynDataQuad4::_numBasis = 2;
 
-const int pylith::faults::CohesiveDynDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataQuad4::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveDynDataQuad4::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -90,241 +90,199 @@
 const char* pylith::faults::CohesiveDynDataQuad4::_initialTractFilename = 
   "data/quad4_initialtract.spatialdb";
 
-const double pylith::faults::CohesiveDynDataQuad4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2,
   8.3, 9.3, // 4
   8.4, 9.4, // 5
   8.5, 9.5,
   8.6, 9.6,
-  8.7, 9.7, // 8
-  8.9, 9.9, // 9
+  8.3, 9.3, // 8
+  8.4, 9.4, // 9
   8.8, 9.8, // 10
   8.0, 9.0, // 11
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
-const double pylith::faults::CohesiveDynDataQuad4::_jacobian[] = {
-   1, 0.1,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_jacobian[] = {
+ 0.1, 0.1, // 2x
  0.2, 0.3,
  0.4, 0.5,
  0.6, 0.7,
  0.8, 0.9,
-   1, 1.1,
+ 1.0, 1.1,
  1.2, 1.3,
  1.4, 1.5,
  1.6, 1.7,
  1.8, 1.9,
-   2,   1,
+ 2.0, 2.1, // 2y
  2.1, 2.2,
  2.3, 2.4,
  2.5, 2.6,
  2.7, 2.8,
- 2.9,   3,
+ 2.9, 3.0,
  3.1, 3.2,
  3.3, 3.4,
  3.5, 3.6,
  3.7, 3.8,
- 3.9,   4,
-   1, 4.1,
+ 3.9, 4.0, // 3x
+ 4.0, 4.1,
  4.2, 4.3,
  4.4, 4.5,
  4.6, 4.7,
  4.8, 4.9,
-   5, 5.1,
+ 5.0, 5.1,
  5.2, 5.3,
  5.4, 5.5,
  5.6, 5.7,
- 5.8, 5.9,
-   6,   1,
+ 5.8, 5.9, // 3y
+ 6.0, 6.1,
  6.1, 6.2,
  6.3, 6.4,
  6.5, 6.6,
  6.7, 6.8,
- 6.9,   7,
+ 6.9, 7.0,
  7.1, 7.2,
  7.3, 7.4,
  7.5, 7.6,
- 7.7, 7.8,
- 7.9,   8,
-   1, 8.1,
- 8.2, 8.3,
+ 7.7, 7.8, // 4x
+ 7.9, 8.0,
++4.0,-1.2, // 4
+-2.2,-2.3, // 5
  8.4, 8.5,
  8.6, 8.7,
  8.8, 8.9,
-   9, 9.1,
- 9.2,  -1,
+ 9.0, 9.1,
+ 9.2, 9.3,
  9.3, 9.4,
- 9.5, 9.6,
- 9.7, 9.8,
- 9.9,   1,
-  10,10.1,
-10.2,10.3,
-10.4,10.5,
-10.6,10.7,
-10.8,10.9,
-  -1,  11,
-11.1,11.2,
-11.3,11.4,
-11.5,11.6,
-11.7,11.8,
-   1,11.9,
-  12,12.1,
-12.2,12.3,
-12.4,12.5,
-12.6,12.7,
-12.8,12.9,
-  13,  -1,
-13.1,13.2,
-13.3,13.4,
-13.5,13.6,
-13.7,   1,
-13.8,13.9,
-  14,14.1,
-14.2,14.3,
-14.4,14.5,
-14.6,14.7,
-  -1,14.8,
-14.9,  15,
-15.1,15.2,
-15.3,15.4,
-15.5,15.6,
-   1,15.7,
-15.8,15.9,
-  16,16.1,
-16.2,16.3,
-16.4,16.5,
-16.6,16.7,
-16.8,16.9,
-  17,17.1,
-17.2,17.3,
-17.4,17.5,
-17.6,   1,
-17.7,17.8,
-17.9,  18,
-18.1,18.2,
-18.3,18.4,
-18.5,18.6,
-18.7,18.8,
-18.9,  19,
-19.1,19.2,
-19.3,19.4,
-19.5,19.6,
-   1,19.7,
-19.8,19.9,
-  20,20.1,
-20.2,20.3,
-20.4,20.5,
-20.6,20.7,
-20.8,20.9,
-  21,21.1,
-21.2,21.3,
-21.4,21.5,
-21.6,   1,
-21.7,21.8,
-21.9,  22,
-22.1,22.2,
-22.3,22.4,
-22.5,22.6,
-22.7,22.8,
-22.9,  23,
-23.1,23.2,
-23.3,23.4,
-23.5,23.6,
-   1,23.7,
-23.8,23.9,
-  24,   1,
-24.1,24.2,
-24.3,24.4,
-24.5,24.6,
-24.7,24.8,
-24.9,  25,
-25.1,25.2,
-25.3,25.4,
-25.5,   1,
-25.6,25.7,
-   1,25.8,
-25.9,  26,
-26.1,26.2,
-26.3,26.4,
-26.5,26.6,
-26.7,26.8,
-26.9,  27,
-27.1,27.2,
-27.3,27.4,
-   1,27.5,
-27.6,27.7,
-27.8,   1,
-27.9,  28,
-28.1,28.2,
-28.3,28.4,
-28.5,28.6,
-28.7,28.8,
-28.9,  29,
-29.1,29.2,
-29.3,   1,
-29.4,29.5,
-   1,29.6,
-29.7,29.8,
-29.9,  30,
-30.1,  -1,
-30.2,30.3,
-30.4,30.5,
-30.6,30.7,
-30.8,   1,
-30.9,  31,
-31.1,31.2,
-31.3,31.4,
-31.5,31.6,
-31.7,31.8,
-  -1,31.9,
-  32,32.1,
-32.2,32.3,
-32.4,32.5,
-   1,32.6,
-32.7,32.8,
-32.9,  33,
-33.1,33.2,
-33.3,33.4,
-33.5,33.6,
-33.7,33.8,
-33.9,  -1,
-  34,34.1,
-34.2,34.3,
-34.4,34.5,
-34.6,   1,
-34.7,34.8,
-34.9,  35,
-35.1,35.2,
-35.3,35.4,
-35.5,35.6,
-  -1,35.7,
-35.8,35.9,
-  36,36.1,
-36.2,36.3,
-   1,36.4,
-36.5,36.6,
-36.7,36.8,
+ 3.7, 4.8, // 4y
+ 3.9, 4.0,
+-1.2,+5.0, // 4
+-1.3,-3.2, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 5x
+ 7.9, 8.0,
+-2.2,-1.3, // 4
++4.1,-4.3, // 5
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 5y
+ 3.9, 4.0,
+-2.3,-3.2, // 4
+-4.3,+5.1, // 5
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 0.1, 0.1, // 6x
+ 0.2, 0.3,
+ 0.4, 0.5,
+ 0.6, 0.7,
+ 0.8, 0.9,
+ 1.0, 1.1,
+ 1.2, 1.3,
+ 1.4, 1.5,
+ 1.6, 1.7,
+ 1.8, 1.9,
+ 2.0, 2.1, // 6y
+ 2.1, 2.2,
+ 2.3, 2.4,
+ 2.5, 2.6,
+ 2.7, 2.8,
+ 2.9, 3.0,
+ 3.1, 3.2,
+ 3.3, 3.4,
+ 3.5, 3.6,
+ 3.7, 3.8,
+ 3.9, 4.0, // 7x
+ 4.0, 4.1,
+ 4.2, 4.3,
+ 4.4, 4.5,
+ 4.6, 4.7,
+ 4.8, 4.9,
+ 5.0, 5.1,
+ 5.2, 5.3,
+ 5.4, 5.5,
+ 5.6, 5.7,
+ 5.8, 5.9, // 7y
+ 6.0, 6.1,
+ 6.1, 6.2,
+ 6.3, 6.4,
+ 6.5, 6.6,
+ 6.7, 6.8,
+ 6.9, 7.0,
+ 7.1, 7.2,
+ 7.3, 7.4,
+ 7.5, 7.6,
+ 7.7, 7.8, // 8x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
++5.0,-1.2, // 8
+-2.2,-2.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 8y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-1.2,+4.0, // 8
+-1.3,-3.2, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
+ 7.7, 7.8, // 9x
+ 7.9, 8.0,
+ 8.4, 8.5,
+ 8.6, 8.7,
+ 8.8, 8.9,
+ 9.0, 9.1,
+-2.2,-1.3, // 8
++5.1,-4.3, // 9
+ 9.2, 9.3,
+ 9.3, 9.4,
+ 3.7, 4.8, // 9y
+ 3.9, 4.0,
+ 4.4, 5.5,
+ 4.6, 5.7,
+ 4.8, 5.9,
+ 4.0, 5.1,
+-2.3,-3.2, // 8
+-4.3,+4.1, // 9
+ 4.2, 5.3,
+ 4.3, 5.4,
 };
 
 // ----------------------------------------------------------------------
 // Computed values
 // ----------------------------------------------------------------------
 
-const double pylith::faults::CohesiveDynDataQuad4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_orientation[] = {
   0.0,  -1.0,  -1.0, 0.0,
   0.0,  -1.0,  -1.0, 0.0
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_area[] = {
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_area[] = {
   1.0,
   1.0,
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_forcesInitial[] = {
-  2.05, -1.05,
-  2.05, -1.05,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_initialTractions[] = {
+  2.0, -1.0,
+  2.1, -1.1,
 };
 
 
@@ -337,17 +295,17 @@
 // Stick case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrStick[] = {
-  1.1, 29.1,
-  1.2, 29.2,
-  1.3, 29.3, // 4
-  1.4, 29.4, // 5
-  1.5, 29.5,
-  1.6, 29.6,
-  1.7, 29.7, // 8
-  1.9, 29.9, // 9
-  1.8, -29.8, // 10
-  1.0, -29.0, // 11
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldIncrStick[] = {
+  1.1, 2.1,
+  1.2, 2.2,
+  1.3, 2.3, // 4
+  1.4, 2.4, // 5
+  1.5, 2.5,
+  1.6, 2.6,
+  1.7, 2.7, // 8
+  1.9, 2.9, // 9
+  21.8, 2.8, // 10
+  21.0, 2.0, // 11
 };
 
 // No change in fieldIncr
@@ -357,74 +315,72 @@
 // Slip case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2,
-  9.3, 10.3, // 4
-  9.4, 10.4, // 5
-  9.5, 10.5,
-  9.6, 10.6,
-  9.7, 10.7, // 8
-  9.9, 10.9, // 9
-  -9.8, -10.8, // 10
-  -9.0, -10.0, // 11
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlip[] = {
+  1.1, 2.1,
+  1.2, 2.2,
+  1.3, 2.3, // 4
+  1.4, 2.4, // 5
+  1.5, 2.5,
+  1.6, 2.6,
+  1.3, 2.3, // 8
+  1.4, 2.4, // 9
+  1.8, 2.8, // 10
+  1.0, 2.0, // 11
 };
 
 // Output
-// :TODO: Update Lagrange multiplier values
-const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlipE[] = {
-  9.1,  10.100000000000,
-  9.2,  10.200000000000,
-  9.3,  10.313079001869,
-  9.4,  10.405865253910,
-  9.5,  10.500000000000,
-  9.6,  10.600000000000,
-  9.7,  10.686920998131,
-  9.9,  10.894134746090,
- -9.4, -10.800000000000,
- -8.6, -10.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldIncrSlipE[] = {
+   1.100000000000,   2.100000000000,
+   1.200000000000,   2.200000000000,
+   1.300000000000,   2.406970297611,
+   1.400000000000,   3.369389712309,
+   1.500000000000,   2.500000000000,
+   1.600000000000,   2.600000000000,
+   1.300000000000,   2.193029702389,
+   1.400000000000,   1.430610287691,
+   1.800000000000,  -3.440000000000,
+   1.000000000000,  -3.600000000000,
 };
 
-// Update slip values based on changes in Lagrange multiplier values
-const double pylith::faults::CohesiveDynDataQuad4::_slipSlipE[] = {
-  0.026158003737426,                   0.0,
-  0.011730507820273,                   0.0,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_slipSlipE[] = {
+   0.213940595221,   0.000000000000,
+   1.938779424618,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
 // Open case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2,
-  9.3, 10.3, // 4
-  9.4, 10.4, // 5
-  9.5, 10.5,
-  9.6, 10.6,
-  9.7, 10.7, // 8
-  9.9, 10.9, // 9
-  9.8, 10.8, // 10
-  9.0, 10.0, // 11
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpen[] = {
+  1.1, 2.1,
+  1.2, 2.2,
+  1.3, 2.3, // 4
+  1.4, 2.4, // 5
+  1.5, 2.5,
+  1.6, 2.6,
+  1.3, 2.3, // 8
+  1.4, 2.4, // 9
+  -10.8, 2.8, // 10
+  -10.0, 2.0, // 11
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpenE[] = {
-   9.100000000000,  10.100000000000,
-   9.200000000000,  10.200000000000,
-   9.300000000000,  10.685047196672,
-   9.932709332305,  11.176949275526,
-   9.500000000000,  10.500000000000,
-   9.600000000000,  10.600000000000,
-   9.700000000000,  10.314952803328,
-   9.367290667695,  10.123050724474,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_fieldIncrOpenE[] = {
+   1.100000000000,   2.100000000000,
+   1.200000000000,   2.200000000000,
+   3.815834136232,   2.039404156843,
+   4.287400342924,   3.820863468454,
+   1.500000000000,   2.500000000000,
+   1.600000000000,   2.600000000000,
+  -1.215834136232,   2.560595843157,
+  -1.487400342924,   0.979136531546,
   -8.800000000000,  -9.800000000000,
   -8.000000000000,  -9.000000000000,
 };
 
-const double pylith::faults::CohesiveDynDataQuad4::_slipOpenE[] = {
-  0.770094393343286,  0.0,
-  1.553898551051246,   1.065418664609568,
+const PylithScalar pylith::faults::CohesiveDynDataQuad4::_slipOpenE[] = {
+  -0.521191686313,   5.031668272463,
+   2.841726936907,   5.774800685848,
 };
 
 // ----------------------------------------------------------------------
@@ -435,36 +391,36 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   initialTractFilename = const_cast<char*>(_initialTractFilename);
 
-  fieldT = const_cast<double*>(_fieldT);
-  jacobian = const_cast<double*>(_jacobian);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  forcesInitial = const_cast<double*>(_forcesInitial);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  initialTractions = const_cast<PylithScalar*>(_initialTractions);
 
   constraintVertices = const_cast<int*>(_constraintVertices);
   numConstraintVert = _numConstraintVert;  
 
   // Stick
-  fieldIncrStick = const_cast<double*>(_fieldIncrStick);
+  fieldIncrStick = const_cast<PylithScalar*>(_fieldIncrStick);
 
   // Slip
-  fieldIncrSlip = const_cast<double*>(_fieldIncrSlip);
-  fieldIncrSlipE = const_cast<double*>(_fieldIncrSlipE);
-  slipSlipE = const_cast<double*>(_slipSlipE);
+  fieldIncrSlip = const_cast<PylithScalar*>(_fieldIncrSlip);
+  fieldIncrSlipE = const_cast<PylithScalar*>(_fieldIncrSlipE);
+  slipSlipE = const_cast<PylithScalar*>(_slipSlipE);
 
   // Open
-  fieldIncrOpen = const_cast<double*>(_fieldIncrOpen);
-  fieldIncrOpenE = const_cast<double*>(_fieldIncrOpenE);
-  slipOpenE = const_cast<double*>(_slipOpenE);
+  fieldIncrOpen = const_cast<PylithScalar*>(_fieldIncrOpen);
+  fieldIncrOpenE = const_cast<PylithScalar*>(_fieldIncrOpenE);
+  slipOpenE = const_cast<PylithScalar*>(_slipOpenE);
 } // constructor
 
 pylith::faults::CohesiveDynDataQuad4::~CohesiveDynDataQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,29 +49,29 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
   static const char* _initialTractFilename; ///< Name of db for initial tractions.
 
-  static const double _fieldT[]; ///< Solution field at time t.
-  static const double _fieldIncrStick[]; ///< Solution increment at time t for stick case.
-  static const double _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
-  static const double _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
-  static const double _jacobian[]; ///< Jacobian sparse matrix.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncrStick[]; ///< Solution increment at time t for stick case.
+  static const PylithScalar _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
+  static const PylithScalar _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
+  static const PylithScalar _jacobian[]; ///< Jacobian sparse matrix.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _forcesInitial[]; ///< Expected values for initial forces.
-  static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
-  static const double _slipSlipE[]; ///< Expected values for slip for slip case.
-  static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
-  static const double _slipOpenE[]; ///< Expected values for slip for opening case.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _initialTractions[]; ///< Expected values for initial tractions.
+  static const PylithScalar _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
+  static const PylithScalar _slipSlipE[]; ///< Expected values for slip for slip case.
+  static const PylithScalar _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
+  static const PylithScalar _slipOpenE[]; ///< Expected values for slip for opening case.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _numConstraintVert; ///< Number of constraint vertices
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,27 +45,37 @@
 
 const int pylith::faults::CohesiveDynDataTet4::_numBasis = 3;
 
-const int pylith::faults::CohesiveDynDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTet4::_numQuadPts = 3;
 
-const double pylith::faults::CohesiveDynDataTet4::_quadPts[] = {
-  -3.33333333e-01,  -3.33333333e-01,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_quadPts[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_quadWts[] = {
+  2.0/3.0, 2.0/3.0, 2.0/3.0,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_basis[] = {
-  3.33333333e-01,  3.33333333e-01,
-  3.33333333e-01,};
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_basis[] = {
+  1.0, 0.0, 0.0,
+  0.0, 1.0, 0.0,
+  0.0, 0.0, 1.0,
+};
 
-const double pylith::faults::CohesiveDynDataTet4::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_basisDeriv[] = {
  -0.50000000e+00, -0.50000000e+00,
   0.50000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -78,408 +88,406 @@
 const char* pylith::faults::CohesiveDynDataTet4::_initialTractFilename = 
   "data/tet4_initialtract.spatialdb";
 
-const double pylith::faults::CohesiveDynDataTet4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldT[] = {
   7.1, 8.1, 9.1,
   7.2, 8.2, 9.2, // 3
   7.3, 8.3, 9.3, // 4
   7.4, 8.4, 9.4, // 5
   7.5, 8.5, 9.5,
-  7.6, 8.6, 9.6, // 7
-  7.8, 8.8, 9.8, // 8
-  7.0, 8.0, 9.0, // 9
+  7.2, 8.2, 9.2, // 7
+  7.3, 8.3, 9.3, // 8
+  7.4, 8.4, 9.4, // 9
   7.7, 8.7, 9.7, // 10
   7.9, 8.9, 9.9, // 11
   7.1, 8.1, 9.1, // 12
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
-const double pylith::faults::CohesiveDynDataTet4::_jacobian[] = {
-    1,  0.1,  0.2,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_jacobian[] = {
+  1.0,  0.1,  0.2, // 2x
   0.3,  0.4,  0.5,
   0.6,  0.7,  0.8,
-  0.9,    1,  1.1,
+  0.9,  1.0,  1.1,
   1.2,  1.3,  1.4,
   1.5,  1.6,  1.7,
-  1.8,  1.9,    2,
+  1.8,  1.9,  2.0,
   2.1,  2.2,  2.3,
   2.4,  2.5,  2.6,
   2.7,  2.8,  2.9,
-    3,  3.1,  3.2,
-  3.3,    1,  3.4,
-  3.5,  3.6,  3.7,
-  3.8,  3.9,    4,
-  4.1,  4.2,  4.3,
-  4.4,  4.5,  4.6,
-  4.7,  4.8,  4.9,
-    5,  5.1,  5.2,
-  5.3,  5.4,  5.5,
-  5.6,  5.7,  5.8,
-  5.9,    6,  6.1,
-  6.2,  6.3,  6.4,
-  6.5,  6.6,    1,
-  6.7,  6.8,  6.9,
-    7,  7.1,  7.2,
-  7.3,  7.4,  7.5,
-  7.6,  7.7,  7.8,
-  7.9,    8,  8.1,
-  8.2,  8.3,  8.4,
-  8.5,  8.6,  8.7,
-  8.8,  8.9,    9,
-  9.1,  9.2,  9.3,
-  9.4,  9.5,  9.6,
-  9.7,  9.8,  9.9,
-    1,   10, 10.1,
- 10.2, 10.3, 10.4,
- 10.5, 10.6, 10.7,
- 10.8, 10.9,   11,
- 11.1, 11.2, 11.3,
- 11.4, 11.5, 11.6,
- 11.7, 11.8, 11.9,
-   12, 12.1,   -1,
- 12.2, 12.3, 12.4,
- 12.5, 12.6, 12.7,
- 12.8, 12.9,   13,
- 13.1,    1, 13.2,
- 13.3, 13.4, 13.5,
- 13.6, 13.7, 13.8,
- 13.9,   14, 14.1,
- 14.2, 14.3, 14.4,
- 14.5, 14.6, 14.7,
- 14.8, 14.9,   15,
-   -1, 15.1, 15.2,
- 15.3, 15.4, 15.5,
- 15.6, 15.7, 15.8,
- 15.9,   16, 16.1,
- 16.2, 16.3,    1,
- 16.4, 16.5, 16.6,
- 16.7, 16.8, 16.9,
-   17, 17.1, 17.2,
- 17.3, 17.4, 17.5,
- 17.6, 17.7, 17.8,
- 17.9,   18, 18.1,
- 18.2,   -1, 18.3,
- 18.4, 18.5, 18.6,
- 18.7, 18.8, 18.9,
-   19, 19.1, 19.2,
- 19.3, 19.4, 19.5,
-    1, 19.6, 19.7,
- 19.8, 19.9,   20,
- 20.1, 20.2, 20.3,
- 20.4, 20.5, 20.6,
- 20.7, 20.8, 20.9,
-   21, 21.1, 21.2,
- 21.3, 21.4, 21.5,
- 21.6, 21.7,   -1,
- 21.8, 21.9,   22,
- 22.1, 22.2, 22.3,
- 22.4, 22.5, 22.6,
- 22.7,    1, 22.8,
- 22.9,   23, 23.1,
- 23.2, 23.3, 23.4,
- 23.5, 23.6, 23.7,
- 23.8, 23.9,   24,
- 24.1, 24.2, 24.3,
- 24.4, 24.5, 24.6,
-   -1, 24.7, 24.8,
- 24.9,   25, 25.1,
- 25.2, 25.3, 25.4,
- 25.5, 25.6, 25.7,
- 25.8, 25.9,    1,
-   26, 26.1, 26.2,
- 26.3, 26.4, 26.5,
- 26.6, 26.7, 26.8,
- 26.9,   27, 27.1,
- 27.2, 27.3, 27.4,
- 27.5, 27.6, 27.7,
- 27.8,   -1, 27.9,
-   28, 28.1, 28.2,
- 28.3, 28.4, 28.5,
- 28.6, 28.7, 28.8,
- 28.9,   29, 29.1,
-    1, 29.2, 29.3,
- 29.4, 29.5, 29.6,
- 29.7, 29.8, 29.9,
-   30, 30.1, 30.2,
- 30.3, 30.4, 30.5,
- 30.6, 30.7, 30.8,
- 30.9,   31, 31.1,
- 31.2, 31.3,   -1,
- 31.4, 31.5, 31.6,
- 31.7, 31.8, 31.9,
-   32, 32.1, 32.2,
- 32.3,    1, 32.4,
- 32.5, 32.6, 32.7,
- 32.8, 32.9,   33,
- 33.1, 33.2, 33.3,
- 33.4, 33.5, 33.6,
- 33.7, 33.8, 33.9,
-   34, 34.1, 34.2,
-   -1, 34.3, 34.4,
- 34.5, 34.6, 34.7,
- 34.8, 34.9,   35,
- 35.1, 35.2, 35.3,
- 35.4, 35.5,    1,
- 35.6, 35.7, 35.8,
- 35.9,   36, 36.1,
- 36.2, 36.3, 36.4,
- 36.5, 36.6, 36.7,
- 36.8, 36.9,   37,
- 37.1, 37.2, 37.3,
- 37.4,   -1, 37.5,
- 37.6, 37.7, 37.8,
- 37.9,   38, 38.1,
- 38.2, 38.3, 38.4,
- 38.5, 38.6, 38.7,
-    1, 38.8, 38.9,
-   39, 39.1, 39.2,
- 39.3, 39.4, 39.5,
- 39.6, 39.7, 39.8,
- 39.9,   40, 40.1,
- 40.2, 40.3, 40.4,
- 40.5, 40.6, 40.7,
- 40.8, 40.9,   41,
- 41.1, 41.2, 41.3,
- 41.4, 41.5, 41.6,
- 41.7, 41.8, 41.9,
-   42,    1, 42.1,
- 42.2, 42.3, 42.4,
- 42.5, 42.6, 42.7,
- 42.8, 42.9,   43,
- 43.1, 43.2, 43.3,
- 43.4, 43.5, 43.6,
- 43.7, 43.8, 43.9,
-   44, 44.1, 44.2,
- 44.3, 44.4, 44.5,
- 44.6, 44.7, 44.8,
- 44.9,   45, 45.1,
- 45.2, 45.3,    1,
- 45.4, 45.5, 45.6,
- 45.7, 45.8, 45.9,
-   46, 46.1, 46.2,
- 46.3, 46.4, 46.5,
- 46.6, 46.7, 46.8,
- 46.9,   47, 47.1,
- 47.2, 47.3, 47.4,
- 47.5, 47.6, 47.7,
- 47.8, 47.9,   48,
- 48.1, 48.2, 48.3,
- 48.4, 48.5, 48.6,
-    1, 48.7, 48.8,
- 48.9,   49, 49.1,
- 49.2, 49.3, 49.4,
- 49.5, 49.6,    1,
- 49.7, 49.8, 49.9,
-   50, 50.1, 50.2,
- 50.3, 50.4, 50.5,
- 50.6, 50.7, 50.8,
- 50.9,   51, 51.1,
- 51.2, 51.3, 51.4,
- 51.5, 51.6, 51.7,
- 51.8,    1, 51.9,
-   52, 52.1, 52.2,
- 52.3, 52.4, 52.5,
-    1, 52.6, 52.7,
- 52.8, 52.9,   53,
- 53.1, 53.2, 53.3,
- 53.4, 53.5, 53.6,
- 53.7, 53.8, 53.9,
-   54, 54.1, 54.2,
- 54.3, 54.4, 54.5,
- 54.6, 54.7, 54.8,
- 54.9,   55,    1,
- 55.1, 55.2, 55.3,
- 55.4, 55.5, 55.6,
- 55.7,    1, 55.8,
- 55.9,   56, 56.1,
- 56.2, 56.3, 56.4,
- 56.5, 56.6, 56.7,
- 56.8, 56.9,   57,
- 57.1, 57.2, 57.3,
- 57.4, 57.5, 57.6,
- 57.7, 57.8, 57.9,
-   58, 58.1, 58.2,
-    1, 58.3, 58.4,
- 58.5, 58.6, 58.7,
- 58.8, 58.9,   59,
- 59.1, 59.2,    1,
- 59.3, 59.4, 59.5,
- 59.6, 59.7, 59.8,
- 59.9,   60, 60.1,
- 60.2, 60.3, 60.4,
- 60.5, 60.6, 60.7,
- 60.8, 60.9,   61,
- 61.1, 61.2, 61.3,
- 61.4,    1, 61.5,
- 61.6, 61.7, 61.8,
- 61.9,   62, 62.1,
-    1, 62.2, 62.3,
- 62.4, 62.5, 62.6,
- 62.7, 62.8, 62.9,
-   63, 63.1, 63.2,
- 63.3, 63.4, 63.5,
- 63.6, 63.7, 63.8,
- 63.9,   64, 64.1,
- 64.2, 64.3, 64.4,
- 64.5, 64.6,    1,
- 64.7, 64.8, 64.9,
-   65, 65.1, 65.2,
- 65.3,    1, 65.4,
- 65.5, 65.6, 65.7,
- 65.8, 65.9,   66,
- 66.1, 66.2, 66.3,
- 66.4, 66.5, 66.6,
- 66.7, 66.8, 66.9,
-   67, 67.1, 67.2,
- 67.3, 67.4, 67.5,
- 67.6, 67.7, 67.8,
-    1, 67.9,   68,
- 68.1, 68.2, 68.3,
- 68.4, 68.5, 68.6,
- 68.7, 68.8,    1,
- 68.9,   69, 69.1,
- 69.2, 69.3, 69.4,
- 69.5, 69.6, 69.7,
- 69.8, 69.9,   70,
- 70.1, 70.2, 70.3,
- 70.4, 70.5, 70.6,
- 70.7, 70.8, 70.9,
-   71,    1, 71.1,
- 71.2, 71.3, 71.4,
- 71.5, 71.6, 71.7,
-    1, 71.8, 71.9,
-   72, 72.1, 72.2,
- 72.3, 72.4, 72.5,
- 72.6, 72.7, 72.8,
- 72.9,   73, 73.1,
- 73.2, 73.3, 73.4,
- 73.5, 73.6, 73.7,
- 73.8, 73.9,   74,
- 74.1, 74.2,    1,
- 74.3, 74.4, 74.5,
- 74.6, 74.7, 74.8,
- 74.9,    1,   75,
- 75.1, 75.2, 75.3,
- 75.4,   -1, 75.5,
- 75.6, 75.7, 75.8,
- 75.9,   76, 76.1,
- 76.2, 76.3, 76.4,
- 76.5,    1, 76.6,
- 76.7, 76.8, 76.9,
-   77, 77.1, 77.2,
- 77.3, 77.4, 77.5,
- 77.6, 77.7, 77.8,
- 77.9,   78, 78.1,
- 78.2, 78.3, 78.4,
- 78.5, 78.6,   -1,
- 78.7, 78.8, 78.9,
-   79, 79.1, 79.2,
- 79.3, 79.4, 79.5,
- 79.6, 79.7,    1,
- 79.8, 79.9,   80,
- 80.1, 80.2, 80.3,
- 80.4, 80.5, 80.6,
- 80.7, 80.8, 80.9,
-   81, 81.1, 81.2,
- 81.3, 81.4, 81.5,
-   -1, 81.6, 81.7,
- 81.8, 81.9,   82,
- 82.1, 82.2, 82.3,
- 82.4, 82.5, 82.6,
-    1, 82.7, 82.8,
- 82.9,   83, 83.1,
- 83.2, 83.3, 83.4,
- 83.5, 83.6, 83.7,
- 83.8, 83.9,   84,
- 84.1, 84.2, 84.3,
- 84.4, 84.5, 84.6,
- 84.7, 84.8, 84.9,
-   85,   -1, 85.1,
- 85.2, 85.3, 85.4,
- 85.5, 85.6, 85.7,
- 85.8, 85.9,   86,
- 86.1,    1, 86.2,
- 86.3, 86.4, 86.5,
- 86.6, 86.7, 86.8,
- 86.9,   87, 87.1,
- 87.2, 87.3, 87.4,
- 87.5, 87.6, 87.7,
- 87.8, 87.9,   88,
- 88.1, 88.2,   -1,
- 88.3, 88.4, 88.5,
- 88.6, 88.7, 88.8,
- 88.9,   89, 89.1,
- 89.2, 89.3,    1,
- 89.4, 89.5, 89.6,
- 89.7, 89.8, 89.9,
-   90, 90.1, 90.2,
- 90.3, 90.4, 90.5,
- 90.6, 90.7, 90.8,
- 90.9,   91, 91.1,
-   -1, 91.2, 91.3,
- 91.4, 91.5, 91.6,
- 91.7, 91.8, 91.9,
-   92, 92.1, 92.2,
-    1, 92.3, 92.4,
- 92.5, 92.6, 92.7,
- 92.8, 92.9,   93,
- 93.1, 93.2, 93.3,
- 93.4, 93.5, 93.6,
- 93.7, 93.8, 93.9,
-   94, 94.1, 94.2,
- 94.3, 94.4, 94.5,
- 94.6,   -1, 94.7,
- 94.8, 94.9,   95,
- 95.1, 95.2, 95.3,
- 95.4, 95.5, 95.6,
- 95.7,    1, 95.8,
- 95.9,   96, 96.1,
- 96.2, 96.3, 96.4,
- 96.5, 96.6, 96.7,
- 96.8, 96.9,   97,
- 97.1, 97.2, 97.3,
- 97.4, 97.5, 97.6,
- 97.7, 97.8,   -1,
- 97.9,   98, 98.1,
- 98.2, 98.3, 98.4,
- 98.5, 98.6, 98.7,
- 98.8, 98.9,    1,
-   99, 99.1, 99.2,
- 99.3, 99.4, 99.5,
- 99.6, 99.7, 99.8,
- 99.9,  100,100.1,
-100.2,100.3,100.4,
-100.5,100.6,100.7,
-   -1,100.8,100.9,
-  101,101.1,101.2,
-101.3,101.4,101.5,
-101.6,101.7,101.8,
-    1,101.9,  102,
-102.1,102.2,102.3,
-102.4,102.5,102.6,
-102.7,102.8,102.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 2y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 2z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 3x
+ +4.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 3y
+ -1.1, +4.1, -2.3, // 3
+ -2.4, -2.5, -2.6, // 4
+ -2.7, -2.8, -2.9, // 5
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 3z
+ -1.2, -2.3, +4.2, // 3
+ -1.0, -1.1, -1.2, // 4
+ -1.3, -1.4, -1.5, // 5
+  1.5,  7.6,  2.7,
+  1.3,  7.4,  2.5,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 4x
+ -1.3, -2.4, -1.0, // 3
+ +4.3, -0.2, -0.3, // 4
+ -0.4, -0.5, -0.6, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 4y
+ -1.4, -2.5, -1.1, // 3
+ -0.2, +4.4, -0.9, // 4
+ -0.8, -0.7, -0.5, // 5
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 4z
+ -1.5, -2.6, -1.2, // 3
+ -0.3, -0.9, +4.5, // 4
+ -1.1, -1.2, -1.3, // 5
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 5x
+ -1.6, -2.7, -1.3, // 3
+ -0.4, -0.8, -1.1, // 4
+ +4.6, -1.8, -1.5, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  1.0,  0.1,  0.2, // 5y
+ -1.7, -2.8, -1.4, // 3
+ -0.5, -0.7, -1.2, // 4
+ -1.8, +4.7, -1.1, // 5
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  1.0,  7.1,  2.2, // 5z
+ -1.8, -2.9, -1.5, // 3
+ -0.6, -0.5, -1.3, // 4
+ -1.5, -1.1, +4.8, // 5
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 6x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 6y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 6z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 7x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ +5.0, -1.1, -1.2, // 3
+ -1.3, -1.4, -1.5, // 4
+ -1.6, -1.7, -1.8, // 5
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 7y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.1, +5.1, -2.3, // 7
+ -2.4, -2.5, -2.6, // 8
+ -2.7, -2.8, -2.9, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 7z
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.3,  7.4,  2.5,
+ -1.2, -2.3, +5.2, // 7
+ -1.0, -1.1, -1.2, // 8
+ -1.3, -1.4, -1.5, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 8x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ -1.3, -2.4, -1.0, // 7
+ +5.3, -0.2, -0.3, // 8
+ -0.4, -0.5, -0.6, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 8y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.4, -2.5, -1.1, // 7
+ -0.2, +5.4, -0.9, // 8
+ -0.8, -0.7, -0.5, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 8z
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+ -1.5, -2.6, -1.2, // 7
+ -0.3, -0.9, +5.5, // 8
+ -1.1, -1.2, -1.3, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 9x
+  0.3,  0.4,  0.5,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+ -1.6, -2.7, -1.3, // 7
+ -0.4, -0.8, -1.1, // 8
+ +5.6, -1.8, -1.5, // 9
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 9y
+  2.3,  4.4,  3.5,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+ -1.7, -2.8, -1.4, // 7
+ -0.5, -0.7, -1.2, // 8
+ -1.8, +5.7, -1.1, // 9
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 9z
+  1.3,  7.4,  2.5,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+ -1.8, -2.9, -1.5, // 7
+ -0.6, -0.5, -1.3, // 8
+ -1.5, -1.1, +5.8, // 9
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 10x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 10y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 10z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 11x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 11y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 11z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
+  1.0,  0.1,  0.2, // 12x
+  0.3,  0.4,  0.5,
+  0.6,  0.7,  0.8,
+  0.9,  1.0,  1.1,
+  1.2,  1.3,  1.4,
+  1.5,  1.6,  1.7,
+  1.8,  1.9,  2.0,
+  2.1,  2.2,  2.3,
+  2.4,  2.5,  2.6,
+  2.7,  2.8,  2.9,
+  3.0,  3.1,  3.2,
+  2.0,  4.1,  3.2, // 12y
+  2.3,  4.4,  3.5,
+  2.6,  4.7,  3.8,
+  2.9,  4.0,  3.1,
+  2.2,  4.3,  3.4,
+  2.5,  4.6,  3.7,
+  2.8,  4.9,  3.0,
+  2.1,  4.2,  3.3,
+  2.4,  4.5,  3.6,
+  2.7,  4.8,  3.9,
+  2.0,  4.1,  3.2,
+  1.0,  7.1,  2.2, // 12z
+  1.3,  7.4,  2.5,
+  1.6,  7.7,  2.8,
+  1.9,  7.0,  2.1,
+  1.2,  7.3,  2.4,
+  1.5,  7.6,  2.7,
+  1.8,  7.9,  2.0,
+  1.1,  7.2,  2.3,
+  1.4,  7.5,  2.6,
+  1.7,  7.8,  2.9,
+  1.0,  7.1,  2.2,
 };
 
 // ----------------------------------------------------------------------
 // Computed values
 // ----------------------------------------------------------------------
 
-const double pylith::faults::CohesiveDynDataTet4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_orientation[] = {
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_area[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_area[] = {
   1.0/3.0, 
   1.0/3.0, 
   1.0/3.0,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_forcesInitial[] = {
-  3.1/3.0, -1.1/3.0, +2.1/3.0,
-  3.1/3.0, -1.1/3.0, +2.1/3.0,
-  3.1/3.0, -1.1/3.0, +2.1/3.0,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_initialTractions[] = {
+  +3.0, -1.0, +2.0, 
+  +3.1, -1.1, +2.1, 
+  +3.2, -1.2, +2.2, 
 };
 
 
@@ -492,18 +500,18 @@
 // Stick case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTet4::_fieldIncrStick[] = {
-  1.1, 2.1, 35.1,
-  1.2, 2.2, 35.2, // 3
-  1.3, 2.3, 35.3, // 4
-  1.4, 2.4, 35.4, // 5
-  1.5, 2.5, 35.5,
-  1.6, 2.6, 35.6, // 7
-  1.8, 2.8, 35.8, // 8
-  1.0, 2.0, 35.0, // 9
-  1.7, 2.7, -35.7, // 10
-  1.9, 2.9, -35.9, // 11
-  1.1, 2.1, -35.1, // 12
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldIncrStick[] = {
+  1.1, 2.1, 3.1,
+  1.2, 2.2, 3.2, // 3
+  1.3, 2.3, 3.3, // 4
+  1.4, 2.4, 3.4, // 5
+  1.5, 2.5, 3.5,
+  1.6, 2.6, 3.6, // 7
+  1.8, 2.8, 3.8, // 8
+  1.0, 2.0, 3.0, // 9
+  41.7, 2.7, 3.7, // 10
+  41.9, 2.9, 3.9, // 11
+  41.1, 2.1, 3.1, // 12
 };
 
 // No change in fieldIncr
@@ -513,78 +521,78 @@
 // Slip case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlip[] = {
-  8.1, 9.1, 10.1,
-  8.2, 9.2, 10.2, // 3
-  8.3, 9.3, 10.3, // 4
-  8.4, 9.4, 10.4, // 5
-  8.5, 9.5, 10.5,
-  8.6, 9.6, 10.6, // 7
-  8.8, 9.8, 10.8, // 8
-  8.0, 9.0, 10.0, // 9
-  8.7, 9.7, -10.7, // 10
-  8.9, 9.9, -10.9, // 11
-  8.1, 9.1, -10.1, // 12
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldIncrSlip[] = {
+  1.1, 2.1, 3.1,
+  1.2, 2.2, 3.2, // 3
+  1.3, 2.3, 3.3, // 4
+  1.4, 2.4, 3.4, // 5
+  1.5, 2.5, 3.5,
+  1.2, 2.2, 3.2, // 7
+  1.3, 2.3, 3.3, // 8
+  1.4, 2.4, 3.4, // 9
+  9.7, 2.7, 3.7, // 10
+  9.9, 2.9, 3.9, // 11
+  9.1, 2.1, 3.1, // 12
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataTet4::_fieldIncrSlipE[] = {
-   8.100000000000,   9.100000000000,  10.100000000000,
-   8.200000000000,   8.391727731714,  10.956284985259,
-   8.300000000000,   8.791277340217,  10.815192651071,
-   8.400000000000,   9.060755249362,  10.758883268626,
-   8.500000000000,   9.500000000000,  10.500000000000,
-   8.600000000000,  10.408272268286,   9.843715014741,
-   8.800000000000,  10.308722659783,  10.284807348929,
-   8.000000000000,   9.339244750638,   9.641116731374,
-  -7.300777685147,  -8.252092036995, -10.700000000000,
-  -7.500201409882,  -8.452606339630, -10.900000000000,
-  -6.702681322117,  -7.650402548711, -10.100000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldIncrSlipE[] = {
+   1.100000000000,   2.100000000000,   3.100000000000,
+   1.200000000000,   2.427020189783,   3.226804829918,
+   1.300000000000,   2.281534813168,   3.292288303722,
+   1.400000000000,   2.543753403100,   3.499170314087,
+   1.500000000000,   2.500000000000,   3.500000000000,
+   1.200000000000,   1.972979810217,   3.173195170082,
+   1.300000000000,   2.318465186832,   3.307711696278,
+   1.400000000000,   2.256246596900,   3.300829685913,
+   9.700000000000,  -1.935106067360,  -1.748282570405,
+   9.900000000000,  -1.959241090539,  -1.782841275376,
+   9.100000000000,  -1.865391385620,  -1.642919108291,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_slipSlipE[] = {
-  -1.616544536572,  -1.512569970519,   0.000000000000,
-  -1.017445319566,  -1.030385302142,   0.000000000000,
-  -0.678489501275,  -0.717766537252,   0.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_slipSlipE[] = {
+   0.454040379566,  -0.053609659837,   0.000000000000,
+  -0.036930373664,   0.015423392555,   0.000000000000,
+   0.287506806199,  -0.198340628174,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
 // Open case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpen[] = {
-  8.1, 9.1, 10.1,
-  8.2, 9.2, 10.2, // 3
-  8.3, 9.3, 10.3, // 4
-  8.4, 9.4, 10.4, // 5
-  8.5, 9.5, 10.5,
-  8.6, 9.6, 10.6, // 7
-  8.8, 9.8, 10.8, // 8
-  8.0, 9.0, 10.0, // 9
-  8.7, 9.7, 10.7, // 10
-  8.9, 9.9, 10.9, // 11
-  8.1, 9.1, 10.1, // 12
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldIncrOpen[] = {
+  1.1, 2.1, 3.1,
+  1.2, 2.2, 3.2, // 3
+  1.3, 2.3, 3.3, // 4
+  1.4, 2.4, 3.4, // 5
+  1.5, 2.5, 3.5,
+  1.2, 2.2, 3.2, // 7
+  1.3, 2.3, 3.3, // 8
+  1.4, 2.4, 3.4, // 9
+ -20.7, 2.7, 3.7, // 10
+ -20.9, 2.9, 3.9, // 11
+ -20.1, 2.1, 3.1, // 12
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataTet4::_fieldIncrOpenE[] = {
-   8.100000000000,   9.100000000000,  10.100000000000,
-   8.200000000000,   8.707485448105,  11.300792216319,
-   8.300000000000,   9.089936432069,  11.135493258511,
-   8.400000000000,   9.353421152116,  11.068689140292,
-   8.500000000000,   9.500000000000,  10.500000000000,
-   8.600000000000,  10.092514551895,   9.499207783681,
-   8.800000000000,  10.010063567931,   9.964506741489,
-   8.000000000000,   9.046578847884,   9.331310859708,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_fieldIncrOpenE[] = {
+   1.100000000000,   2.100000000000,   3.100000000000,
+   2.478935676274,   2.200668834288,   2.866497129446,
+   2.514833997358,   1.906576121577,   2.868854721277,
+   2.460386652668,   2.373508489140,   3.258697327233,
+   1.500000000000,   2.500000000000,   3.500000000000,
+  -0.078935676274,   2.199331165712,   3.533502870554,
+   0.085166002642,   2.693423878423,   3.731145278723,
+   0.339613347332,   2.426491510860,   3.541302672767,
   -7.700000000000,  -8.700000000000,  -9.700000000000,
   -7.900000000000,  -8.900000000000,  -9.900000000000,
   -7.100000000000,  -8.100000000000,  -9.100000000000,
 };
 
-const double pylith::faults::CohesiveDynDataTet4::_slipOpenE[] = {
-  -0.985029103789,  -2.201584432637,   0.000000000000,
-  -0.420127135861,  -1.670986517021,   0.000000000000,
-  -0.093157695768,  -1.337378280584,   0.000000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTet4::_slipOpenE[] = {
+   0.001337668577,   0.667005741108,   2.557871352547,
+  -0.786847756846,   0.862290557446,   2.429667994716,
+  -0.052983021720,   0.282605345535,   2.120773305336,
 };
 
 // ----------------------------------------------------------------------
@@ -595,36 +603,36 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   initialTractFilename = const_cast<char*>(_initialTractFilename);
 
-  fieldT = const_cast<double*>(_fieldT);
-  jacobian = const_cast<double*>(_jacobian);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  forcesInitial = const_cast<double*>(_forcesInitial);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  initialTractions = const_cast<PylithScalar*>(_initialTractions);
 
   constraintVertices = const_cast<int*>(_constraintVertices);
   numConstraintVert = _numConstraintVert;  
 
   // Stick
-  fieldIncrStick = const_cast<double*>(_fieldIncrStick);
+  fieldIncrStick = const_cast<PylithScalar*>(_fieldIncrStick);
 
   // Slip
-  fieldIncrSlip = const_cast<double*>(_fieldIncrSlip);
-  fieldIncrSlipE = const_cast<double*>(_fieldIncrSlipE);
-  slipSlipE = const_cast<double*>(_slipSlipE);
+  fieldIncrSlip = const_cast<PylithScalar*>(_fieldIncrSlip);
+  fieldIncrSlipE = const_cast<PylithScalar*>(_fieldIncrSlipE);
+  slipSlipE = const_cast<PylithScalar*>(_slipSlipE);
 
   // Open
-  fieldIncrOpen = const_cast<double*>(_fieldIncrOpen);
-  fieldIncrOpenE = const_cast<double*>(_fieldIncrOpenE);
-  slipOpenE = const_cast<double*>(_slipOpenE);
+  fieldIncrOpen = const_cast<PylithScalar*>(_fieldIncrOpen);
+  fieldIncrOpenE = const_cast<PylithScalar*>(_fieldIncrOpenE);
+  slipOpenE = const_cast<PylithScalar*>(_slipOpenE);
 } // constructor
 
 pylith::faults::CohesiveDynDataTet4::~CohesiveDynDataTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,29 +49,29 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
   static const char* _initialTractFilename; ///< Name of db for initial tractions.
 
-  static const double _fieldT[]; ///< Solution field at time t.
-  static const double _fieldIncrStick[]; ///< Solution increment at time t for stick case.
-  static const double _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
-  static const double _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
-  static const double _jacobian[]; ///< Jacobian sparse matrix.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncrStick[]; ///< Solution increment at time t for stick case.
+  static const PylithScalar _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
+  static const PylithScalar _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
+  static const PylithScalar _jacobian[]; ///< Jacobian sparse matrix.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _forcesInitial[]; ///< Expected values for initial forces.
-  static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
-  static const double _slipSlipE[]; ///< Expected values for slip for slip case.
-  static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
-  static const double _slipOpenE[]; ///< Expected values for slip for opening case.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _initialTractions[]; ///< Expected values for initial tractions.
+  static const PylithScalar _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
+  static const PylithScalar _slipSlipE[]; ///< Expected values for slip for slip case.
+  static const PylithScalar _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
+  static const PylithScalar _slipOpenE[]; ///< Expected values for slip for opening case.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _numConstraintVert; ///< Number of constraint vertices
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,27 +61,27 @@
 
 const int pylith::faults::CohesiveDynDataTri3::_numBasis = 2;
 
-const int pylith::faults::CohesiveDynDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTri3::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveDynDataTri3::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -92,21 +92,19 @@
 const char* pylith::faults::CohesiveDynDataTri3::_initialTractFilename = 
   "data/tri3_initialtract.spatialdb";
 
-const double pylith::faults::CohesiveDynDataTri3::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2, // 3
   8.3, 9.3, // 4
   8.4, 9.4,
-  8.5, 9.5, // 6
-  8.7, 9.7, // 7
+  8.2, 9.2, // 6
+  8.3, 9.3, // 7
   8.6, 9.6, // 8
   8.8, 9.8, // 9
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
-const double pylith::faults::CohesiveDynDataTri3::_jacobian[] = {
-  1.0, 1.1, // 2x (values for row associated with vertex with label 2, x DOF)
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_jacobian[] = {
+  1.0, 1.1, // 2x
   0.1, 1.2,
   0.2, 1.3,
   0.3, 1.4,
@@ -122,86 +120,86 @@
   2.6, 3.5,
   2.7, 3.6,
   2.8, 3.7,
-  4.1, 5.1, // 3x (values for row associated with vertex label 3, x DOF)
-  1.0, 5.2,
-  4.2, 5.3,
+  4.1, 5.1, // 3x
+ +4.0,-1.2, // 3
+ -2.2,-2.3, // 4
   4.3, 5.4,
   4.4, 5.5,
   4.5, 5.6,
-  4.6,+1.0, // 8 (column for DOF associated with vertex label 8)
+  4.6,+1.0, 
   4.7, 5.7,
   6.1, 7.1, // 3y
-  6.2, 1.0,
-  6.3, 7.2,
+ -1.2,+5.0, // 3
+ -1.3,-3.2, // 4
   6.4, 7.3,
   6.5, 7.4,
   6.6, 7.5,
- +1.0, 7.6, //  8
+  1.0, 7.6,
   6.7, 7.7,
   8.1, 9.1, // 4x
-  8.2, 9.2,
-  1.0, 9.3,
+ -2.2,-1.3, // 3
+ +4.1,-4.3, // 4
   8.3, 9.4,
   8.4, 9.5,
   8.5, 9.6,
   8.6, 9.7,
-  8.7,+1.0, //  9
-  10.1, 11.1, // 4y
-  10.2, 11.2,
-  10.3, 1.0,
-  10.4, 11.3,
-  10.5, 11.4,
-  10.6, 11.5,
-  10.7, 11.6,
- +1.0, 11.7, //  9
-  12.1, 13.1, // 5x
-  12.2, 13.2,
-  12.3, 13.3,
-  1.0, 13.4,
-  12.4, 13.5,
-  12.5, 13.6,
-  12.6, 13.7,
-  12.7, 13.8,
-  14.1, 15.1, // 5y
-  14.2, 15.2,
-  14.3, 15.3,
-  14.4, 1.0,
-  14.5, 15.4,
-  14.6, 15.5,
-  14.7, 15.6,
-  14.8, 15.7,
-  16.1, 17.1, // 6x
-  16.2, 17.2,
-  16.3, 17.3,
-  16.4, 17.4,
-  1.0, 17.5,
-  16.5, 17.6,
-  16.6,-1.0, //  8
-  16.7, 17.7,
-  18.1, 19.1, // 6y
-  18.2, 19.2,
-  18.3, 19.3,
-  18.4, 19.4,
-  18.5, 1.0,
-  18.6, 19.5,
- -1.0, 19.6, //  8
-  18.7, 19.7,
-  20.1, 21.1, // 7x
-  20.2, 21.2,
-  20.3, 21.3,
-  20.4, 21.4,
-  20.5, 21.5,
-  1.0, 21.6,
-  20.6, 21.7,
-  20.7,-1.0, //  9
-  22.1, 23.1, // 7y
-  22.2, 23.2,
-  22.3, 23.3,
-  22.4, 23.4,
-  22.5, 23.5,
-  22.6, 1.0,
-  22.7, 23.6,
- -1.0, 23.7, //  9
+  8.7,+1.0,
+  1.1, 1.1, // 4y
+ -2.3,-3.2, // 3
+ -4.3,+5.1, // 4
+  1.4, 1.3,
+  1.5, 1.4,
+  1.6, 1.5,
+  1.7, 1.6,
+  1.0, 1.7,
+  2.1, 3.1, // 5x
+  2.2, 3.2,
+  2.3, 3.3,
+  1.0, 3.4,
+  2.4, 3.5,
+  2.5, 3.6,
+  2.6, 3.7,
+  2.7, 3.8,
+  4.1, 5.1, // 5y
+  4.2, 5.2,
+  4.3, 5.3,
+  4.4, 1.0,
+  4.5, 5.4,
+  4.6, 5.5,
+  4.7, 5.6,
+  4.8, 5.7,
+  6.1, 7.1, // 6x
+  6.2, 7.2,
+  6.3, 7.3,
+  6.4, 7.4,
+ +5.0,-1.2, // 6
+ -2.2,-2.3, // 7
+  6.6, 1.0,
+  6.7, 7.7,
+  8.1, 9.1, // 6y
+  8.2, 9.2,
+  8.3, 9.3,
+  8.4, 9.4,
+ -1.2,+4.0, // 6
+ -1.3,-3.2, // 7
+  1.0, 9.6,
+  8.7, 9.7,
+  0.1, 1.1, // 7x
+  0.2, 1.2,
+  0.3, 1.3,
+  0.4, 1.4,
+ -2.2,-1.3, // 6
+ +5.1,-4.3, // 7
+  0.6, 1.7,
+  0.7, 1.0,
+  2.1, 3.1, // 7y
+  2.2, 3.2,
+  2.3, 3.3,
+  2.4, 3.4,
+ -2.3,-3.2, // 6
+ -4.3,+4.1, // 7
+  2.7, 3.6,
+  1.0, 3.7, //  9
 
   24.1, 25.1, // 8x (rows associated with Lagrange multiplier vertex label 8)
   24.2,+1.0, //  3
@@ -242,19 +240,19 @@
 // Computed values
 // ----------------------------------------------------------------------
 
-const double pylith::faults::CohesiveDynDataTri3::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_orientation[] = {
   0.0, -1.0,  -1.0, 0.0,
   0.0, -1.0,  -1.0, 0.0
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_area[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_area[] = {
   1.0,
   1.0,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_forcesInitial[] = {
-  2.05, -1.05,
-  2.05, -1.05,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_initialTractions[] = {
+  2.0, -1.0,
+  2.1, -1.1,
 };
 
 
@@ -267,15 +265,15 @@
 // Stick case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3::_fieldIncrStick[] = {
-  1.1, 29.1,
-  1.2, 29.2, // 3
-  1.3, 29.3, // 4
-  1.4, 29.4,
-  1.5, 29.5, // 6
-  1.7, 29.7, // 7
-  1.6, -29.6, // 8
-  1.8, -29.8, // 9
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldIncrStick[] = {
+  1.1, 2.1,
+  1.2, 2.2, // 3
+  1.3, 2.3, // 4
+  1.4, 2.4,
+  1.2, 2.2, // 6
+  1.3, 2.3, // 7
+  21.6, 2.6, // 8
+  21.8, 2.8, // 9
 };
 
 // No change in fieldIncr
@@ -285,64 +283,64 @@
 // Slip case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 3
-  9.3, 10.3, // 4
-  9.4, 10.4,
-  9.5, 10.5, // 6
-  9.7, 10.7, // 7
-  9.6, -10.6, // 8
-  9.8, -10.8, // 9
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldIncrSlip[] = {
+  9.1, 7.1,
+  9.2, 7.2, // 3
+  9.3, 7.3, // 4
+  9.4, 7.4,
+  9.2, 7.2, // 6
+  9.3, 7.3, // 7
+  1.6, 2.6, // 8
+  1.8, 2.8, // 9
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataTri3::_fieldIncrSlipE[] = {
-  9.1,  10.100000000000,
-  9.2,   9.304186565683,
-  9.3,  10.066643380561,
-  9.4,  10.400000000000,
-  9.5,  11.395813434317,
-  9.7,  10.933356619439,
- -8.0, -10.600000000000,
- -8.2, -10.800000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldIncrSlipE[] = {
+   9.100000000000,   7.100000000000,
+   9.200000000000,   7.390546440275,
+   9.300000000000,   8.283993111958,
+   9.400000000000,   7.400000000000,
+   9.200000000000,   7.009453559725,
+   9.300000000000,   6.316006888042,
+   1.600000000000,  -3.480000000000,
+   1.800000000000,  -3.440000000000,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_slipSlipE[] = {
-  -1.791626868633122,                   0.0,
-  -0.466713238878134,                   0.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_slipSlipE[] = {
+   0.381092880550,   0.000000000000,
+   1.967986223916,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
 // Open case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 3
-  9.3, 10.3, // 4
-  9.4, 10.4,
-  9.5, 10.5, // 6
-  9.7, 10.7, // 7
-  9.6, 10.6, // 8
-  9.8, 10.8, // 9
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldIncrOpen[] = {
+  9.1, 7.1,
+  9.2, 7.2, // 3
+  9.3, 7.3, // 4
+  9.4, 7.4,
+  9.2, 7.2, // 6
+  9.3, 7.3, // 7
+  -10.6, 2.6, // 8
+  -10.8, 2.8, // 9
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataTri3::_fieldIncrOpenE[] = {
- 9.100000000000,  10.100000000000,
- 9.200000000000,  10.851688943849,
-10.191208845155,  11.487449638489,
- 9.400000000000,  10.400000000000,
- 9.500000000000,   9.848311056151,
- 8.808791154845,   9.512550361511,
--8.600000000000,  -9.600000000000,
--8.800000000000,  -9.800000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_fieldIncrOpenE[] = {
+   9.100000000000,   7.100000000000,
+  11.874337677762,   7.148344513504,
+  12.357207850137,   8.757371967576,
+   9.400000000000,   7.400000000000,
+   6.525662322238,   7.251655486496,
+   6.242792149863,   5.842628032424,
+  -8.600000000000,  -9.600000000000,
+  -8.800000000000,  -9.800000000000,
 };
 
-const double pylith::faults::CohesiveDynDataTri3::_slipOpenE[] = {
-  1.303377887698464,  0.0,
-  2.374899276978848,  1.782417690310881,
+const PylithScalar pylith::faults::CohesiveDynDataTri3::_slipOpenE[] = {
+  -0.103310972991,   5.348675355523,
+   2.914743935152,   6.114415700274,
 };
 
 // ----------------------------------------------------------------------
@@ -353,36 +351,36 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   initialTractFilename = const_cast<char*>(_initialTractFilename);
 
-  fieldT = const_cast<double*>(_fieldT);
-  jacobian = const_cast<double*>(_jacobian);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  forcesInitial = const_cast<double*>(_forcesInitial);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  initialTractions = const_cast<PylithScalar*>(_initialTractions);
 
   constraintVertices = const_cast<int*>(_constraintVertices);
   numConstraintVert = _numConstraintVert;  
 
   // Stick
-  fieldIncrStick = const_cast<double*>(_fieldIncrStick);
+  fieldIncrStick = const_cast<PylithScalar*>(_fieldIncrStick);
 
   // Slip
-  fieldIncrSlip = const_cast<double*>(_fieldIncrSlip);
-  fieldIncrSlipE = const_cast<double*>(_fieldIncrSlipE);
-  slipSlipE = const_cast<double*>(_slipSlipE);
+  fieldIncrSlip = const_cast<PylithScalar*>(_fieldIncrSlip);
+  fieldIncrSlipE = const_cast<PylithScalar*>(_fieldIncrSlipE);
+  slipSlipE = const_cast<PylithScalar*>(_slipSlipE);
 
   // Open
-  fieldIncrOpen = const_cast<double*>(_fieldIncrOpen);
-  fieldIncrOpenE = const_cast<double*>(_fieldIncrOpenE);
-  slipOpenE = const_cast<double*>(_slipOpenE);
+  fieldIncrOpen = const_cast<PylithScalar*>(_fieldIncrOpen);
+  fieldIncrOpenE = const_cast<PylithScalar*>(_fieldIncrOpenE);
+  slipOpenE = const_cast<PylithScalar*>(_slipOpenE);
 } // constructor
 
 pylith::faults::CohesiveDynDataTri3::~CohesiveDynDataTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,29 +49,29 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
   static const char* _initialTractFilename; ///< Name of db for initial tractions.
 
-  static const double _fieldT[]; ///< Solution field at time t.
-  static const double _fieldIncrStick[]; ///< Solution increment at time t for stick case.
-  static const double _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
-  static const double _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
-  static const double _jacobian[]; ///< Jacobian sparse matrix.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncrStick[]; ///< Solution increment at time t for stick case.
+  static const PylithScalar _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
+  static const PylithScalar _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
+  static const PylithScalar _jacobian[]; ///< Jacobian sparse matrix.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _forcesInitial[]; ///< Expected values for initial forces.
-  static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
-  static const double _slipSlipE[]; ///< Expected values for slip for slip case.
-  static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
-  static const double _slipOpenE[]; ///< Expected values for slip for opening case.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _initialTractions[]; ///< Expected values for initial tractions.
+  static const PylithScalar _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
+  static const PylithScalar _slipSlipE[]; ///< Expected values for slip for slip case.
+  static const PylithScalar _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
+  static const PylithScalar _slipOpenE[]; ///< Expected values for slip for opening case.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _numConstraintVert; ///< Number of constraint vertices
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,27 +76,27 @@
 
 const int pylith::faults::CohesiveDynDataTri3d::_numBasis = 2;
 
-const int pylith::faults::CohesiveDynDataTri3d::_numQuadPts = 1;
+const int pylith::faults::CohesiveDynDataTri3d::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveDynDataTri3d::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -107,24 +107,22 @@
 const char* pylith::faults::CohesiveDynDataTri3d::_initialTractFilename = 
   "data/tri3d_initialtract.spatialdb";
 
-const double pylith::faults::CohesiveDynDataTri3d::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldT[] = {
   6.1, 8.1,
   6.2, 8.2, // 5
   6.3, 8.3, // 6
   6.4, 8.4,
   6.5, 8.5, // 8
   6.6, 8.6,
-  6.7, 8.7, // 10
-  6.9, 8.9, // 11
-  7.1, 9.1, // 12
-  6.8, 8.8, // 13
-  6.0, 8.0, // 14
-  7.2, 9.2, // 15
+  6.2, 8.2, // 10
+  6.3, 8.3, // 11
+  6.5, 8.5, // 12
+ -3.8, 4.8, // 13
+  3.0, 4.0, // 14
+  3.2, 4.2, // 15
 };
 
-// :TODO: Make sensible values for Jacobian for DOF on positive and
-// negative sides of the fault. Add semi-random values for other DOF.
-const double pylith::faults::CohesiveDynDataTri3d::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_jacobian[] = {
   1.0, 1.1, // 4x
   1.1, 2.1,
   1.2, 2.2,
@@ -150,78 +148,54 @@
   3.1, 4.0,
   3.2, 4.1,
   6.1, 7.2, // 5x
-  6.0, 7.3,
-  6.9, 7.4,
+ +6.0,-1.0, // 5
+ -1.1,-1.2, // 6
   6.8, 7.5,
-  6.7, 7.6,
+ -1.3,-1.4, // 8
   6.6, 7.7,
   6.5, 7.8,
   6.4, 7.9,
   6.3, 7.0,
- -0.70710678118654757, +0.70710678118654757, // 13
+  6.5, 6.6,
   6.2, 7.1,
   6.1, 7.2,
   3.0, 5.1, // 5y
-  3.1, 5.2,
-  3.2, 5.2,
+ -1.0,+6.1, // 5
+ -0.9,-0.8, // 6
   3.3, 5.1,
-  3.4, 5.3,
+ -0.7,-0.6, // 8
   3.5, 5.0,
   3.6, 5.4,
   3.7, 5.9,
   3.8, 5.5,
- +0.70710678118654757, +0.70710678118654757, // 13
+  3.9, 5.5,
   4.2, 5.6,
   4.1, 5.8,
   3.0, 2.7, // 6x
-  3.9, 2.7,
-  3.8, 2.8,
+ -1.1,-0.9, // 5
+ +6.2,-2.1, // 6
   3.7, 2.6,
-  3.6, 2.9,
+ -2.2,-2.3, // 8
   3.5, 2.5,
   3.4, 2.1,
   3.3, 2.4,
   3.2, 2.2,
   3.1, 2.3,
-  0.0,+1.0, // 14
+  2.0, 2.0,
   3.0, 2.4,
   4.1, 6.1, // 6y
-  4.1, 6.6,
-  4.2, 6.2,
-  4.2, 6.5,
+ -1.2,-0.8, // 5
+ -2.1,+6.3, // 6
   4.3, 6.3,
+ -1.4,-1.5, // 8
   4.3, 6.4,
   4.4, 6.4,
   4.4, 6.3,
   4.5, 6.5,
   4.5, 6.2,
- +1.0, 0.0, // 14
+  4.6, 7.0,
   4.6, 6.1,
-  4.6, 6.6, // 7x
-  5.7, 9.7,
-  5.7, 9.9,
-  5.8, 9.8,
-  5.8, 9.8,
-  5.9, 9.9,
-  5.1, 9.7,
-  5.2, 9.1,
-  5.3, 9.6,
-  5.1, 9.2,
-  5.4, 9.5,
-  5.2, 9.3,
-  5.5, 9.4, // 7y
-  6.3, 9.4,
-  6.6, 9.3,
-  6.4, 9.5,
-  6.7, 9.2,
-  6.5, 9.6,
-  6.8, 9.1,
-  6.6, 9.7,
-  7.9, 8.9,
-  7.7, 8.8,
-  7.1, 8.8,
-  7.8, 8.9,
-  7.2, 8.7, // 8x
+  7.2, 8.7, // 7x
   7.9, 8.1,
   7.3, 8.6,
   7.1, 8.2,
@@ -232,8 +206,8 @@
   7.6, 8.3,
   7.4, 8.5,
   7.7, 8.6,
- -1.0, 0.0, // 15
-  6.5, 3.3, // 8y
+  7.8, 8.7,
+  6.5, 3.3, // 7y
   6.4, 3.4,
   6.3, 3.8,
   6.2, 3.9,
@@ -244,7 +218,31 @@
   5.6, 3.4,
   5.5, 3.3,
   5.4, 3.2,
-  0.0,+1.0, // 15
+  5.5, 3.3,
+  4.6, 6.6, // 8x
+ -1.3,-0.7, // 5
+ -2.2,-1.4, // 6
+  5.8, 9.8,
+ +6.4,-1.1, // 8
+  5.9, 9.9,
+  5.1, 9.7,
+  5.2, 9.1,
+  5.3, 9.6,
+  5.1, 9.2,
+  5.4, 9.5,
+  5.2, 9.3,
+  5.5, 9.4, // 8y
+ -1.4,-0.6, // 5
+ -2.3,-1.5, // 6
+  6.4, 9.5,
+ -1.1,+6.5, // 8
+  6.5, 9.6,
+  6.8, 9.1,
+  6.6, 9.7,
+  7.9, 8.9,
+  7.7, 8.8,
+  7.1, 8.8,
+  7.8, 8.9,
   4.4, 2.0, // 9x
   4.3, 2.1,
   4.2, 2.2,
@@ -269,97 +267,97 @@
   2.7, 3.8,
   2.8, 3.7,
   2.9, 3.6,
-  1.0, 3.5, // 10x
-  1.1, 4.4,
-  1.2, 4.3,
-  1.3, 4.2,
-  1.4, 4.1,
-  1.5, 4.0,
-  1.6, 4.1,
-  1.7, 4.2,
-  1.8, 4.3,
- +0.70710678118654757, -0.70710678118654757, // 13
-  1.9, 5.4,
-  9.0, 5.5,
-  8.0, 4.7, // 10y
-  7.1, 4.5,
-  6.2, 4.4,
-  6.3, 4.6,
-  6.4, 4.7,
-  6.5, 4.4,
-  4.6, 4.8,
-  4.7, 4.4,
-  4.8, 4.2,
- -0.70710678118654757, -0.70710678118654757, // 13
-  6.1, 4.8,
-  6.2, 4.7,
-  6.3, 5.6, // 11x
-  6.4, 5.5,
-  6.5, 5.4,
-  6.6, 5.3,
-  6.7, 5.1,
-  6.8, 5.2,
-  6.9, 5.3,
-  7.0, 5.9,
-  7.7, 5.8,
-  7.6, 5.7,
-  0.0,-1.0, // 14
-  7.5, 5.5,
-  7.4, 6.4, // 11y
-  7.3, 6.2,
-  7.2, 6.0,
-  7.2, 6.9,
-  7.1, 6.8,
-  7.0, 6.7,
-  7.2, 6.6,
-  7.3, 6.5,
-  7.4, 6.3,
-  7.5, 6.2,
- -1.0, 0.0, // 14
-  8.6, 6.2,
-  8.7, 6.3, // 12x
-  8.8, 6.3,
-  8.9, 7.4,
-  8.0, 7.5,
-  8.6, 7.6,
-  8.5, 7.7,
-  8.4, 7.8,
-  8.0, 7.9,
-  8.3, 7.1,
-  8.0, 7.2,
-  8.2, 7.3,
- +1.0, 0.0, // 15
-  7.2, 8.6, // 12y
-  6.6, 8.5,
-  6.7, 8.4,
-  6.9, 8.2,
-  6.5, 8.3,
-  6.4, 8.5,
-  6.3, 8.6,
-  6.5, 8.8,
-  4.7, 8.7,
-  4.9, 8.5,
-  7.5, 8.3,
-  6.0,-1.0, // 15
+  6.1, 7.2, // 10x
+  6.8, 7.5,
+  6.6, 7.7,
+  6.5, 7.8,
+  6.4, 7.9,
+  6.3, 7.0,
+ +5.0,-1.0, // 10
+ -1.1,-1.2, // 11
+ -1.3,-1.4, // 12
+  6.5, 6.6,
+  6.2, 7.1,
+  6.1, 7.2,
+  3.0, 5.1, // 10y
+  3.3, 5.1,
+  3.5, 5.0,
+  3.6, 5.4,
+  3.7, 5.9,
+  3.8, 5.5,
+ -1.0,+5.1, // 10
+ -0.9,-0.8, // 11
+ -0.7,-0.6, // 12
+  3.9, 5.5,
+  4.2, 5.6,
+  4.1, 5.8,
+  3.0, 2.7, // 11x
+  3.7, 2.6,
+  3.5, 2.5,
+  3.4, 2.1,
+  3.3, 2.4,
+  3.2, 2.2,
+ -1.1,-0.9, // 10
+ +5.2,-2.1, // 11
+ -2.2,-2.3, // 12
+  3.1, 2.3,
+  2.0, 2.0,
+  3.0, 2.4,
+  4.1, 6.1, // 11y
+  4.3, 6.3,
+  4.3, 6.4,
+  4.4, 6.4,
+  4.4, 6.3,
+  4.5, 6.5,
+ -1.2,-0.8, // 10
+ -2.1,+5.3, // 11
+ -1.4,-1.5, // 12
+  4.5, 6.2,
+  4.6, 7.0,
+  4.6, 6.1,
+  4.6, 6.6, // 12x
+  5.8, 9.8,
+  5.9, 9.9,
+  5.1, 9.7,
+  5.2, 9.1,
+  5.3, 9.6,
+ -1.3,-0.7, // 10
+ -2.2,-1.4, // 11
+ +5.4,-1.1, // 12
+  5.1, 9.2,
+  5.4, 9.5,
+  5.2, 9.3,
+  5.5, 9.4, // 12y
+  6.4, 9.5,
+  6.5, 9.6,
+  6.8, 9.1,
+  6.6, 9.7,
+  7.9, 8.9,
+ -1.4,-0.6, // 10
+ -2.3,-1.5, // 11
+ -1.1,+5.5, // 12
+  7.7, 8.8,
+  7.1, 8.8,
+  7.8, 8.9,
   3.2, 8.3, // 13x
- -0.70710678118654757, +0.70710678118654757, // 5
+  3.3, 8.4,
   5.4, 9.3,
   5.6, 9.7,
   3.7, 9.0,
   5.9, 9.9,
- +0.70710678118654757, -0.70710678118654757, // 10
+  6.0, 9.8,
   4.4, 4.8,
   4.6, 4.7,
   4.8, 4.6,
   4.9, 4.4,
   4.0, 4.2,
   4.2, 4.3, // 13y
- +0.70710678118654757, +0.70710678118654757, // 5
+  4.3, 4.4,
   7.5, 3.4,
   6.7, 3.5,
   6.4, 3.6,
   4.6, 3.9,
- -0.70710678118654757, -0.70710678118654757, // 10
+  4.7, 4.0,
   8.9, 2.8,
   7.6, 2.7,
   6.4, 2.6,
@@ -367,24 +365,24 @@
   3.8, 2.3,
   4.5, 2.2, // 14x
   8.5, 2.4,
-  0.0,+1.0, // 6
+  0.0, 1.0,
   7.4, 3.6,
   6.6, 3.5,
   4.7, 3.4,
   3.8, 3.5,
-  0.0,-1.0, // 11
+  0.0, 1.0,
   5.9, 3.7,
   8.7, 4.6,
   7.6, 4.5,
   6.5, 4.4,
   5.5, 4.3, // 14y
   4.3, 4.8,
- +1.0, 0.0, // 6
+  1.0, 0.0,
   4.3, 4.7,
   6.5, 4.6,
   9.6, 4.5,
   8.7, 4.3,
- -1.0, 0.0, // 11
+  1.0, 0.0,
   7.9, 4.5,
   6.7, 5.3,
   5.6, 5.8,
@@ -393,11 +391,11 @@
   3.3, 5.5,
   4.2, 5.3,
   5.4, 5.6,
- -1.0, 6.0, // 8
+  1.0, 6.0,
   0.8, 6.6,
   9.8, 6.5,
   8.5, 6.5,
- +1.0, 0.0, // 12
+  1.0, 0.0,
   7.5, 7.3,
   6.4, 7.6,
   5.2, 7.8,
@@ -405,11 +403,11 @@
   3.7, 8.6,
   3.8, 8.5,
   2.9, 8.3,
-  0.0,+1.0, // 8
+  0.0, 1.0,
   2.0, 9.9,
   2.7, 9.8,
   1.6, 9.7,
-  0.0,-1.0, // 12
+  0.0, 1.0,
   1.5, 5.5,
   1.2, 5.4,
   1.1, 5.3,
@@ -420,14 +418,14 @@
 // Computed values
 // ----------------------------------------------------------------------
 
-const double pylith::faults::CohesiveDynDataTri3d::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_orientation[] = {
   +0.70710678118654757, -0.70710678118654757,  
   -0.70710678118654757, -0.70710678118654757,
   0.0, -1.0,  -1.0,  0.0,
  +1.0,  0.0,   0.0, -1.0
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_area[] = {
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_area[] = {
   2.0,
   1.0,
   1.0,
@@ -438,10 +436,10 @@
   13, 14, 15
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_forcesInitial[] = {
-  3.15*1.4142135623730951, 1.00*1.41421356237309,
-  2.05, -1.05,
-  1.10,  2.10,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_initialTractions[] = {
+  3.0*0.70710678118654757, 0.70710678118654757,
+  2.1, -1.1,
+  1.2,  2.2,
 };
 
 
@@ -449,19 +447,19 @@
 // Stick case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrStick[] = {
-  1.1, 29.1,
-  1.2, 29.2, // 5
-  1.3, 29.3, // 6
-  1.4, 29.4,
-  1.5, 29.5, // 8
-  1.6, 29.6,
-  1.7, 29.7, // 10
-  1.9, 29.9, // 11
-  2.1, 29.1, // 12
-  1.8, -29.8, // 13
-  1.0, -29.0, // 14
-  2.2, -29.2, // 15
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldIncrStick[] = {
+  1.1, 2.1,
+  1.2, 2.2, // 5
+  1.3, 2.3, // 6
+  1.4, 2.4,
+  1.5, 2.5, // 8
+  1.6, 2.6,
+  1.7, 2.7, // 10
+  1.9, 2.9, // 11
+  2.1, 2.1, // 12
+  21.8, 22.8, // 13
+  21.0, 2.0, // 14
+  2.2, 22.2, // 15
 };
 
 // No change in fieldIncr
@@ -471,84 +469,82 @@
 // Slip case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlip[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 5
-  9.3, 10.3, // 6
-  9.4, 10.4,
-  9.5, 10.5, // 8
-  9.6, 10.6,
-  9.7, 10.7, // 10
-  9.9, 10.9, // 11
-  9.1, 10.1, // 12
-  9.8, -10.8, // 13
-  9.0, -10.0, // 14
-  9.2, -10.2, // 15
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlip[] = {
+  1.1, 2.1,
+  1.2, 2.2, // 5
+  1.3, 2.3, // 6
+  1.4, 2.4,
+  1.5, 2.5, // 8
+  1.6, 2.6,
+  1.2, 2.2, // 10
+  1.3, 2.3, // 11
+  1.5, 2.5, // 12
+  1.8, 0.8, // 13
+  1.0, 0.1, // 14
+  1.2, 0.2, // 15
 };
 
 // Output
-// TODO Update
-const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlipE[] = {
-  9.100000000000,  10.100000000000,
-  4.178047263424,  15.221952736576,
-  9.300000000000,  10.050098043990,
-  9.400000000000,  10.400000000000,
-  9.655679817715,  10.500000000000,
-  9.600000000000,  10.600000000000,
- 14.721952736576,   5.678047263424,
-  9.900000000000,  11.149901956010,
-  8.944320182285,  10.100000000000,
- -5.600000000000, -10.800000000000,
- -4.800000000000, -10.000000000000,
- -6.600000000000, -10.200000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldIncrSlipE[] = {
+   1.100000000000,   2.100000000000,
+   2.005761009464,   1.394238990536,
+   1.300000000000,   1.928356338235,
+   1.400000000000,   2.400000000000,
+   1.216364402612,   2.500000000000,
+   1.600000000000,   2.600000000000,
+   0.394238990536,   3.005761009464,
+   1.300000000000,   2.671643661765,
+   1.783635597388,   2.500000000000,
+   4.520000000000,  -1.920000000000,
+   1.000000000000,  -1.600000000000,
+  -0.560000000000,   0.200000000000,
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_slipSlipE[] = {
-  14.204227339325,   0.0,
-  -0.499803912020,   0.0,
-  -0.311359635429,   0.0,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_slipSlipE[] = {
+  -2.279036295232,   0.000000000000,
+  -0.743287323529,   0.000000000000,
+   0.567271194775,   0.000000000000,
 };
 
 // ----------------------------------------------------------------------
 // Open case
 // ----------------------------------------------------------------------
 // Input
-const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpen[] = {
-  9.1, 10.1,
-  9.2, 10.2, // 5
-  9.3, 10.3, // 6
-  9.4, 10.4,
-  9.5, 10.5, // 8
-  9.6, 10.6,
-  9.7, 10.7, // 10
-  9.9, 10.9, // 11
-  9.1, 10.1, // 12
-  9.8, 10.8, // 13
-  9.0, 10.0, // 14
-  9.2, 10.2, // 15
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpen[] = {
+  1.1, 2.1,
+  1.2, 2.2, // 5
+  1.3, 2.3, // 6
+  1.4, 2.4,
+  1.5, 2.5, // 8
+  1.6, 2.6,
+  1.2, 2.2, // 10
+  1.3, 2.3, // 11
+  1.5, 2.5, // 12
+-10.8, 0.8, // 13
+-10.0, 0.1, // 14
+  1.2,-10.2, // 15
 };
 
 // Output
-const double pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpenE[] = {
-   9.100000000000,  10.100000000000,
-  17.946141606808,   1.453858393192,
-   9.300000000000,  16.358051491522,
-   9.400000000000,  10.400000000000,
-   1.376240123890,  19.299429217321,
-   9.600000000000,  10.600000000000,
-   0.953858393192,  19.446141606808,
-   9.900000000000,   4.841948508478,
-  17.223759876110,   1.300570782679,
-  -6.800000000000,  -8.800000000000,
-  -6.000000000000,  -8.000000000000,
-  -7.200000000000,  -9.200000000000,
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_fieldIncrOpenE[] = {
+   1.100000000000,   2.100000000000,
+   9.940107961522,   3.662120348918,
+   5.688525058023,   5.314075601410,
+   1.400000000000,   2.400000000000,
+   3.622067204316,   6.167076609904,
+   1.600000000000,   2.600000000000,
+  -7.540107961522,   0.737879651082,
+  -3.088525058023,  -0.714075601410,
+  -0.622067204316,  -1.167076609904,
+   3.800000000000,  -4.800000000000,
+  -3.000000000000,  -4.000000000000,
+  -3.200000000000,  -4.200000000000,
 };
 
-const double pylith::faults::CohesiveDynDataTri3d::_slipOpenE[] = {
--24.737824157567,  0.0,
- 12.116102983044,  0.0,
- 16.247519752219,  17.598858434641,
-
+const PylithScalar pylith::faults::CohesiveDynDataTri3d::_slipOpenE[] = {
+ -10.292628788528,  14.428129643052,
+   6.028151202820,   8.777050116045,
+  -4.244134408633,   7.334153219809,
 };
 
 // ----------------------------------------------------------------------
@@ -559,36 +555,36 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   initialTractFilename = const_cast<char*>(_initialTractFilename);
 
-  fieldT = const_cast<double*>(_fieldT);
-  jacobian = const_cast<double*>(_jacobian);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  forcesInitial = const_cast<double*>(_forcesInitial);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  initialTractions = const_cast<PylithScalar*>(_initialTractions);
 
   constraintVertices = const_cast<int*>(_constraintVertices);
   numConstraintVert = _numConstraintVert;  
 
   // Stick
-  fieldIncrStick = const_cast<double*>(_fieldIncrStick);
+  fieldIncrStick = const_cast<PylithScalar*>(_fieldIncrStick);
 
   // Slip
-  fieldIncrSlip = const_cast<double*>(_fieldIncrSlip);
-  fieldIncrSlipE = const_cast<double*>(_fieldIncrSlipE);
-  slipSlipE = const_cast<double*>(_slipSlipE);
+  fieldIncrSlip = const_cast<PylithScalar*>(_fieldIncrSlip);
+  fieldIncrSlipE = const_cast<PylithScalar*>(_fieldIncrSlipE);
+  slipSlipE = const_cast<PylithScalar*>(_slipSlipE);
 
   // Open
-  fieldIncrOpen = const_cast<double*>(_fieldIncrOpen);
-  fieldIncrOpenE = const_cast<double*>(_fieldIncrOpenE);
-  slipOpenE = const_cast<double*>(_slipOpenE);
+  fieldIncrOpen = const_cast<PylithScalar*>(_fieldIncrOpen);
+  fieldIncrOpenE = const_cast<PylithScalar*>(_fieldIncrOpenE);
+  slipOpenE = const_cast<PylithScalar*>(_slipOpenE);
 } // constructor
 
 pylith::faults::CohesiveDynDataTri3d::~CohesiveDynDataTri3d(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTri3d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,29 +49,29 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
   static const char* _initialTractFilename; ///< Name of db for initial tractions.
 
-  static const double _fieldT[]; ///< Solution field at time t.
-  static const double _fieldIncrStick[]; ///< Solution increment at time t for stick case.
-  static const double _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
-  static const double _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
-  static const double _jacobian[]; ///< Jacobian sparse matrix.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncrStick[]; ///< Solution increment at time t for stick case.
+  static const PylithScalar _fieldIncrSlip[]; ///< Solution increment at time t for slip case.
+  static const PylithScalar _fieldIncrOpen[]; ///< Solution increment at time t for opening case.
+  static const PylithScalar _jacobian[]; ///< Jacobian sparse matrix.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _forcesInitial[]; ///< Expected values for initial forces.
-  static const double _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
-  static const double _slipSlipE[]; ///< Expected values for slip for slip case.
-  static const double _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
-  static const double _slipOpenE[]; ///< Expected values for slip for opening case.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _initialTractions[]; ///< Expected values for initial tractions.
+  static const PylithScalar _fieldIncrSlipE[]; ///< Expected values for solution increment for slip case.
+  static const PylithScalar _slipSlipE[]; ///< Expected values for slip for slip case.
+  static const PylithScalar _fieldIncrOpenE[]; ///< Expected values for solution increment for opening case.
+  static const PylithScalar _slipOpenE[]; ///< Expected values for slip for opening case.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _numConstraintVert; ///< Number of constraint vertices
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_faults_cohesivekindata_hh)
 #define pylith_faults_cohesivekindata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace faults {
      class CohesiveKinData;
@@ -48,11 +50,11 @@
   int cellDim; ///< Number of dimensions associated with cell
   int numBasis; ///< Number of vertices in cell
   int numQuadPts; ///< Number of quadrature points
-  double* quadPts; ///< Coordinates of quad pts in ref cell
-  double* quadWts; ///< Weights of quadrature points
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDeriv; ///< Derivatives of basis fns at quad pts
-  double* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
+  PylithScalar* quadPts; ///< Coordinates of quad pts in ref cell
+  PylithScalar* quadWts; ///< Weights of quadrature points
+  PylithScalar* basis; ///< Basis fns at quadrature points
+  PylithScalar* basisDeriv; ///< Derivatives of basis fns at quad pts
+  PylithScalar* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
   //@}
 
   /// @name Fault information
@@ -67,24 +69,24 @@
 
   /// @name Input fields
   //@{
-  double* fieldT; ///< Field over domain at time t.
-  double* fieldIncr; ///< Solution increment field over domain at time t.
-  double* jacobianLumped; ///< Lumped Jacobian.
+  PylithScalar* fieldT; ///< Field over domain at time t.
+  PylithScalar* fieldIncr; ///< Solution increment field over domain at time t.
+  PylithScalar* jacobianLumped; ///< Lumped Jacobian.
   //@}
 
   /// @name Calculated values.
   //@{
-  double* orientation; ///< Expected values for fault orientation.
-  double* area; ///< Expected values for fault area.
-  double* residual; ///< Expected values from residual calculation.
+  PylithScalar* orientation; ///< Expected values for fault orientation.
+  PylithScalar* area; ///< Expected values for fault area.
+  PylithScalar* residual; ///< Expected values from residual calculation.
 
   /// Expected values from residual calculation using solution increment.
-  double* residualIncr;
+  PylithScalar* residualIncr;
 
-  double* jacobian; ///< Expected values from Jacobian calculation.
+  PylithScalar* jacobian; ///< Expected values from Jacobian calculation.
 
   /// Expected values for solution increment after adjustment.
-  double* fieldIncrAdjusted;
+  PylithScalar* fieldIncrAdjusted;
 
   int* verticesFault; ///< Expected points for Fault vertices
   int* verticesLagrange; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,25 +47,25 @@
 
 const int pylith::faults::CohesiveKinDataHex8::_numQuadPts = 4;
 
-const double pylith::faults::CohesiveKinDataHex8::_quadPts[] = {
-  -0.57735027, -0.57735027,
-  +0.57735027, -0.57735027,
-  +0.57735027, +0.57735027,
-  -0.57735027, +0.57735027,
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_quadPts[] = {
+  -1.0, -1.0,
+  +1.0, -1.0,
+  +1.0, +1.0,
+  -1.0, +1.0
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_quadWts[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_quadWts[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_basis[] = {
-  0.62200847,  0.16666667,  0.16666667,  0.0446582,
-  0.16666667,  0.62200847,  0.0446582,   0.16666667,
-  0.16666667,  0.0446582,   0.62200847,  0.16666667,
-  0.0446582,   0.16666667,  0.16666667,  0.62200847,
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_basis[] = {
+  1.0, 0.0, 0.0, 0.0,
+  0.0, 1.0, 0.0, 0.0,
+  0.0, 0.0, 1.0, 0.0,
+  0.0, 0.0, 0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_basisDeriv[] = {
   -0.39433757, -0.39433757,
   +0.39433757, -0.10566243,
   +0.10566243, +0.10566243,
@@ -87,7 +87,7 @@
   -0.39433757, +0.39433757,
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_verticesRef[] = {
   -1.0, -1.0,
   +1.0, -1.0,
   +1.0, +1.0,
@@ -107,7 +107,7 @@
 const char* pylith::faults::CohesiveKinDataHex8::_riseTimeFilename = 
   "data/hex8_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataHex8::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_fieldT[] = {
   4.1, 6.1, 8.1,
   4.2, 6.2, 8.2,
   4.3, 6.3, 8.3,
@@ -130,7 +130,7 @@
   5.0, 7.0, 9.0, // 21
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_fieldIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_fieldIncr[] = {
   3.1, 4.1, 5.1,
   3.2, 4.2, 5.2,
   3.3, 4.3, 5.3,
@@ -153,7 +153,7 @@
   3.0, 4.0, 5.0, // 21
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_jacobianLumped[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_jacobianLumped[] = {
   1.1, 1.1, 1.1,
   1.2, 1.2, 1.2,
   1.3, 1.3, 1.3,
@@ -170,9 +170,9 @@
   1.5, 1.5, 1.5, // 15
   1.7, 1.7, 1.7, // 16
   1.9, 1.9, 1.9, // 17
-  1.4, 1.4, 1.4, // 18
-  1.6, 1.6, 1.6, // 19
-  1.8, 1.8, 1.8, // 20
+  1.0, 1.0, 1.0, // 18
+  1.0, 1.0, 1.0, // 19
+  1.0, 1.0, 1.0, // 20
   1.0, 1.0, 1.0, // 21
 };
 
@@ -199,64 +199,80 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataHex8::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_orientation[] = {
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_area[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_residual[] = {
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+  +5.4, +7.4, +9.4, // 6
+  +5.6, +7.6, +9.6, // 7
+  +5.8, +7.8, +9.8, // 8
+  +5.0, +7.0, +9.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
-  0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
-  0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
-  1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
-  1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+  -5.4, -7.4, -9.4, // 14
+  -5.6, -7.6, -9.6, // 15
+  -5.8, -7.8, -9.8, // 16
+  -5.0, -7.0, -9.0, // 17
+
+  // 18 (constraint)
+  -(5.3-4.5+0.07938069066), -(7.3-6.5+1.82575588523), -(9.3-8.5+0.55566483464),
+
+  // 19 (constraint)
+  -(5.5-4.6+0.14140241667), -(7.5-6.6+1.69682900001), -(9.5-8.6+0.56560966667),
+
+  // 20 (constraint)
+  -(5.7-4.7+0.18205179147), -(7.7-6.7+1.51709826228), -(9.7-8.7+0.54615537442),
+
+  // 21 (constraint)
+  -(5.9-4.8+0.19904410828), -(7.9-6.8+1.29378670385), -(9.9-8.8+0.49761027071),
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_residualIncr[] = {
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+  +5.4, +7.4, +9.4, // 6
+  +5.6, +7.6, +9.6, // 7
+  +5.8, +7.8, +9.8, // 8
+  +5.0, +7.0, +9.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
-  0.8+1.82575588523, -0.8+-0.55566483464, 0.8+0.07938069066, // 18 (constraint)
-  0.9+1.69682900001, -0.9+-0.56560966667, 0.9+0.14140241667, // 19 (constraint)
-  1.0+1.51709826228, -1.0+-0.54615537442, 1.0+0.18205179147, // 20 (constraint)
-  1.1+1.29378670385, -1.1+-0.49761027071, 1.1+0.19904410828, // 21 (constraint)
+  -5.4, -7.4, -9.4, // 14
+  -5.6, -7.6, -9.6, // 15
+  -5.8, -7.8, -9.8, // 16
+  -5.0, -7.0, -9.0, // 17
+
+  // 18 (constraint)
+  -(5.3-4.5+0.07938069066), -(7.3-6.5+1.82575588523), -(9.3-8.5+0.55566483464),
+
+  // 19 (constraint)
+  -(5.5-4.6+0.14140241667), -(7.5-6.6+1.69682900001), -(9.5-8.6+0.56560966667),
+
+  // 20 (constraint)
+  -(5.7-4.7+0.18205179147), -(7.7-6.7+1.51709826228), -(9.7-8.7+0.54615537442),
+
+  // 21 (constraint)
+  -(5.9-4.8+0.19904410828), -(7.9-6.8+1.29378670385), -(9.9-8.8+0.49761027071),
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_jacobian[] = {
   0.0, 0.0, 0.0, // 2x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -513,7 +529,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 18
+ -1.0, 0.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -533,7 +549,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 18
+  0.0,-1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -553,7 +569,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 18
+  0.0, 0.0,-1.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -574,7 +590,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 19
+ -1.0, 0.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
@@ -594,7 +610,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 19
+  0.0,-1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
@@ -614,7 +630,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 19
+  0.0, 0.0,-1.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -635,7 +651,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 20
+ -1.0, 0.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
@@ -655,7 +671,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 20
+  0.0,-1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
@@ -675,7 +691,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 20
+  0.0, 0.0,-1.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -696,7 +712,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 21
+ -1.0, 0.0, 0.0, // 21
   0.0, 0.0, 0.0, // 9y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -716,7 +732,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 21
+  0.0,-1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 9z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -736,7 +752,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 21
+  0.0, 0.0,-1.0, // 21
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -993,7 +1009,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 18
+ +1.0, 0.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1013,7 +1029,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 18
+  0.0,+1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1033,7 +1049,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 18
+  0.0, 0.0,+1.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1054,7 +1070,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 19
+ +1.0, 0.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15y
@@ -1074,7 +1090,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 19
+  0.0,+1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15z
@@ -1094,7 +1110,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 19
+  0.0, 0.0,+1.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16x
@@ -1115,7 +1131,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 20
+ +1.0, 0.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16y
   0.0, 0.0, 0.0,
@@ -1135,7 +1151,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 20
+  0.0,+1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16z
   0.0, 0.0, 0.0,
@@ -1155,7 +1171,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 20
+  0.0, 0.0,+1.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 17x
   0.0, 0.0, 0.0,
@@ -1176,7 +1192,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 21
+ +1.0, 0.0, 0.0, // 21
   0.0, 0.0, 0.0, // 17y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1196,7 +1212,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 21
+  0.0,+1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 17z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1216,12 +1232,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 21
+  0.0, 0.0,+1.0, // 21
   0.0, 0.0, 0.0, // 18x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 6
+ -1.0, 0.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1229,7 +1245,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 14
+ +1.0, 0.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1241,7 +1257,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 6
+  0.0,-1.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1249,7 +1265,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 14
+  0.0,+1.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1261,7 +1277,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 6
+  0.0, 0.0,-1.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1269,7 +1285,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+  0.0, 0.0,+1.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1282,7 +1298,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 7
+ -1.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1290,7 +1306,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 15
+ +1.0, 0.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1302,7 +1318,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 7
+  0.0,-1.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1310,7 +1326,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 15
+  0.0,+1.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1322,7 +1338,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+  0.0, 0.0,-1.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1330,7 +1346,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+  0.0, 0.0,+1.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1343,7 +1359,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 8
+ -1.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1351,7 +1367,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 16
+ +1.0, 0.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1363,7 +1379,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 8
+  0.0,-1.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1371,7 +1387,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 16
+  0.0,+1.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1383,7 +1399,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+  0.0, 0.0,-1.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1391,7 +1407,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+  0.0, 0.0,+1.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1404,7 +1420,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 9
+ -1.0, 0.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1412,7 +1428,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 17
+ +1.0, 0.0, 0.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1424,7 +1440,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 9
+  0.0,-1.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1432,7 +1448,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 17
+  0.0,+1.0, 0.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1444,7 +1460,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+  0.0, 0.0,-1.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1452,34 +1468,34 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+  0.0, 0.0,+1.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataHex8::_fieldIncrAdjusted[] = {
+const PylithScalar pylith::faults::CohesiveKinDataHex8::_fieldIncrAdjusted[] = {
   3.1, 4.1, 5.1,
   3.2, 4.2, 5.2,
   3.3, 4.3, 5.3,
   3.4, 4.4, 5.4,
-  10.1749505588, 9.31910094671, 1.19608248275, // 6
-  10.1039043952, 9.3565301613, 1.55916596774, // 7
-  10.0557317781, 9.37031383702, 1.88484239309, // 8
-  9.46707670425, 8.80701959867, 2.73150557445, // 9
+  3.81542674923, 5.62624380386, 6.03655867323, // 6
+  4.05551729839, 5.80814306452, 6.26077887097, // 7
+  4.29102589574, 5.95854913114, 6.47307768721, // 8
+  4.5184280556, 6.08059317225, 6.67174581469, // 9
   3.9, 4.9, 5.9,
   3.0, 4.0, 5.0,
   3.1, 4.1, 5.1,
   3.2, 4.2, 5.2,
-  -4.40186602934, -1.26050109236, 10.2660586738, // 14
-  -3.43749802151, -0.573632172048, 9.81022296774, // 15
-  -2.65573177809, 0.0296861629776, 9.51515760691, // 16
-  -1.46880950929, 1.10387616968, 8.80699471894, // 17
-  -7.22865142007, -6.45587627588, -10.0124258381, // 18
-  -7.61044825807, -6.46533445161, -10.4062470323, // 19
-  -7.93953352294, -6.48576793174, -10.8047440227, // 20
-  -7.21263527761, -5.52328996599, -10.2007380677, // 21
+  2.93604605858, 3.00048791863, 4.68089383859, // 14
+  3.01411488172, 3.21131406451, 4.7951692043, // 15
+  3.10897410427, 3.44145086886, 4.92692231279, // 16
+  3.21938394732, 3.6868064684, 5.07413554398, // 17
+  0.473140123852, 1.68936570579, 0.804838009839, // 18
+  0.728827677422, 1.93302890323, 1.05724619355, // 19
+  1.00474402275, 2.13953352294, 1.31423206826, // 20
+  1.29317050009, 2.30506771005, 1.56914246644, // 21
 };
 
 pylith::faults::CohesiveKinDataHex8::CohesiveKinDataHex8(void)
@@ -1489,25 +1505,25 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldIncr = const_cast<double*>(_fieldIncr);
-  jacobianLumped = const_cast<double*>(_jacobianLumped);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
-  fieldIncrAdjusted = const_cast<double*>(_fieldIncrAdjusted);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  fieldIncrAdjusted = const_cast<PylithScalar*>(_fieldIncrAdjusted);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,16 +63,16 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Field over domain at time t.
-  static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
-  static const double _jacobianLumped[]; ///< Lumped Jacobian.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
-  static const double _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,23 +39,23 @@
 
 const int pylith::faults::CohesiveKinDataLine2::_numQuadPts = 1;
 
-const double pylith::faults::CohesiveKinDataLine2::_quadPts[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_quadPts[] = {
   0.0,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_quadWts[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_quadWts[] = {
   1.0,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_basis[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_basis[] = {
   1.0,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_basisDeriv[] = {
   1.0
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_verticesRef[] = {
   0.0
 };
 
@@ -73,7 +73,7 @@
   "data/line2_risetime.spatialdb";
 
 // Don't expect these values to be used, so just use some values.
-const double pylith::faults::CohesiveKinDataLine2::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_fieldT[] = {
   7.1,
   7.2, // 3
   7.3,
@@ -81,7 +81,7 @@
   7.5
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_fieldIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_fieldIncr[] = {
   1.1,
   1.2, // 3
   1.3,
@@ -89,7 +89,7 @@
   1.5
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_jacobianLumped[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_jacobianLumped[] = {
   2.1,
   2.2, // 3
   2.3,
@@ -120,31 +120,31 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataLine2::_orientation[] = {
-  1.0
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_orientation[] = {
+   1.0
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_area[] = {
   1.0
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_residualIncr[] = {
    0.0,
-   7.5,
+  +7.5, // 3
    0.0,
-  -7.5,
+  -7.5, // 5
   -0.2+1.89546413727,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_residual[] = {
    0.0,
-   7.5, // 3
+  +7.5, // 3
    0.0,
-   -7.5, // 5
+  -7.5, // 5
   -0.2+1.89546413727,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_jacobian[] = {
   0.0,  0.0,  0.0,  0.0,  0.0,
   0.0,  0.0,  0.0,  0.0, -1.0,
   0.0,  0.0,  0.0,  0.0,  0.0,
@@ -152,12 +152,12 @@
   0.0, -1.0,  0.0, +1.0,  0.0,
 };
 
-const double pylith::faults::CohesiveKinDataLine2::_fieldIncrAdjusted[] = {
+const PylithScalar pylith::faults::CohesiveKinDataLine2::_fieldIncrAdjusted[] = {
   1.1,
-  -3.09368089375, // 3
+  0.419757841424, // 3
   1.3,
-  5.33587415261, // 5
-  -9.44609796626, // 6
+  2.11522197869, // 5
+  -1.71653274887, // 6
 };
 
 pylith::faults::CohesiveKinDataLine2::CohesiveKinDataLine2(void)
@@ -167,25 +167,25 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldIncr = const_cast<double*>(_fieldIncr);
-  jacobianLumped = const_cast<double*>(_jacobianLumped);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
-  fieldIncrAdjusted = const_cast<double*>(_fieldIncrAdjusted);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  fieldIncrAdjusted = const_cast<PylithScalar*>(_fieldIncrAdjusted);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,16 +63,16 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Field over domain at time t.
-  static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
-  static const double _jacobianLumped[]; ///< Lumped Jacobian.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
-  static const double _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,27 +58,27 @@
 
 const int pylith::faults::CohesiveKinDataQuad4::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataQuad4::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinDataQuad4::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -95,7 +95,7 @@
 const char* pylith::faults::CohesiveKinDataQuad4::_riseTimeFilename = 
   "data/quad4_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataQuad4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2,
   8.3, 9.3, // 4
@@ -108,7 +108,7 @@
   8.0, 9.0, // 11
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_fieldIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_fieldIncr[] = {
   3.1, 4.1,
   3.2, 4.2,
   3.3, 4.3, // 4
@@ -121,7 +121,7 @@
   3.0, 4.0, // 11
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_jacobianLumped[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_jacobianLumped[] = {
   1.1, 1.1,
   1.2, 1.2,
   1.3, 1.3, // 4
@@ -130,7 +130,7 @@
   1.6, 1.6,
   1.7, 1.7, // 8
   1.9, 1.9, // 9
-  1.8, 1.8, // 10
+  1.0, 1.0, // 10
   1.0, 1.0, // 11
 };
 
@@ -158,43 +158,47 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataQuad4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_orientation[] = {
   0.0,  1.0,  +1.0, 0.0,
   0.0,  1.0,  +1.0, 0.0
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_area[] = {
   1.0, 1.0,
 };
 
 
-const double pylith::faults::CohesiveKinDataQuad4::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_residual[] = {
   0.0,  0.0,
   0.0,  0.0,
-  9.8,  8.8, // 4
-  9.0,  8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
   0.0,  0.0,
   0.0,  0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254, -0.4+0.14794836271, // 10
- -0.5+1.89546413727, -0.5+0.08241148423, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+  -(8.7-8.3) + 0.14794836271,
+  -(9.7-9.3) + 1.77538035254, // 10
+  -(8.9-8.4) + 0.08241148423,
+  -(9.9-9.4) + 1.89546413727, // 11
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_residualIncr[] = {
   0.0,  0.0,
   0.0,  0.0,
-  9.8,  8.8, // 4
-  9.0,  8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
   0.0,  0.0,
   0.0,  0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254, -0.4+0.14794836271, // 10
- -0.5+1.89546413727, -0.5+0.08241148423, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+  -(8.7-8.3) + 0.14794836271,
+  -(9.7-9.3) + 1.77538035254, // 10
+  -(8.9-8.4) + 0.08241148423,
+  -(9.9-9.4) + 1.89546413727, // 11
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_jacobian[] = {
   0.0, 0.0, // 2x
   0.0, 0.0,
   0.0, 0.0,
@@ -243,7 +247,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 10
+ -1.0, 0.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 4y
   0.0, 0.0,
@@ -253,7 +257,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  10
+  0.0,-1.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 5x
   0.0, 0.0,
@@ -264,7 +268,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  11
+ -1.0, 0.0, // 11
   0.0, 0.0, // 5y
   0.0, 0.0,
   0.0, 0.0,
@@ -274,7 +278,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  11
+  0.0,-1.0, // 11
   0.0, 0.0, // 6x
   0.0, 0.0,
   0.0, 0.0,
@@ -323,7 +327,7 @@
   0.0, 0.0, 
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  10
+ +1.0, 0.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 8y
   0.0, 0.0,
@@ -333,7 +337,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 10
+  0.0,+1.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 9x
   0.0, 0.0,
@@ -344,7 +348,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 11
+ +1.0, 0.0, // 11
   0.0, 0.0, // 9y
   0.0, 0.0,
   0.0, 0.0,
@@ -354,60 +358,60 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 11
+  0.0,+1.0, // 11
   0.0, 0.0, // 10x
   0.0, 0.0,
-  0.0,-1.0, //  4
+ -1.0, 0.0, // 4
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  8
+ +1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 10y
   0.0, 0.0,
- -1.0, 0.0, //  4
+  0.0,-1.0, // 4
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  8
+  0.0,+1.0, // 8
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 11x
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  5
+ -1.0, 0.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  9
+ +1.0, 0.0, // 9
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 11y
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  5
+  0.0,-1.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 9
+  0.0,+1.0, // 9
   0.0, 0.0,
   0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4::_fieldIncrAdjusted[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4::_fieldIncrAdjusted[] = {
   3.1, 4.1,
   3.2, 4.2,
-  -4.09563227733, -3.248612969, // 4
-  -2.78814167707, -2.11773476302, // 5
+  3.6694959278, 3.74728446689, // 4
+  3.92830853938, 3.88442973915, // 5
   3.5, 4.5,
   3.6, 4.6,
-  9.35548350619, 10.472468741, // 8
-  8.459683341, 9.70254140433, // 9
-  -9.8131968597, -9.61432196053, // 10
-  -9.12482866822, -8.66339834789, // 11
+  3.41744429051, 5.12266481943, // 8
+  3.51072002361, 5.27989387642, // 9
+  0.480344706137, -0.718530193038, // 10
+  0.739631955136, -0.721798365193, // 11
 };
 
 pylith::faults::CohesiveKinDataQuad4::CohesiveKinDataQuad4(void)
@@ -417,25 +421,25 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldIncr = const_cast<double*>(_fieldIncr);
-  jacobianLumped = const_cast<double*>(_jacobianLumped);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
-  fieldIncrAdjusted = const_cast<double*>(_fieldIncrAdjusted);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  fieldIncrAdjusted = const_cast<PylithScalar*>(_fieldIncrAdjusted);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,16 +63,16 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Field over domain at time t.
-  static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
-  static const double _jacobianLumped[]; ///< Lumped Jacobian.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
-  static const double _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -77,27 +77,27 @@
 
 const int pylith::faults::CohesiveKinDataQuad4e::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinDataQuad4e::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataQuad4e::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinDataQuad4e::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_quadWts[] = {
+  1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -114,7 +114,7 @@
 const char* pylith::faults::CohesiveKinDataQuad4e::_riseTimeFilename = 
   "data/quad4e_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataQuad4e::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_fieldT[] = {
   3.1, 5.1,
   3.2, 5.2,
   3.3, 5.3, // 6
@@ -134,13 +134,52 @@
 
 
 
-const double pylith::faults::CohesiveKinDataQuad4e::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_fieldIncr[] = {
+  6.1, 4.1,
+  6.2, 4.2,
+  6.3, 4.3, // 6
+  6.4, 4.4, // 7
+  6.5, 4.5,
+  6.6, 4.6,
+  6.7, 4.7,
+  6.8, 4.8, // 11
+  6.9, 4.9,
+  6.0, 4.0, // 13
+  5.2, 3.2, // 14
+  5.4, 3.4, // 15
+  5.1, 3.1, // 16
+  5.3, 3.3, // 17
+  5.5, 3.5, // 18
+};
+
+
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_jacobianLumped[] = {
+  1.1, 7.1,
+  1.2, 7.2,
+  1.3, 7.3, // 6
+  1.4, 7.4, // 7
+  1.5, 7.5,
+  1.6, 7.6,
+  1.7, 7.7,
+  1.8, 7.8, // 11
+  1.9, 7.9,
+  1.0, 7.0, // 13
+  2.2, 3.2, // 14
+  2.4, 3.4, // 15
+  1.0, 1.0, // 16
+  1.0, 1.0, // 17
+  1.0, 1.0, // 18
+};
+
+
+
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_orientation[] = {
   0.0, -1.0,  -1.0, 0.0,
   0.0, -1.0,  -1.0, 0.0,
   0.0, -1.0,  -1.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_area[] = {
   1.0,
   2.0,
   1.0,
@@ -169,43 +208,49 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataQuad4e::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_residual[] = {
   0.0,  0.0,
   0.0,  0.0,
- -6.1, -4.1, // 6
- -6.3, -4.3, // 7
+ +1.0*4.1, +1.0*6.1, // 6
+ +2.0*4.3, +2.0*6.3, // 7
   0.0,  0.0,
   0.0,  0.0,
   0.0,  0.0,
- -6.5, -4.5, // 11
+ +1.0*4.5, +1.0*6.5, // 11
   0.0,  0.0,
- +6.1, +4.1, // 13
- +6.3, +4.3, // 15
- +6.5, +4.5, // 17
- -0.3+1.77538035254, -0.3+0.14794836271, // 16
-  0.8+1.89546413727,  0.8+0.08241148423, // 17
-  0.6+1.59887481971,  0.6+0.19186497837, // 18
+ -1.0*4.1, -1.0*6.1, // 13
+ -2.0*4.3, -2.0*6.3, // 14
+ -1.0*4.5, -1.0*6.5, // 15
+ -1.0*(3.0-3.3 + 0.14794836271),
+ -1.0*(5.0-5.3 + 1.77538035254), // 16
+ -2.0*(4.2-3.4 + 0.08241148423),
+ -2.0*(6.2-5.4 + 1.89546413727), // 17
+ -1.0*(4.4-3.8 + 0.19186497837),
+ -1.0*(6.4-5.8 + 1.59887481971), // 18
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_residualIncr[] = {
   0.0,  0.0,
   0.0,  0.0,
- -6.1, -4.1, // 6
- -6.3, -4.3, // 7
+ +1.0*4.1, +1.0*6.1, // 6
+ +2.0*4.3, +2.0*6.3, // 7
   0.0,  0.0,
   0.0,  0.0,
   0.0,  0.0,
- -6.5, -4.5, // 11
+ +1.0*4.5, +1.0*6.5, // 11
   0.0,  0.0,
- +6.1, +4.1, // 13
- +6.3, +4.3, // 15
- +6.5, +4.5, // 17
- -0.3+1.77538035254, -0.3+0.14794836271, // 16
-  0.8+1.89546413727,  0.8+0.08241148423, // 17
-  0.6+1.59887481971,  0.6+0.19186497837, // 18
+ -1.0*4.1, -1.0*6.1, // 13
+ -2.0*4.3, -2.0*6.3, // 14
+ -1.0*4.5, -1.0*6.5, // 15
+ -1.0*(3.0-3.3 + 0.14794836271),
+ -1.0*(5.0-5.3 + 1.77538035254), // 16
+ -2.0*(4.2-3.4 + 0.08241148423),
+ -2.0*(6.2-5.4 + 1.89546413727), // 17
+ -1.0*(4.4-3.8 + 0.19186497837),
+ -1.0*(6.4-5.8 + 1.59887481971), // 18
 };
 
-const double pylith::faults::CohesiveKinDataQuad4e::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataQuad4e::_jacobian[] = {
   0.0, 0.0, // 4x
   0.0, 0.0,
   0.0, 0.0,
@@ -278,7 +323,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 16
+ -1.0, 0.0, // 16
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 6y
@@ -293,7 +338,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 16
+  0.0,-1.0, // 16
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 7x
@@ -309,7 +354,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 17
+ -2.0, 0.0, // 17
   0.0, 0.0,
   0.0, 0.0, // 7y
   0.0, 0.0,
@@ -324,7 +369,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 17
+  0.0,-2.0, // 17
   0.0, 0.0,
   0.0, 0.0, // 8x
   0.0, 0.0,
@@ -430,7 +475,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 18
+ -1.0, 0.0, // 18
   0.0, 0.0, // 11y
   0.0, 0.0,
   0.0, 0.0,
@@ -445,7 +490,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 18
+  0.0,-1.0, // 18
   0.0, 0.0, // 12x
   0.0, 0.0,
   0.0, 0.0,
@@ -488,7 +533,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 16
+ +1.0, 0.0, // 16
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 13y
@@ -503,7 +548,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 16
+  0.0,+1.0, // 16
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 14x
@@ -519,7 +564,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 17
+ +2.0, 0.0, // 17
   0.0, 0.0,
   0.0, 0.0, // 14y
   0.0, 0.0,
@@ -534,7 +579,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 17
+  0.0,+2.0, // 17
   0.0, 0.0,
   0.0, 0.0, // 15x
   0.0, 0.0,
@@ -550,7 +595,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 18
+ +1.0, 0.0, // 18
   0.0, 0.0, // 15y
   0.0, 0.0,
   0.0, 0.0,
@@ -565,17 +610,17 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 18
+  0.0,+1.0, // 18
   0.0, 0.0, // 16x
   0.0, 0.0,
-  0.0,+1.0, // 6
+ -1.0, 0.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 13
+ +1.0, 0.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -583,14 +628,14 @@
   0.0, 0.0,
   0.0, 0.0, // 16y
   0.0, 0.0,
- +1.0, 0.0, // 6
+  0.0,-1.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 13
+  0.0,+1.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -599,14 +644,14 @@
   0.0, 0.0, // 17x
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 7
+ -2.0, 0.0, // 7
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 14
+ +2.0, 0.0, // 14
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -614,14 +659,14 @@
   0.0, 0.0, // 17y
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 7
+  0.0,-2.0, // 7
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 14
+  0.0,+2.0, // 14
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -633,11 +678,11 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 11
+ -1.0, 0.0, // 11
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 15
+ +1.0, 0.0, // 15
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -648,11 +693,11 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 11
+  0.0,-1.0, // 11
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 15
+  0.0,+1.0, // 15
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -665,22 +710,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,27 +44,37 @@
 
 const int pylith::faults::CohesiveKinDataTet4::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 3;
 
-const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
-  -3.33333333e-01,  -3.33333333e-01,
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
+  2.0/3.0, 2.0/3.0, 2.0/3.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
-  3.33333333e-01,  3.33333333e-01,
-  3.33333333e-01,};
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_basis[] = {
+  1.0, 0.0, 0.0,
+  0.0, 1.0, 0.0,
+  0.0, 0.0, 1.0,
+};
 
-const double pylith::faults::CohesiveKinDataTet4::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_basisDeriv[] = {
  -0.50000000e+00, -0.50000000e+00,
   0.50000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -83,7 +93,7 @@
 const char* pylith::faults::CohesiveKinDataTet4::_riseTimeFilename = 
   "data/tet4_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTet4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_fieldT[] = {
   7.1, 8.1, 9.1,
   7.2, 8.2, 9.2, // 3
   7.3, 8.3, 9.3, // 4
@@ -97,7 +107,7 @@
   7.1, 8.1, 9.1, // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_fieldIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_fieldIncr[] = {
   3.1, 4.1, 5.1,
   3.2, 4.2, 5.2, // 3
   3.3, 4.3, 5.3, // 4
@@ -111,7 +121,7 @@
   3.1, 4.1, 5.1, // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_jacobianLumped[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_jacobianLumped[] = {
   1.1, 1.1, 1.1,
   1.2, 1.2, 1.2, // 3
   1.3, 1.3, 1.3, // 4
@@ -120,9 +130,9 @@
   1.6, 1.6, 1.6, // 7
   1.8, 1.8, 1.8, // 8
   1.0, 1.0, 1.0, // 9
-  1.7, 1.7, 1.7, // 10
-  1.9, 1.9, 1.9, // 11
-  1.1, 1.1, 1.1, // 12
+  1.0, 1.0, 1.0, // 10
+  1.0, 1.0, 1.0, // 11
+  1.0, 1.0, 1.0, // 12
 };
 
 const int pylith::faults::CohesiveKinDataTet4::_numFaultVertices = 3;
@@ -149,47 +159,59 @@
 
 
 
-const double pylith::faults::CohesiveKinDataTet4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_orientation[] = {
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_area[] = {
   1.0/3.0, 
   1.0/3.0, 
   1.0/3.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_residual[] = {
   0.0,  0.0,  0.0,
-  9.7,  7.7,  8.7, // 3
-  9.9,  7.9,  8.9, // 4
-  9.1,  7.1,  8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523, -0.4+-0.55566483464, -0.4+0.07938069066, // 10
- -0.5+1.69682900001, -0.5+-0.56560966667, -0.5+0.14140241667, // 11
-  0.4+1.51709826228,  0.4+-0.54615537442,  0.4+0.18205179147, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 + -0.07938069066),
+  -1.0/3.0*(8.6-8.2 + -1.82575588523),
+  -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+  -1.0/3.0*(7.8-7.3 + -0.14140241667),
+  -1.0/3.0*(8.8-8.3 + -1.69682900001),
+  -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+  -1.0/3.0*(7.0-7.4 + -0.18205179147),
+  -1.0/3.0*(8.0-8.4 + -1.51709826228),
+  -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_residualIncr[] = {
   0.0,  0.0,  0.0,
-  9.7,  7.7,  8.7, // 3
-  9.9,  7.9,  8.9, // 4
-  9.1,  7.1,  8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523, -0.4+-0.55566483464, -0.4+0.07938069066, // 10
- -0.5+1.69682900001, -0.5+-0.56560966667, -0.5+0.14140241667, // 11
-  0.4+1.51709826228,  0.4+-0.54615537442,  0.4+0.18205179147, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 + -0.07938069066),
+  -1.0/3.0*(8.6-8.2 + -1.82575588523),
+  -1.0/3.0*(9.6-9.2 + 0.55566483464), // 10
+  -1.0/3.0*(7.8-7.3 + -0.14140241667),
+  -1.0/3.0*(8.8-8.3 + -1.69682900001),
+  -1.0/3.0*(9.8-9.3 + 0.56560966667), // 11
+  -1.0/3.0*(7.0-7.4 + -0.18205179147),
+  -1.0/3.0*(8.0-8.4 + -1.51709826228),
+  -1.0/3.0*(9.0-9.4 + 0.54615537442), // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_jacobian[] = {
   0.0, 0.0, 0.0, // 2x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -231,7 +253,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3y
@@ -242,7 +264,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+  0.0,-1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3z
@@ -253,7 +275,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 10
+  0.0, 0.0,-1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4x
@@ -265,7 +287,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4y
   0.0, 0.0, 0.0,
@@ -276,7 +298,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+  0.0,-1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4z
   0.0, 0.0, 0.0,
@@ -287,7 +309,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 11
+  0.0, 0.0,-1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 5x
   0.0, 0.0, 0.0,
@@ -299,7 +321,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -310,7 +332,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+  0.0,-1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -321,7 +343,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 12
+  0.0, 0.0,-1.0/3.0, // 12
   0.0, 0.0, 0.0, // 6x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -363,7 +385,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
@@ -374,7 +396,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+  0.0,+1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
@@ -385,7 +407,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 10
+  0.0, 0.0,+1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -397,7 +419,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
@@ -408,7 +430,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+  0.0,+1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
@@ -419,7 +441,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 11
+  0.0, 0.0,+1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -431,7 +453,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -442,7 +464,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+  0.0,+1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -453,35 +475,35 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 12
+  0.0, 0.0,+1.0/3.0, // 12
   0.0, 0.0, 0.0, // 10x
-  0.0,-1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10y
-  0.0, 0.0,-1.0, // 3
+  0.0,-1.0/3.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 7
+  0.0,+1.0/3.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10z
- -1.0, 0.0, 0.0, // 3
+  0.0, 0.0,-1.0/3.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+  0.0, 0.0,+1.0/3.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -489,33 +511,33 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11x
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 4
+  0.0,-1.0/3.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 8
+  0.0,+1.0/3.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11z
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 4
+  0.0, 0.0,-1.0/3.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+  0.0, 0.0,+1.0/3.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -523,50 +545,50 @@
   0.0, 0.0, 0.0, // 12x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 5
+  0.0,-1.0/3.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 9
+  0.0,+1.0/3.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 5
+  0.0, 0.0,-1.0/3.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+  0.0, 0.0,+1.0/3.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4::_fieldIncrAdjusted[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4::_fieldIncrAdjusted[] = {
   3.1, 4.1, 5.1,
-  -4.70012229942, -3.03138431537, -1.50390580878, // 3
-  -4.10716666377, -2.47185604467, -0.927412749378, // 4
-  -3.34252157978, -1.47021951405, -0.324816213039, // 5
+  3.61178246248, 3.61385377987, 5.97466561979, // 3
+  3.79854053226, 3.8953896129, 6.20906367742, // 4
+  2.99081175355, 3.43454239072, 5.29423140601, // 5
   3.5, 4.5, 5.5,
-  9.52509172457, 10.0235382365, 10.6279293566, // 7
-  9.14962036828, 9.69078492115, 10.2975758746, // 8
-  12.4395302117, 12.2183073197, 13.0147426983, // 9
-  -8.67766117844, -8.04468697053, -9.48014675931, // 10
-  -8.80341285807, -8.09563657419, -9.62931666291, // 11
-  -8.21830731966, -8.01474269826, -9.43953021169, // 12
+  3.29116315314, 5.0396096651, 5.01900078515, // 7
+  3.43994294893, 5.09221861291, 5.14345401075, // 8
+  3.57286354502, 5.351640653, 5.14807603159, // 9
+  1.48241686493, -2.11012639247, 2.78879623126, // 10
+  1.9443080758, -1.5779805097, 3.54534834194, // 11
+  -1.71859063507, -4.05492195899, -0.444228094765, // 12
 };
 
 pylith::faults::CohesiveKinDataTet4::CohesiveKinDataTet4(void)
@@ -576,25 +598,25 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldIncr = const_cast<double*>(_fieldIncr);
-  jacobianLumped = const_cast<double*>(_jacobianLumped);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
-  fieldIncrAdjusted = const_cast<double*>(_fieldIncrAdjusted);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  fieldIncrAdjusted = const_cast<PylithScalar*>(_fieldIncrAdjusted);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,16 +63,16 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Field over domain at time t.
-  static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
-  static const double _jacobianLumped[]; ///< Lumped Jacobian.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
-  static const double _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,27 +44,37 @@
 
 const int pylith::faults::CohesiveKinDataTet4e::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 3;
 
-const double pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
-  -3.33333333e-01,  -3.33333333e-01,
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
+  2.0/3.0, 2.0/3.0, 2.0/3.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_basis[] = {
-  3.33333333e-01,  3.33333333e-01,
-  3.33333333e-01,};
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_basis[] = {
+  1.0, 0.0, 0.0,
+  0.0, 1.0, 0.0,
+  0.0, 0.0, 1.0,
+};
 
-const double pylith::faults::CohesiveKinDataTet4e::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_basisDeriv[] = {
  -0.50000000e+00, -0.50000000e+00,
   0.50000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -83,7 +93,7 @@
 const char* pylith::faults::CohesiveKinDataTet4e::_riseTimeFilename = 
   "data/tet4e_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTet4e::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_fieldT[] = {
   3.1, 5.1, 7.1,
   3.2, 5.2, 7.2, // 5
   3.3, 5.3, 7.3, // 6
@@ -100,15 +110,49 @@
   4.4, 6.4, 8.4, // 17
 };
 
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_fieldIncr[] = {
+  6.1, 7.1, 2.1,
+  6.2, 7.2, 2.2, // 5
+  6.3, 7.3, 2.3, // 6
+  6.4, 7.4, 2.4, // 7
+  6.5, 7.5, 2.5, // 8
+  6.6, 7.6, 2.6,
+  6.7, 7.7, 2.7, // 10
+  6.9, 7.9, 2.9, // 11
+  5.1, 8.1, 1.1, // 12
+  5.3, 8.3, 1.3, // 13
+  4.8, 8.8, 2.8, // 14
+  4.0, 8.0, 2.0, // 15
+  5.2, 8.2, 1.2, // 16
+  5.4, 8.4, 1.4, // 17
+};
 
-const double pylith::faults::CohesiveKinDataTet4e::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_jacobianLumped[] = {
+  4.1, 6.1, 8.1,
+  4.2, 6.2, 8.2, // 5
+  4.3, 6.3, 8.3, // 6
+  4.4, 6.4, 8.4, // 7
+  4.5, 6.5, 8.5, // 8
+  4.6, 6.6, 8.6,
+  4.7, 6.7, 8.7, // 10
+  4.9, 6.9, 8.9, // 11
+  3.1, 5.1, 7.1, // 12
+  3.3, 5.3, 7.3, // 13
+  1.0, 1.0, 1.0, // 14
+  1.0, 1.0, 1.0, // 15
+  1.0, 1.0, 1.0, // 16
+  1.0, 1.0, 1.0, // 17
+};
+
+
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_orientation[] = {
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_area[] = {
   2.0/3.0,
   1.0/3.0,
   2.0/3.0,
@@ -139,41 +183,65 @@
 
 
 
-const double pylith::faults::CohesiveKinDataTet4e::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_residual[] = {
   0.0,  0.0,  0.0,
-  7.8,  3.8,  5.8, // 5
-  7.0,  3.0,  5.0, // 6
-  8.2,  4.2,  6.2, // 7
-  8.4,  4.4,  6.4, // 8
+  +2.0/3.0*3.8, +2.0/3.0*5.8, +2.0/3.0*7.8, // 5
+  +1.0/3.0*3.0, +1.0/3.0*5.0, +1.0/3.0*7.0, // 6
+  +2.0/3.0*4.2, +2.0/3.0*6.2, +2.0/3.0*8.2, // 7
+  +1.0/3.0*4.4, +1.0/3.0*6.4, +1.0/3.0*8.4, // 8
   0.0,  0.0,  0.0,
- -7.8, -3.8, -5.8, // 10
- -7.0, -3.0, -5.0, // 11
- -8.2, -4.2, -6.2, // 12
- -8.4, -4.4, -6.4, // 13
- -0.5+1.82575588523, -0.5+-0.55566483464, -0.5+0.07938069066, // 14
- -0.6+1.69682900001, -0.6+-0.56560966667, -0.6+0.14140241667, // 15
- -0.7+1.51709826228, -0.7-0.54615537442, -0.7+0.18205179147, // 16
- -0.8+1.29378670385, -0.8-0.49761027071, -0.8+0.19904410828, // 17
+  -2.0/3.0*3.8, -2.0/3.0*5.8, -2.0/3.0*7.8, // 10
+  -1.0/3.0*3.0, -1.0/3.0*5.0, -1.0/3.0*7.0, // 11
+  -2.0/3.0*4.2, -2.0/3.0*6.2, -2.0/3.0*8.2, // 12
+  -1.0/3.0*4.4, -1.0/3.0*6.4, -1.0/3.0*8.4, // 13
+
+  -2.0/3.0*(3.7-3.2 + -0.07938069066),
+  -2.0/3.0*(5.7-5.2 + -1.82575588523),
+  -2.0/3.0*(7.7-7.2 + 0.55566483464), // 14
+
+  -1.0/3.0*(3.9-3.3 + -0.14140241667),
+  -1.0/3.0*(5.9-5.3 + -1.69682900001),
+  -1.0/3.0*(7.9-7.3 + 0.56560966667), // 15
+
+  -2.0/3.0*(4.1-3.4 + -0.18205179147),
+  -2.0/3.0*(6.1-5.4 + -1.51709826228),
+  -2.0/3.0*(8.1-7.4 + 0.54615537442), // 16
+
+  -1.0/3.0*(4.3-3.5 + -0.19904410828),
+  -1.0/3.0*(6.3-5.5 + -1.29378670385),
+  -1.0/3.0*(8.3-7.5 + 0.49761027071), // 17
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_residualIncr[] = {
   0.0,  0.0,  0.0,
-  7.8,  3.8,  5.8, // 5
-  7.0,  3.0,  5.0, // 6
-  8.2,  4.2,  6.2, // 7
-  8.4,  4.4,  6.4, // 8
+  +2.0/3.0*3.8, +2.0/3.0*5.8, +2.0/3.0*7.8, // 5
+  +1.0/3.0*3.0, +1.0/3.0*5.0, +1.0/3.0*7.0, // 6
+  +2.0/3.0*4.2, +2.0/3.0*6.2, +2.0/3.0*8.2, // 7
+  +1.0/3.0*4.4, +1.0/3.0*6.4, +1.0/3.0*8.4, // 8
   0.0,  0.0,  0.0,
- -7.8, -3.8, -5.8, // 10
- -7.0, -3.0, -5.0, // 11
- -8.2, -4.2, -6.2, // 12
- -8.4, -4.4, -6.4, // 13
- -0.5+1.82575588523, -0.5+-0.55566483464, -0.5+0.07938069066, // 14
- -0.6+1.69682900001, -0.6+-0.56560966667, -0.6+0.14140241667, // 15
- -0.7+1.51709826228, -0.7-0.54615537442, -0.7+0.18205179147, // 16
- -0.8+1.29378670385, -0.8-0.49761027071, -0.8+0.19904410828, // 17
+  -2.0/3.0*3.8, -2.0/3.0*5.8, -2.0/3.0*7.8, // 10
+  -1.0/3.0*3.0, -1.0/3.0*5.0, -1.0/3.0*7.0, // 11
+  -2.0/3.0*4.2, -2.0/3.0*6.2, -2.0/3.0*8.2, // 12
+  -1.0/3.0*4.4, -1.0/3.0*6.4, -1.0/3.0*8.4, // 13
+
+  -2.0/3.0*(3.7-3.2 + -0.07938069066),
+  -2.0/3.0*(5.7-5.2 + -1.82575588523),
+  -2.0/3.0*(7.7-7.2 + 0.55566483464), // 14
+
+  -1.0/3.0*(3.9-3.3 + -0.14140241667),
+  -1.0/3.0*(5.9-5.3 + -1.69682900001),
+  -1.0/3.0*(7.9-7.3 + 0.56560966667), // 15
+
+  -2.0/3.0*(4.1-3.4 + -0.18205179147),
+  -2.0/3.0*(6.1-5.4 + -1.51709826228),
+  -2.0/3.0*(8.1-7.4 + 0.54615537442), // 16
+
+  -1.0/3.0*(4.3-3.5 + -0.19904410828),
+  -1.0/3.0*(6.3-5.5 + -1.29378670385),
+  -1.0/3.0*(8.3-7.5 + 0.49761027071), // 17
 };
 
-const double pylith::faults::CohesiveKinDataTet4e::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4e::_jacobian[] = {
   0.0, 0.0, 0.0, // 4x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -226,7 +294,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 14
+ -2.0/3.0, 0.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -240,7 +308,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+  0.0,-2.0/3.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -254,7 +322,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 14
+  0.0, 0.0,-2.0/3.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -269,7 +337,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 15
+ -1.0/3.0, 0.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 6y
@@ -283,7 +351,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+  0.0,-1.0/3.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 6z
@@ -297,7 +365,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 15
+  0.0, 0.0,-1.0/3.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7x
@@ -312,7 +380,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 16
+ -2.0/3.0, 0.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
   0.0, 0.0, 0.0,
@@ -326,7 +394,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+  0.0,-2.0/3.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
   0.0, 0.0, 0.0,
@@ -340,7 +408,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 16
+  0.0, 0.0,-2.0/3.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
   0.0, 0.0, 0.0,
@@ -355,7 +423,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 17
+ -1.0/3.0, 0.0, 0.0, // 17
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -369,7 +437,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+  0.0,-1.0/3.0, 0.0, // 17
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -383,7 +451,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 17
+  0.0, 0.0,-1.0/3.0, // 17
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -436,7 +504,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 14
+ +2.0/3.0, 0.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -450,7 +518,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 14
+  0.0,+2.0/3.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -464,7 +532,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 14
+  0.0, 0.0,+2.0/3.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -479,7 +547,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 15
+ +1.0/3.0, 0.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
@@ -493,7 +561,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 15
+  0.0,+1.0/3.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11z
@@ -507,7 +575,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 15
+  0.0, 0.0,+1.0/3.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12x
@@ -522,7 +590,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 16
+ +2.0/3.0, 0.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12y
   0.0, 0.0, 0.0,
@@ -536,7 +604,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 16
+  0.0,+2.0/3.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12z
   0.0, 0.0, 0.0,
@@ -550,7 +618,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 16
+  0.0, 0.0,+2.0/3.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 13x
   0.0, 0.0, 0.0,
@@ -565,7 +633,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 17
+ +1.0/3.0, 0.0, 0.0, // 17
   0.0, 0.0, 0.0, // 13y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -579,7 +647,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 17
+  0.0,+1.0/3.0, 0.0, // 17
   0.0, 0.0, 0.0, // 13z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -593,14 +661,14 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 17
+  0.0, 0.0,+1.0/3.0, // 17
   0.0, 0.0, 0.0, // 14x
-  0.0,-1.0, 0.0, // 5
+ -2.0/3.0, 0.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 10
+ +2.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -609,12 +677,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 14y
-  0.0, 0.0,-1.0, // 5
+  0.0,-2.0/3.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 10
+  0.0,+2.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -623,12 +691,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 14z
- -1.0, 0.0, 0.0, // 5
+  0.0, 0.0,-2.0/3.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+  0.0, 0.0,+2.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -638,12 +706,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15x
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 6
+ -1.0/3.0, 0.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -652,12 +720,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15y
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 6
+  0.0,-1.0/3.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 11
+  0.0,+1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -666,12 +734,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15z
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 6
+  0.0, 0.0,-1.0/3.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+  0.0, 0.0,+1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -681,12 +749,12 @@
   0.0, 0.0, 0.0, // 16x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 7
+ -2.0/3.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 12
+ +2.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -695,12 +763,12 @@
   0.0, 0.0, 0.0, // 16y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 7
+  0.0,-2.0/3.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 12
+  0.0,+2.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -709,27 +777,27 @@
   0.0, 0.0, 0.0, // 16z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 7
+  0.0, 0.0,-2.0/3.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+  0.0, 0.0,+2.0/3.0, // 12
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0, 0.0, // 17x
+  0.0, 0.0, 0.0,// 17x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 8
+ -1.0/3.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 13
+ +1.0/3.0, 0.0, 0.0, // 13
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -738,12 +806,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 8
+  0.0,-1.0/3.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 13
+  0.0,+1.0/3.0, 0.0, // 13
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -752,12 +820,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 8
+  0.0, 0.0,-1.0/3.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 13
+  0.0, 0.0,+1.0/3.0, // 13
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -771,22 +839,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,27 +44,37 @@
 
 const int pylith::faults::CohesiveKinDataTet4f::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 3;
 
-const double pylith::faults::CohesiveKinDataTet4f::_quadPts[] = {
-  -3.33333333e-01,  -3.33333333e-01,
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_quadPts[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_quadWts[] = {
+  2.0/3.0, 2.0/3.0, 2.0/3.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_basis[] = {
-  3.33333333e-01,  3.33333333e-01,
-  3.33333333e-01,};
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_basis[] = {
+  1.0, 0.0, 0.0,
+  0.0, 1.0, 0.0,
+  0.0, 0.0, 1.0,
+};
 
-const double pylith::faults::CohesiveKinDataTet4f::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_basisDeriv[] = {
  -0.50000000e+00, -0.50000000e+00,
   0.50000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -83,7 +93,7 @@
 const char* pylith::faults::CohesiveKinDataTet4f::_riseTimeFilename = 
   "data/tet4_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTet4f::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_fieldT[] = {
   7.1, 8.1, 9.1,
   7.2, 8.2, 9.2, // 3
   7.3, 8.3, 9.3, // 4
@@ -98,13 +108,41 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataTet4f::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_fieldIncr[] = {
+  3.1, 4.1, 5.1,
+  3.2, 4.2, 5.2, // 3
+  3.3, 4.3, 5.3, // 4
+  3.4, 4.4, 5.4, // 5
+  3.5, 4.5, 5.5,
+  3.6, 4.6, 5.6, // 7
+  3.8, 4.8, 5.8, // 8
+  3.0, 4.0, 5.0, // 9
+  3.7, 4.7, 5.7, // 10
+  3.9, 4.9, 5.9, // 11
+  3.1, 4.1, 5.1, // 12
+};
+
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_jacobianLumped[] = {
+  1.1, 1.1, 1.1,
+  1.2, 1.2, 1.2, // 3
+  1.3, 1.3, 1.3, // 4
+  1.4, 1.4, 1.4, // 5
+  1.5, 1.5, 1.5,
+  1.6, 1.6, 1.6, // 7
+  1.8, 1.8, 1.8, // 8
+  1.0, 1.0, 1.0, // 9
+  1.0, 1.0, 1.0, // 10
+  1.0, 1.0, 1.0, // 11
+  1.0, 1.0, 1.0, // 12
+};
+
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_orientation[] = {
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_area[] = {
   1.0/3.0,
   1.0/3.0,
   1.0/3.0,
@@ -133,35 +171,47 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataTet4f::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_residual[] = {
   0.0,  0.0,  0.0,
- -9.7, -7.7, +8.7, // 3
- -9.9, -7.9, +8.9, // 4
- -9.1, -7.1, +8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- +9.7, +7.7, -8.7, // 7
- +9.9, +7.9, -8.9, // 8
- +9.1, +7.1, -8.1, // 9
-  0.4+1.82575588523,  -0.4+-0.55566483464,  0.4+0.07938069066, // 10
-  0.5+1.69682900001,  -0.5+-0.56560966667,  0.5+0.14140241667, // 11
- -0.4+1.51709826228,  +0.4+-0.54615537442, -0.4+0.18205179147, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 +  0.07938069066),
+  -1.0/3.0*(8.6-8.2 +  1.82575588523),
+  -1.0/3.0*(9.6-9.2 +  0.55566483464), // 10
+  -1.0/3.0*(7.8-7.3 +  0.14140241667),
+  -1.0/3.0*(8.8-8.3 +  1.69682900001),
+  -1.0/3.0*(9.8-9.3 +  0.56560966667), // 11
+  -1.0/3.0*(7.0-7.4 +  0.18205179147),
+  -1.0/3.0*(8.0-8.4 +  1.51709826228),
+  -1.0/3.0*(9.0-9.4 +  0.54615537442), // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_residualIncr[] = {
   0.0,  0.0,  0.0,
- -9.7, -7.7, +8.7, // 3
- -9.9, -7.9, +8.9, // 4
- -9.1, -7.1, +8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- +9.7, +7.7, -8.7, // 7
- +9.9, +7.9, -8.9, // 8
- +9.1, +7.1, -8.1, // 9
-  0.4+1.82575588523, -0.4+-0.55566483464,  0.4+0.07938069066, // 10
-  0.5+1.69682900001, -0.5+-0.56560966667,  0.5+0.14140241667, // 11
- -0.4+1.51709826228, +0.4+-0.54615537442, -0.4+0.18205179147, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 +  0.07938069066),
+  -1.0/3.0*(8.6-8.2 +  1.82575588523),
+  -1.0/3.0*(9.6-9.2 +  0.55566483464), // 10
+  -1.0/3.0*(7.8-7.3 +  0.14140241667),
+  -1.0/3.0*(8.8-8.3 +  1.69682900001),
+  -1.0/3.0*(9.8-9.3 +  0.56560966667), // 11
+  -1.0/3.0*(7.0-7.4 +  0.18205179147),
+  -1.0/3.0*(8.0-8.4 +  1.51709826228),
+  -1.0/3.0*(9.0-9.4 +  0.54615537442), // 12
 };
 
-const double pylith::faults::CohesiveKinDataTet4f::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTet4f::_jacobian[] = {
   0.0, 0.0, 0.0, // 2x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -203,7 +253,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3y
@@ -214,7 +264,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+  0.0,-1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3z
@@ -225,7 +275,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 10
+  0.0, 0.0,-1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4x
@@ -237,7 +287,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4y
   0.0, 0.0, 0.0,
@@ -248,7 +298,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+  0.0,-1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4z
   0.0, 0.0, 0.0,
@@ -259,7 +309,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 11
+  0.0, 0.0,-1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 5x
   0.0, 0.0, 0.0,
@@ -271,7 +321,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -282,7 +332,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+  0.0,-1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -293,7 +343,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 12
+  0.0, 0.0,-1.0/3.0, // 12
   0.0, 0.0, 0.0, // 6x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -335,7 +385,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
@@ -346,7 +396,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+  0.0,+1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
@@ -357,7 +407,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 10
+  0.0, 0.0,+1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -369,7 +419,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
@@ -380,7 +430,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+  0.0,+1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
@@ -391,7 +441,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 11
+  0.0, 0.0,+1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -403,7 +453,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -414,7 +464,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+  0.0,+1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -425,35 +475,35 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 12
+  0.0, 0.0,+1.0/3.0, // 12
   0.0, 0.0, 0.0, // 10x
-  0.0,+1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10y
-  0.0, 0.0,-1.0, // 3
+  0.0,-1.0/3.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 7
+  0.0,+1.0/3.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10z
- +1.0, 0.0, 0.0, // 3
+  0.0, 0.0,-1.0/3.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 7
+  0.0, 0.0,+1.0/3.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -461,33 +511,33 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11x
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 4
+  0.0,-1.0/3.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 8
+  0.0,+1.0/3.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11z
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 4
+  0.0, 0.0,-1.0/3.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 8
+  0.0, 0.0,+1.0/3.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -495,33 +545,33 @@
   0.0, 0.0, 0.0, // 12x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 5
+  0.0,-1.0/3.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 9
+  0.0,+1.0/3.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 5
+  0.0, 0.0,-1.0/3.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 9
+  0.0, 0.0,+1.0/3.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -534,22 +584,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,27 +61,27 @@
 
 const int pylith::faults::CohesiveKinDataTri3::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTri3::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinDataTri3::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -98,7 +98,7 @@
 const char* pylith::faults::CohesiveKinDataTri3::_riseTimeFilename = 
   "data/tri3_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTri3::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2, // 3
   8.3, 9.3, // 4
@@ -109,7 +109,7 @@
   8.8, 9.8, // 9
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_fieldIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_fieldIncr[] = {
   3.1, 4.1,
   3.2, 4.2, // 3
   3.3, 4.3, // 4
@@ -120,15 +120,15 @@
   3.8, 4.8, // 9
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_jacobianLumped[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_jacobianLumped[] = {
   1.1, 1.1,
   1.2, 1.2, // 3
   1.3, 1.3, // 4
   1.4, 1.4,
   1.5, 1.5, // 6
   1.7, 1.7, // 7
-  1.6, 1.6, // 8
-  1.8, 1.8, // 9
+  1.0, 1.0, // 8
+  1.0, 1.0, // 9
 };
 
 const int pylith::faults::CohesiveKinDataTri3::_numFaultVertices = 2;
@@ -154,39 +154,43 @@
 };
 
 
-const double pylith::faults::CohesiveKinDataTri3::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_orientation[] = {
   0.0, -1.0,  -1.0, 0.0,
   0.0, -1.0,  -1.0, 0.0
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_area[] = {
   1.0,
   1.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_residual[] = {
   0.0,  0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
   0.0,  0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
-  0.3+1.89546413727,  0.3+0.08241148423, // 8
-  0.4+1.77538035254,  0.4+0.14794836271, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2) - (0.08241148423),
+ -(9.5-9.2) - (1.89546413727), // 8
+ -(8.7-8.3) - (0.14794836271),
+ -(9.7-9.3) - (1.77538035254), // 9
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_residualIncr[] = {
   0.0,  0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
   0.0,  0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
-  0.3+1.89546413727,  0.3+0.08241148423, // 8
-  0.4+1.77538035254,  0.4+0.14794836271, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2) - (0.08241148423),
+ -(9.5-9.2) - (1.89546413727), // 8
+ -(8.7-8.3) - (0.14794836271),
+ -(9.7-9.3) - (1.77538035254), // 9
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_jacobian[] = {
   0.0, 0.0, // 2x
   0.0, 0.0,
   0.0, 0.0,
@@ -209,7 +213,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 8
+ -1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 3y
   0.0, 0.0,
@@ -217,7 +221,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  8
+  0.0,-1.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 4x
   0.0, 0.0,
@@ -226,7 +230,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  9
+ -1.0, 0.0, //  9
   0.0, 0.0, // 4y
   0.0, 0.0,
   0.0, 0.0,
@@ -234,7 +238,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  9
+  0.0,-1.0, // 9
   0.0, 0.0, // 5x
   0.0, 0.0,
   0.0, 0.0,
@@ -257,7 +261,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  8
+ +1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 6y
   0.0, 0.0,
@@ -265,7 +269,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  8
+  0.0,+1.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 7x
   0.0, 0.0,
@@ -274,7 +278,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  9
+ +1.0, 0.0, // 9
   0.0, 0.0, // 7y
   0.0, 0.0,
   0.0, 0.0,
@@ -282,52 +286,52 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  9
+  0.0,+1.0, // 9
 
   0.0, 0.0, // 8x
-  0.0,+1.0, //  3
+ -1.0, 0.0, // 3
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  6
+ +1.0, 0.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 8y
- +1.0, 0.0, //  3
+  0.0,-1.0, // 3
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  6
+  0.0,+1.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
 
   0.0, 0.0, // 9x
   0.0, 0.0,
-  0.0,+1.0, //  4
+ -1.0, 0.0, //  4
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  7
+ +1.0, 0.0, // 7
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 9y
   0.0, 0.0,
- +1.0, 0.0, //  4
+  0.0,-1.0, // 4
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  7
+  0.0,+1.0, // 7
   0.0, 0.0,
   0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3::_fieldIncrAdjusted[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3::_fieldIncrAdjusted[] = {
   3.1, 4.1,
-  11.4124508246, 12.5863689652, // 3
-  11.1489656107, 12.3019463023, // 4
+  3.57911749124, 5.58636896515, // 3
+  3.83717073887, 5.75938219977, // 4
   3.4, 4.4,
-  -3.06996065966, -2.20909517212, // 6
-  -2.30215017286, -1.41913540767, // 7
-  -10.0636427582, -9.85494098949, // 8
-  -10.402530193, -10.2036552939, // 9
+  3.19670600701, 3.39090482788, // 6
+  3.28922237616, 3.58400184723, // 7
+  0.454940989487, 1.66364275818, // 8
+  0.69832196053, 1.8971968597, // 9
 };
 
 pylith::faults::CohesiveKinDataTri3::CohesiveKinDataTri3(void)
@@ -337,25 +341,25 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldIncr = const_cast<double*>(_fieldIncr);
-  jacobianLumped = const_cast<double*>(_jacobianLumped);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
-  fieldIncrAdjusted = const_cast<double*>(_fieldIncrAdjusted);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  fieldIncrAdjusted = const_cast<PylithScalar*>(_fieldIncrAdjusted);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,16 +63,16 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Field over domain at time t.
-  static const double _fieldIncr[]; ///< Solution increment field over domain at time t.
-  static const double _jacobianLumped[]; ///< Lumped Jacobian.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
-  static const double _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _fieldIncrAdjusted[]; ///< Expected values for colution increment after adjustment.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,27 +76,27 @@
 
 const int pylith::faults::CohesiveKinDataTri3d::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinDataTri3d::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinDataTri3d::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinDataTri3d::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -113,7 +113,7 @@
 const char* pylith::faults::CohesiveKinDataTri3d::_riseTimeFilename = 
   "data/tri3d_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinDataTri3d::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_fieldT[] = {
   6.1, 8.1,
   6.2, 8.2, // 5
   6.3, 8.3, // 6
@@ -128,15 +128,45 @@
   7.2, 9.2, // 15
 };
 
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_fieldIncr[] = {
+  3.1, 7.1,
+  3.2, 7.2, // 5
+  3.3, 7.3, // 6
+  3.4, 7.4,
+  3.5, 7.5, // 8
+  3.6, 7.6,
+  3.7, 7.7, // 10
+  3.9, 7.9, // 11
+  3.1, 7.1, // 12
+  3.8, 7.8, // 13
+  3.0, 7.0, // 14
+  2.2, 5.2, // 15
+};
 
-const double pylith::faults::CohesiveKinDataTri3d::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_jacobianLumped[] = {
+  6.1, 8.1,
+  6.2, 8.2, // 5
+  6.3, 8.3, // 6
+  6.4, 8.4,
+  6.5, 8.5, // 8
+  6.6, 8.6,
+  6.7, 8.7, // 10
+  6.9, 8.9, // 11
+  7.1, 9.1, // 12
+  1.0, 1.0, // 13
+  1.0, 1.0, // 14
+  1.0, 1.0, // 15
+};
+
+
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_orientation[] = {
   +0.70710678118654757, -0.70710678118654757,  
   -0.70710678118654757, -0.70710678118654757,
   0.0, -1.0,  -1.0,  0.0,
  +1.0,  0.0,   0.0, -1.0
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_area[] = {
   2.0,
   1.0,
   1.0,
@@ -164,37 +194,43 @@
   16, 17
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_residual[] = {
   0.0,  0.0,
- -1.4142135623730949, -11.030865786510143, // 5
- -8.0,  -6.0, // 6
+ +2.0*6.8, +2.0*8.8, // 5
+ +1.0*6.0, +1.0*8.0, // 6
   0.0,  0.0,
- +7.2,  -9.2, // 8
+ +1.0*7.2, +1.0*9.2, // 8
   0.0,  0.0,
- +1.4142135623730949, +11.030865786510143, // 10
- +8.0, +6.0, // 11
- -7.2, +9.2, // 12
-  0.0+1.89546413727, +0.70710678118654757+0.08241148423, // 13
-  0.6+1.77538035254, 0.6+0.14794836271, // 14
- -0.6+1.59887481971,  0.6+0.19186497837, // 15
+ -2.0*6.8, -2.0*8.8, // 10
+ -1.0*6.0, -1.0*8.0, // 6
+ -1.0*7.2, -1.0*9.2, // 8
+  -2.0*(6.7-6.2 -0.70710678118654757*(1.89546413727-0.08241148423)),
+  -2.0*(8.7-8.2 -0.70710678118654757*(-1.89546413727-0.08241148423)), // 13
+  -1.0*(6.9-6.3 +0.14794836271),
+  -1.0*(8.9-8.3 +1.77538035254), // 14
+  -1.0*(7.1-6.5 -1.59887481971),
+  -1.0*(9.1-8.5 +0.19186497837), // 15
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_residualIncr[] = {
   0.0,  0.0,
- -1.4142135623730949, -11.030865786510143, // 5
- -8.0,  -6.0, // 6
+ +2.0*6.8, +2.0*8.8, // 5
+ +1.0*6.0, +1.0*8.0, // 6
   0.0,  0.0,
- +7.2,  -9.2, // 8
+ +1.0*7.2, +1.0*9.2, // 8
   0.0,  0.0,
- +1.4142135623730949, +11.030865786510143, // 10
- +8.0, +6.0, // 11
- -7.2, +9.2, // 12
-  0.0+1.89546413727, +0.70710678118654757+0.08241148423, // 13
-  0.6+1.77538035254, 0.6+0.14794836271, // 14
- -0.6+1.59887481971,  0.6+0.19186497837, // 15
+ -2.0*6.8, -2.0*8.8, // 10
+ -1.0*6.0, -1.0*8.0, // 6
+ -1.0*7.2, -1.0*9.2, // 8
+  -2.0*(6.7-6.2 -0.70710678118654757*(1.89546413727-0.08241148423)),
+  -2.0*(8.7-8.2 -0.70710678118654757*(-1.89546413727-0.08241148423)), // 13
+  -1.0*(6.9-6.3 +0.14794836271),
+  -1.0*(8.9-8.3 +1.77538035254), // 14
+  -1.0*(7.1-6.5 -1.59887481971),
+  -1.0*(9.1-8.5 +0.19186497837), // 15
 };
 
-const double pylith::faults::CohesiveKinDataTri3d::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinDataTri3d::_jacobian[] = {
   0.0, 0.0, // 4x
   0.0, 0.0,
   0.0, 0.0,
@@ -228,7 +264,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -0.70710678118654757, +0.70710678118654757, // 13
+ -2.0, 0.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 5y
@@ -240,7 +276,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +0.70710678118654757, +0.70710678118654757, // 13
+  0.0,-2.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 6x
@@ -253,7 +289,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 14
+ -1.0, 0.0, // 14
   0.0, 0.0,
   0.0, 0.0, // 6y
   0.0, 0.0,
@@ -265,7 +301,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 14
+  0.0,-1.0, // 14
   0.0, 0.0,
   0.0, 0.0, // 7x
   0.0, 0.0,
@@ -314,7 +350,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 15
+  0.0,-1.0, // 15
   0.0, 0.0, // 9x
   0.0, 0.0,
   0.0, 0.0,
@@ -348,7 +384,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +0.70710678118654757, -0.70710678118654757, // 13
+ +2.0, 0.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 10y
@@ -360,7 +396,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -0.70710678118654757, -0.70710678118654757, // 13
+  0.0,+2.0, // 13
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 11x
@@ -373,7 +409,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 14
+ +1.0, 0.0, // 14
   0.0, 0.0,
   0.0, 0.0, // 11y
   0.0, 0.0,
@@ -385,7 +421,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 14
+  0.0,+1.0, // 14
   0.0, 0.0,
   0.0, 0.0, // 12x
   0.0, 0.0,
@@ -410,26 +446,26 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 15
+  0.0,+1.0, // 15
   0.0, 0.0, // 13x
- -0.70710678118654757, +0.70710678118654757, // 5
+ -2.0, 0.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +0.70710678118654757, -0.70710678118654757, // 10
+ +2.0, 0.0, // 10
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 13y
- +0.70710678118654757, +0.70710678118654757, // 5
+  0.0,-2.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -0.70710678118654757, -0.70710678118654757, // 10
+  0.0,+2.0, // 10
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -437,24 +473,24 @@
   0.0, 0.0,
   0.0, 0.0, // 14x
   0.0, 0.0,
-  0.0,+1.0, // 6
+ -1.0, 0.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 11
+ +1.0, 0.0, // 11
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 14y
   0.0, 0.0,
- +1.0, 0.0, // 6
+  0.0,-1.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, // 11
+  0.0,+1.0, // 11
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -475,11 +511,11 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 8
+  0.0,-1.0, // 8
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 12
+  0.0,+1.0, // 12
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -492,22 +528,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,25 +47,25 @@
 
 const int pylith::faults::CohesiveKinSrcsDataHex8::_numQuadPts = 4;
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_quadPts[] = {
-  -0.57735027, -0.57735027,
-  +0.57735027, -0.57735027,
-  +0.57735027, +0.57735027,
-  -0.57735027, +0.57735027,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_quadPts[] = {
+  -1.0, -1.0,
+  +1.0, -1.0,
+  +1.0, +1.0,
+  -1.0, +1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_quadWts[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_quadWts[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_basis[] = {
-  0.62200847,  0.16666667,  0.16666667,  0.0446582,
-  0.16666667,  0.62200847,  0.0446582,   0.16666667,
-  0.16666667,  0.0446582,   0.62200847,  0.16666667,
-  0.0446582,   0.16666667,  0.16666667,  0.62200847,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_basis[] = {
+  1.0, 0.0, 0.0, 0.0,
+  0.0, 1.0, 0.0, 0.0,
+  0.0, 0.0, 1.0, 0.0,
+  0.0, 0.0, 0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_basisDeriv[] = {
   -0.39433757, -0.39433757,
   +0.39433757, -0.10566243,
   +0.10566243, +0.10566243,
@@ -87,7 +87,7 @@
   -0.39433757, +0.39433757,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_verticesRef[] = {
   -1.0, -1.0,
   +1.0, -1.0,
   +1.0, +1.0,
@@ -107,23 +107,23 @@
 const char* pylith::faults::CohesiveKinSrcsDataHex8::_riseTimeFilename = 
   "data/hex8_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_fieldT[] = {
   4.1, 6.1, 8.1,
   4.2, 6.2, 8.2,
   4.3, 6.3, 8.3,
   4.4, 6.4, 8.4,
-  4.5, 6.5, 8.5,
-  4.6, 6.6, 8.6,
-  4.7, 6.7, 8.7,
-  4.8, 6.8, 8.8,
+  4.5, 6.5, 8.5, // 6
+  4.6, 6.6, 8.6, // 7
+  4.7, 6.7, 8.7, // 8
+  4.8, 6.8, 8.8, // 9
   4.9, 6.9, 8.9,
   4.0, 6.0, 8.0,
   5.1, 7.1, 9.1,
   5.2, 7.2, 9.2,
-  5.3, 7.3, 9.3,
-  5.5, 7.5, 9.5,
-  5.7, 7.7, 9.7,
-  5.9, 7.9, 9.9,
+  5.3, 7.3, 9.3, // 14
+  5.5, 7.5, 9.5, // 15
+  5.7, 7.7, 9.7, // 16
+  5.9, 7.9, 9.9, // 17
   5.4, 7.4, 9.4, // 18
   5.6, 7.6, 9.6, // 19
   5.8, 7.8, 9.8, // 20
@@ -131,14 +131,60 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_fieldIncr[] = {
+  3.1, 4.1, 5.1,
+  3.2, 4.2, 5.2,
+  3.3, 4.3, 5.3,
+  3.4, 4.4, 5.4,
+  3.5, 4.5, 5.5, // 6
+  3.6, 4.6, 5.6, // 7
+  3.7, 4.7, 5.7, // 8
+  3.8, 4.8, 5.8, // 9
+  3.9, 4.9, 5.9,
+  3.0, 4.0, 5.0,
+  3.1, 4.1, 5.1,
+  3.2, 4.2, 5.2,
+  3.3, 4.3, 5.3, // 14
+  3.5, 4.5, 5.5, // 15
+  3.7, 4.7, 5.7, // 16
+  3.9, 4.9, 5.9, // 17
+  3.4, 4.4, 5.4, // 18
+  3.6, 4.6, 5.6, // 19
+  3.8, 4.8, 5.8, // 20
+  3.0, 4.0, 5.0, // 21
+};
+
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_jacobianLumped[] = {
+  1.1, 1.1, 1.1,
+  1.2, 1.2, 1.2,
+  1.3, 1.3, 1.3,
+  1.4, 1.4, 1.4,
+  1.5, 1.5, 1.5, // 6
+  1.6, 1.6, 1.6, // 7
+  1.7, 1.7, 1.7, // 8
+  1.8, 1.8, 1.8, // 9
+  1.9, 1.9, 1.9,
+  1.0, 1.0, 1.0,
+  1.1, 1.1, 1.1,
+  1.2, 1.2, 1.2,
+  1.3, 1.3, 1.3, // 14
+  1.5, 1.5, 1.5, // 15
+  1.7, 1.7, 1.7, // 16
+  1.9, 1.9, 1.9, // 17
+  1.0, 1.0, 1.0, // 18
+  1.0, 1.0, 1.0, // 19
+  1.0, 1.0, 1.0, // 20
+  1.0, 1.0, 1.0, // 21
+};
+
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_orientation[] = {
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
   0.0, -1.0, 0.0,    0.0, 0.0, +1.0,    -1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_area[] = {
   1.0, 1.0, 1.0, 1.0
 };
 
@@ -165,53 +211,85 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_residual[] = {
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+  +5.4, +7.4, +9.4, // 6
+  +5.6, +7.6, +9.6, // 7
+  +5.8, +7.8, +9.8, // 8
+  +5.0, +7.0, +9.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
-  0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
-  0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
-  1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
-  1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+  -5.4, -7.4, -9.4, // 14
+  -5.6, -7.6, -9.6, // 15
+  -5.8, -7.8, -9.8, // 16
+  -5.0, -7.0, -9.0, // 17
+
+  // 18 (constraint)
+  -(5.3-4.5 + 0.07938069066+0.03986101755), 
+  -(7.3-6.5 + 1.82575588523+0.91680340354),
+  -(9.3-8.5 + 0.55566483464+0.27902712282),
+
+  // 19 (constraint)
+  -(5.5-4.6 + 0.14140241667+0.05212609695),
+  -(7.5-6.6 + 1.69682900001+0.62551316338),
+  -(9.5-8.6 + 0.56560966667+0.20850438779),
+
+  // 20 (constraint)
+  -(5.7-4.7 + 0.18205179147+0.04188434752),
+  -(7.7-6.7 + 1.51709826228+0.34903622931),
+  -(9.7-8.7 + 0.54615537442+0.12565304255),
+
+  // 21 (constraint)
+  -(5.9-4.8 + 0.19904410828+0.01977711990),
+  -(7.9-6.8 + 1.29378670385+0.12855127934),
+  -(9.9-8.8 + 0.49761027071+0.04944279975),
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_residualIncr[] = {
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -9.4,-5.4,+7.4, // 6
- -9.6,-5.6,+7.6, // 7
- -9.8,-5.8,+7.8, // 8
- -9.0,-5.0,+7.0, // 9
+  +5.4, +7.4, +9.4, // 6
+  +5.6, +7.6, +9.6, // 7
+  +5.8, +7.8, +9.8, // 8
+  +5.0, +7.0, +9.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +9.4,+5.4,-7.4, // 14
- +9.6,+5.6,-7.6, // 15
- +9.8,+5.8,-7.8, // 16
- +9.0,+5.0,-7.0, // 17
-  0.8+1.82575588523+0.91680340354, -0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
-  0.9+1.69682900001+0.62551316338, -0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
-  1.0+1.51709826228+0.34903622931, -1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
-  1.1+1.29378670385+0.12855127934, -1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
+  -5.4, -7.4, -9.4, // 14
+  -5.6, -7.6, -9.6, // 15
+  -5.8, -7.8, -9.8, // 16
+  -5.0, -7.0, -9.0, // 17
+
+  // 18 (constraint)
+  -(5.3-4.5 + 0.07938069066+0.03986101755), 
+  -(7.3-6.5 + 1.82575588523+0.91680340354),
+  -(9.3-8.5 + 0.55566483464+0.27902712282),
+
+  // 19 (constraint)
+  -(5.5-4.6 + 0.14140241667+0.05212609695),
+  -(7.5-6.6 + 1.69682900001+0.62551316338),
+  -(9.5-8.6 + 0.56560966667+0.20850438779),
+
+  // 20 (constraint)
+  -(5.7-4.7 + 0.18205179147+0.04188434752),
+  -(7.7-6.7 + 1.51709826228+0.34903622931),
+  -(9.7-8.7 + 0.54615537442+0.12565304255),
+
+  // 21 (constraint)
+  -(5.9-4.8 + 0.19904410828+0.01977711990),
+  -(7.9-6.8 + 1.29378670385+0.12855127934),
+  -(9.9-8.8 + 0.49761027071+0.04944279975),
 };
 
-const double pylith::faults::CohesiveKinSrcsDataHex8::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataHex8::_jacobian[] = {
   0.0, 0.0, 0.0, // 2x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -468,7 +546,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 18
+ -1.0, 0.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -488,7 +566,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 18
+  0.0,-1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -508,7 +586,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 18
+  0.0, 0.0,-1.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -529,7 +607,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 19
+ -1.0, 0.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
@@ -549,7 +627,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 19
+  0.0,-1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
@@ -569,7 +647,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 19
+  0.0, 0.0,-1.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -590,7 +668,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 20
+ -1.0, 0.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
@@ -610,7 +688,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 20
+  0.0,-1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
@@ -630,7 +708,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 20
+  0.0, 0.0,-1.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -651,7 +729,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 21
+ -1.0, 0.0, 0.0, // 21
   0.0, 0.0, 0.0, // 9y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -671,7 +749,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 21
+  0.0,-1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 9z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -691,7 +769,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 21
+  0.0, 0.0,-1.0, // 21
   0.0, 0.0, 0.0, // 10x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -948,7 +1026,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 18
+ +1.0, 0.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -968,7 +1046,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 18
+  0.0,+1.0, 0.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -988,7 +1066,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 18
+  0.0, 0.0,+1.0, // 18
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1009,7 +1087,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 19
+ +1.0, 0.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15y
@@ -1029,7 +1107,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 19
+  0.0,+1.0, 0.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 15z
@@ -1049,7 +1127,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 19
+  0.0, 0.0,+1.0, // 19
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16x
@@ -1070,7 +1148,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 20
+ +1.0, 0.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16y
   0.0, 0.0, 0.0,
@@ -1090,7 +1168,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 20
+  0.0,+1.0, 0.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 16z
   0.0, 0.0, 0.0,
@@ -1110,7 +1188,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 20
+  0.0, 0.0,+1.0, // 20
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 17x
   0.0, 0.0, 0.0,
@@ -1131,7 +1209,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 21
+ +1.0, 0.0, 0.0, // 21
   0.0, 0.0, 0.0, // 17y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1151,7 +1229,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 21
+  0.0,+1.0, 0.0, // 21
   0.0, 0.0, 0.0, // 17z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1171,12 +1249,12 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 21
+  0.0, 0.0,+1.0, // 21
   0.0, 0.0, 0.0, // 18x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 6
+ -1.0, 0.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1184,7 +1262,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 14
+ +1.0, 0.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1196,7 +1274,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 6
+  0.0,-1.0, 0.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1204,7 +1282,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 14
+  0.0,+1.0, 0.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1216,7 +1294,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 6
+  0.0, 0.0,-1.0, // 6
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1224,7 +1302,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 14
+  0.0, 0.0,+1.0, // 14
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1237,7 +1315,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 7
+ -1.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1245,7 +1323,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 15
+ +1.0, 0.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1257,7 +1335,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 7
+  0.0,-1.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1265,7 +1343,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 15
+  0.0,+1.0, 0.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1277,7 +1355,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+  0.0, 0.0,-1.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1285,7 +1363,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 15
+  0.0, 0.0,+1.0, // 15
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1298,7 +1376,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 8
+ -1.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1306,7 +1384,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 16
+ +1.0, 0.0, 0.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1318,7 +1396,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 8
+  0.0,-1.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1326,7 +1404,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 16
+  0.0,+1.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1338,7 +1416,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+  0.0, 0.0,-1.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1346,7 +1424,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 16
+  0.0, 0.0,+1.0, // 16
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1359,7 +1437,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 9
+ -1.0, 0.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1367,7 +1445,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 17
+ +1.0, 0.0, 0.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1379,7 +1457,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 9
+  0.0,-1.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1387,7 +1465,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 17
+  0.0,+1.0, 0.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1399,7 +1477,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+  0.0, 0.0,-1.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1407,7 +1485,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 17
+  0.0, 0.0,+1.0, // 17
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -1421,22 +1499,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,23 +39,23 @@
 
 const int pylith::faults::CohesiveKinSrcsDataLine2::_numQuadPts = 1;
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_quadPts[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_quadPts[] = {
   0.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_quadWts[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_quadWts[] = {
   1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_basis[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_basis[] = {
   1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_basisDeriv[] = {
   1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_verticesRef[] = {
   0.0
 };
 
@@ -73,7 +73,7 @@
   "data/line2_risetime.spatialdb";
 
 // Don't expect these values to be used, so just use some values.
-const double pylith::faults::CohesiveKinSrcsDataLine2::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_fieldT[] = {
   7.1,
   7.2,
   7.3,
@@ -82,14 +82,30 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_fieldIncr[] = {
+  1.1,
+  1.2, // 3
+  1.3,
+  1.4, // 5
+  1.5
+};
+
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_jacobianLumped[] = {
+  2.1,
+  2.2, // 3
+  2.3,
+  2.4, // 5
   1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_orientation[] = {
   1.0
 };
 
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_area[] = {
+  1.0
+};
+
 const int pylith::faults::CohesiveKinSrcsDataLine2::_numFaultVertices = 1;
 const int pylith::faults::CohesiveKinSrcsDataLine2::_verticesFault[] = {
   1
@@ -113,23 +129,23 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_residualIncr[] = {
    0.0,
-   7.5,
+  +7.5,
    0.0,
   -7.5,
   -0.2+1.89546413727+0.99414665414,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_residual[] = {
    0.0,
-   7.5,
+  +7.5,
    0.0,
   -7.5,
   -0.2+1.89546413727+0.99414665414,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataLine2::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataLine2::_jacobian[] = {
   0.0,  0.0,  0.0,  0.0,  0.0,
   0.0,  0.0,  0.0,  0.0, -1.0,
   0.0,  0.0,  0.0,  0.0,  0.0,
@@ -144,22 +160,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residualIncr = const_cast<double*>(_residualIncr);
-  residual = const_cast<double*>(_residual);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  residual = const_cast<PylithScalar*>(_residual);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation with solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation with solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -58,27 +58,27 @@
 
 const int pylith::faults::CohesiveKinSrcsDataQuad4::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinSrcsDataQuad4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataQuad4::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -95,7 +95,7 @@
 const char* pylith::faults::CohesiveKinSrcsDataQuad4::_riseTimeFilename = 
   "data/quad4_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2,
   8.3, 9.3, // 4
@@ -108,14 +108,38 @@
   8.0, 9.0, // 11
 };
 
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_fieldIncr[] = {
+  3.1, 4.1,
+  3.2, 4.2,
+  3.3, 4.3, // 4
+  3.4, 4.4, // 5
+  3.5, 4.5,
+  3.6, 4.6,
+  3.7, 4.7, // 8
+  3.9, 4.9, // 9
+  3.8, 4.8, // 10
+  3.0, 4.0, // 11
+};
 
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_jacobianLumped[] = {
+  1.1, 1.1,
+  1.2, 1.2,
+  1.3, 1.3, // 4
+  1.4, 1.4, // 5
+  1.5, 1.5,
+  1.6, 1.6,
+  1.7, 1.7, // 8
+  1.9, 1.9, // 9
+  1.0, 1.0, // 10
+  1.0, 1.0, // 11
+};
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_orientation[] = {
   0.0,  1.0,  +1.0, 0.0,
   0.0,  1.0,  +1.0, 0.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_area[] = {
   1.0, 1.0,
 };
 
@@ -142,33 +166,37 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_residual[] = {
   0.0,  0.0,
   0.0,  0.0,
-  9.8,  8.8, // 4
-  9.0,  8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
   0.0,  0.0,
   0.0,  0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254+0.68377062865, -0.4+0.14794836271+0.05698088572, // 10
- -0.5+1.89546413727+0.99414665414, -0.5+0.08241148423+0.04322376757, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3 + -0.14794836271 + -0.05698088572),
+ -(9.7-9.3 + -1.77538035254 + -0.68377062865), // 10
+ -(8.9-8.4 + -0.08241148423 + -0.04322376757),
+ -(9.9-9.4 + -1.89546413727 + -0.99414665414), // 11
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_residualIncr[] = {
   0.0,  0.0,
   0.0,  0.0,
-  9.8,  8.8, // 4
-  9.0,  8.0, // 5
+ +8.8, +9.8, // 4
+ +8.0, +9.0, // 5
   0.0,  0.0,
   0.0,  0.0,
- -9.8, -8.8, // 8
- -9.0, -8.0, // 9
- -0.4+1.77538035254+0.68377062865, -0.4+0.14794836271+0.05698088572, // 10
- -0.5+1.89546413727+0.99414665414, -0.5+0.08241148423+0.04322376757, // 11
+ -8.8, -9.8, // 8
+ -8.0, -9.0, // 9
+ -(8.7-8.3 + -0.14794836271 + -0.05698088572),
+ -(9.7-9.3 + -1.77538035254 + -0.68377062865), // 10
+ -(8.9-8.4 + -0.08241148423 + -0.04322376757),
+ -(9.9-9.4 + -1.89546413727 + -0.99414665414), // 11
 };
 
-const double pylith::faults::CohesiveKinSrcsDataQuad4::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataQuad4::_jacobian[] = {
   0.0, 0.0, // 2x
   0.0, 0.0,
   0.0, 0.0,
@@ -217,7 +245,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, // 10
+ -1.0, 0.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 4y
   0.0, 0.0,
@@ -227,7 +255,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  10
+  0.0,-1.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 5x
   0.0, 0.0,
@@ -238,7 +266,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  11
+ -1.0, 0.0, // 11
   0.0, 0.0, // 5y
   0.0, 0.0,
   0.0, 0.0,
@@ -248,7 +276,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  11
+  0.0,-1.0, // 11
   0.0, 0.0, // 6x
   0.0, 0.0,
   0.0, 0.0,
@@ -297,7 +325,7 @@
   0.0, 0.0, 
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  10
+ +1.0, 0.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 8y
   0.0, 0.0,
@@ -307,7 +335,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 10
+  0.0,+1.0, // 10
   0.0, 0.0,
   0.0, 0.0, // 9x
   0.0, 0.0,
@@ -318,7 +346,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 11
+ +1.0, 0.0, // 11
   0.0, 0.0, // 9y
   0.0, 0.0,
   0.0, 0.0,
@@ -328,45 +356,45 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 11
+  0.0,+1.0, // 11
   0.0, 0.0, // 10x
   0.0, 0.0,
-  0.0,-1.0, //  4
+ -1.0, 0.0, // 4
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  8
+ +1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 10y
   0.0, 0.0,
- -1.0, 0.0, //  4
+  0.0,-1.0, // 4
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  8
+  0.0,+1.0, // 8
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 11x
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  5
+ -1.0, 0.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  9
+ +1.0, 0.0, // 9
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 11y
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  5
+  0.0,-1.0, // 5
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, // 9
+  0.0,+1.0, // 9
   0.0, 0.0,
   0.0, 0.0,
 };
@@ -378,22 +406,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,27 +44,37 @@
 
 const int pylith::faults::CohesiveKinSrcsDataTet4::_numBasis = 3;
 
-const int pylith::faults::CohesiveKinSrcsDataTet4::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataTet4::_numQuadPts = 3;
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_quadPts[] = {
-  -3.33333333e-01,  -3.33333333e-01,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_quadPts[] = {
+ -1.00000000e+00, -1.00000000e+00,
+  1.00000000e+00, -1.00000000e+00,
+ -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_quadWts[] = {
+  2.0/3.0, 2.0/3.0, 2.0/3.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_basis[] = {
-  3.33333333e-01,  3.33333333e-01,
-  3.33333333e-01,};
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_basis[] = {
+  1.0, 0.0, 0.0,
+  0.0, 1.0, 0.0,
+  0.0, 0.0, 1.0,
+};
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_basisDeriv[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_basisDeriv[] = {
  -0.50000000e+00, -0.50000000e+00,
   0.50000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
+ -0.50000000e+00, -0.50000000e+00,
+  0.50000000e+00,  0.00000000e+00,
+  0.00000000e+00,  0.50000000e+00,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -83,7 +93,7 @@
 const char* pylith::faults::CohesiveKinSrcsDataTet4::_riseTimeFilename = 
   "data/tet4_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_fieldT[] = {
   7.1, 8.1, 9.1,
   7.2, 8.2, 9.2,
   7.3, 8.3, 9.3,
@@ -97,14 +107,41 @@
   7.1, 8.1, 9.1, // 12
 };
 
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_fieldIncr[] = {
+  3.1, 4.1, 5.1,
+  3.2, 4.2, 5.2, // 3
+  3.3, 4.3, 5.3, // 4
+  3.4, 4.4, 5.4, // 5
+  3.5, 4.5, 5.5,
+  3.6, 4.6, 5.6, // 7
+  3.8, 4.8, 5.8, // 8
+  3.0, 4.0, 5.0, // 9
+  3.7, 4.7, 5.7, // 10
+  3.9, 4.9, 5.9, // 11
+  3.1, 4.1, 5.1, // 12
+};
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_jacobianLumped[] = {
+  1.1, 1.1, 1.1,
+  1.2, 1.2, 1.2, // 3
+  1.3, 1.3, 1.3, // 4
+  1.4, 1.4, 1.4, // 5
+  1.5, 1.5, 1.5,
+  1.6, 1.6, 1.6, // 7
+  1.8, 1.8, 1.8, // 8
+  1.0, 1.0, 1.0, // 9
+  1.0, 1.0, 1.0, // 10
+  1.0, 1.0, 1.0, // 11
+  1.0, 1.0, 1.0, // 12
+};
+
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_orientation[] = {
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_area[] = {
   1.0/3.0, 
   1.0/3.0, 
   1.0/3.0,
@@ -133,35 +170,47 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_residual[] = {
   0.0,  0.0,  0.0,
-  9.7,  7.7,  8.7, // 3
-  9.9,  7.9,  8.9, // 4
-  9.1,  7.1,  8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523+0.91680340354, -0.4+-0.55566483464+-0.27902712282, -0.4+0.07938069066+0.03986101755, // 10
- -0.5+1.69682900001+0.62551316338, -0.5+-0.56560966667+-0.20850438779, -0.5+0.14140241667+0.05212609695, // 11
-  0.4+1.51709826228+0.34903622931,  0.4+-0.54615537442+-0.12565304255,  0.4+0.18205179147+0.04188434752, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 + -0.07938069066-0.03986101755),
+  -1.0/3.0*(8.6-8.2 + -1.82575588523-0.91680340354),
+  -1.0/3.0*(9.6-9.2 + 0.55566483464+0.27902712282), // 10
+  -1.0/3.0*(7.8-7.3 + -0.14140241667-0.05212609695),
+  -1.0/3.0*(8.8-8.3 + -1.69682900001-0.62551316338),
+  -1.0/3.0*(9.8-9.3 + 0.56560966667+0.20850438779), // 11
+  -1.0/3.0*(7.0-7.4 + -0.18205179147-0.04188434752),
+  -1.0/3.0*(8.0-8.4 + -1.51709826228-0.34903622931),
+  -1.0/3.0*(9.0-9.4 + 0.54615537442+0.12565304255), // 12
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_residualIncr[] = {
   0.0,  0.0,  0.0,
-  9.7,  7.7,  8.7, // 3
-  9.9,  7.9,  8.9, // 4
-  9.1,  7.1,  8.1, // 5
+   +7.7/3.0,  +8.7/3.0,  +9.7/3.0, // 3
+  +7.9/3.0,  +8.9/3.0,  +9.9/3.0, // 4
+  +7.1/3.0,  +8.1/3.0,  +9.1/3.0, // 5
   0.0,  0.0,  0.0,
- -9.7, -7.7, -8.7, // 7
- -9.9, -7.9, -8.9, // 4
- -9.1, -7.1, -8.1, // 5
- -0.4+1.82575588523+0.91680340354, -0.4+-0.55566483464+-0.27902712282, -0.4+0.07938069066+0.03986101755, // 10
- -0.5+1.69682900001+0.62551316338, -0.5+-0.56560966667+-0.20850438779, -0.5+0.14140241667+0.05212609695, // 11
-  0.4+1.51709826228+0.34903622931,  0.4+-0.54615537442+-0.12565304255,  0.4+0.18205179147+0.04188434752, // 12
+  -7.7/3.0,  -8.7/3.0,  -9.7/3.0, // 7
+  -7.9/3.0,  -8.9/3.0,  -9.9/3.0, // 8
+  -7.1/3.0,  -8.1/3.0,  -9.1/3.0, // 9
+  -1.0/3.0*(7.6-7.2 + -0.07938069066-0.03986101755),
+  -1.0/3.0*(8.6-8.2 + -1.82575588523-0.91680340354),
+  -1.0/3.0*(9.6-9.2 + 0.55566483464+0.27902712282), // 10
+  -1.0/3.0*(7.8-7.3 + -0.14140241667-0.05212609695),
+  -1.0/3.0*(8.8-8.3 + -1.69682900001-0.62551316338),
+  -1.0/3.0*(9.8-9.3 + 0.56560966667+0.20850438779), // 11
+  -1.0/3.0*(7.0-7.4 + -0.18205179147-0.04188434752),
+  -1.0/3.0*(8.0-8.4 + -1.51709826228-0.34903622931),
+  -1.0/3.0*(9.0-9.4 + 0.54615537442+0.12565304255), // 12
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTet4::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTet4::_jacobian[] = {
   0.0, 0.0, 0.0, // 2x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -203,7 +252,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 10
+ -1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3y
@@ -214,7 +263,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 10
+  0.0,-1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 3z
@@ -225,7 +274,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 10
+  0.0, 0.0,-1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4x
@@ -237,7 +286,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 11
+ -1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4y
   0.0, 0.0, 0.0,
@@ -248,7 +297,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 11
+  0.0,-1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 4z
   0.0, 0.0, 0.0,
@@ -259,7 +308,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 11
+  0.0, 0.0,-1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 5x
   0.0, 0.0, 0.0,
@@ -271,7 +320,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 12
+ -1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -282,7 +331,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 12
+  0.0,-1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 5z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -293,7 +342,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 12
+  0.0, 0.0,-1.0/3.0, // 12
   0.0, 0.0, 0.0, // 6x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -335,7 +384,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 10
+ +1.0/3.0, 0.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7y
@@ -346,7 +395,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 10
+  0.0,+1.0/3.0, 0.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 7z
@@ -357,7 +406,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 10
+  0.0, 0.0,+1.0/3.0, // 10
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8x
@@ -369,7 +418,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 11
+ +1.0/3.0, 0.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8y
   0.0, 0.0, 0.0,
@@ -380,7 +429,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 11
+  0.0,+1.0/3.0, 0.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 8z
   0.0, 0.0, 0.0,
@@ -391,7 +440,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 11
+  0.0, 0.0,+1.0/3.0, // 11
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 9x
   0.0, 0.0, 0.0,
@@ -403,7 +452,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 12
+ +1.0/3.0, 0.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -414,7 +463,7 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 12
+  0.0,+1.0/3.0, 0.0, // 12
   0.0, 0.0, 0.0, // 9z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -425,35 +474,35 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 12
+  0.0, 0.0,+1.0/3.0, // 12
   0.0, 0.0, 0.0, // 10x
-  0.0,-1.0, 0.0, // 3
+ -1.0/3.0, 0.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 7
+ +1.0/3.0, 0.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10y
-  0.0, 0.0,-1.0, // 3
+  0.0,-1.0/3.0, 0.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 7
+  0.0,+1.0/3.0, 0.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 10z
- -1.0, 0.0, 0.0, // 3
+  0.0, 0.0,-1.0/3.0, // 3
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 7
+  0.0, 0.0,+1.0/3.0, // 7
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -461,33 +510,33 @@
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11x
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 4
+ -1.0/3.0, 0.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 8
+ +1.0/3.0, 0.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11y
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 4
+  0.0,-1.0/3.0, 0.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 8
+  0.0,+1.0/3.0, 0.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 11z
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 4
+  0.0, 0.0,-1.0/3.0, // 4
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 8
+  0.0, 0.0,+1.0/3.0, // 8
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -495,33 +544,33 @@
   0.0, 0.0, 0.0, // 12x
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,-1.0, 0.0, // 5
+ -1.0/3.0, 0.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0,+1.0, 0.0, // 9
+ +1.0/3.0, 0.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12y
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,-1.0, // 5
+  0.0,-1.0/3.0, 0.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
-  0.0, 0.0,+1.0, // 9
+  0.0,+1.0/3.0, 0.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0, // 12z
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- -1.0, 0.0, 0.0, // 5
+  0.0, 0.0,-1.0/3.0, // 5
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
- +1.0, 0.0, 0.0, // 9
+  0.0, 0.0,+1.0/3.0, // 9
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
   0.0, 0.0, 0.0,
@@ -534,22 +583,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -72,27 +72,27 @@
 
 const int pylith::faults::CohesiveKinSrcsDataTri3::_numBasis = 2;
 
-const int pylith::faults::CohesiveKinSrcsDataTri3::_numQuadPts = 1;
+const int pylith::faults::CohesiveKinSrcsDataTri3::_numQuadPts = 2;
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_quadPts[] = {
-  0.0,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_quadPts[] = {
+  -1.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_quadWts[] = {
-  2.0,
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_quadWts[] = {
+  1.0, 1.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_basis[] = {
-  0.5,
-  0.5
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_basis[] = {
+  1.0, 0.0,
+  0.0, 1.0,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_basisDeriv[] = {
-  -0.5,
-   0.5
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_basisDeriv[] = {
+  -0.5, 0.5,
+  -0.5, 0.5,
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_verticesRef[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_verticesRef[] = {
   -1.0, 1.0
 };
 
@@ -109,7 +109,7 @@
 const char* pylith::faults::CohesiveKinSrcsDataTri3::_riseTimeFilename = 
   "data/tri3_risetime.spatialdb";
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_fieldT[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_fieldT[] = {
   8.1, 9.1,
   8.2, 9.2,
   8.3, 9.3,
@@ -120,13 +120,34 @@
   8.8, 9.8, // 9
 };
 
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_fieldIncr[] = {
+  3.1, 4.1,
+  3.2, 4.2, // 3
+  3.3, 4.3, // 4
+  3.4, 4.4,
+  3.5, 4.5, // 6
+  3.7, 4.7, // 7
+  3.6, 4.6, // 8
+  3.8, 4.8, // 9
+};
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_orientation[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_jacobianLumped[] = {
+  1.1, 1.1,
+  1.2, 1.2, // 3
+  1.3, 1.3, // 4
+  1.4, 1.4,
+  1.5, 1.5, // 6
+  1.7, 1.7, // 7
+  1.0, 1.0, // 8
+  1.0, 1.0, // 9
+};
+
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_orientation[] = {
   0.0, -1.0,  -1.0, 0.0,
   0.0, -1.0,  -1.0, 0.0
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_area[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_area[] = {
   1.0,
   1.0,
 };
@@ -154,29 +175,33 @@
 };
 
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_residual[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_residual[] = {
   0.0,  0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
   0.0,  0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
-  0.3+1.89546413727+0.99414665414,  0.3+0.08241148423+0.04322376757, // 8
-  0.4+1.77538035254+0.68377062865,  0.4+0.14794836271+0.05698088572, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2 + 0.08241148423 + 0.04322376757),
+ -(9.5-9.2 + 1.89546413727 + 0.99414665414), // 8
+ -(8.7-8.3 + 0.14794836271 + 0.05698088572),
+ -(9.7-9.3 + 1.77538035254 + 0.68377062865), // 9
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_residualIncr[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_residualIncr[] = {
   0.0,  0.0,
- -9.6, -8.6, // 3
- -9.8, -8.8, // 4
+ +8.6, +9.6, // 3
+ +8.8, +9.8, // 4
   0.0,  0.0,
- +9.6, +8.6, // 6
- +9.8, +8.8, // 7
-  0.3+1.89546413727+0.99414665414,  0.3+0.08241148423+0.04322376757, // 8
-  0.4+1.77538035254+0.68377062865,  0.4+0.14794836271+0.05698088572, // 9
+ -8.6, -9.6, // 6
+ -8.8, -9.8, // 7
+ -(8.5-8.2 + 0.08241148423 + 0.04322376757),
+ -(9.5-9.2 + 1.89546413727 + 0.99414665414), // 8
+ -(8.7-8.3 + 0.14794836271 + 0.05698088572),
+ -(9.7-9.3 + 1.77538035254 + 0.68377062865), // 9
 };
 
-const double pylith::faults::CohesiveKinSrcsDataTri3::_jacobian[] = {
+const PylithScalar pylith::faults::CohesiveKinSrcsDataTri3::_jacobian[] = {
   0.0, 0.0, // 2x
   0.0, 0.0,
   0.0, 0.0,
@@ -199,7 +224,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, // 8
+ -1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 3y
   0.0, 0.0,
@@ -207,7 +232,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  8
+  0.0,-1.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 4x
   0.0, 0.0,
@@ -216,7 +241,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,+1.0, //  9
+ -1.0, 0.0, //  9
   0.0, 0.0, // 4y
   0.0, 0.0,
   0.0, 0.0,
@@ -224,7 +249,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- +1.0, 0.0, //  9
+  0.0,-1.0, // 9
   0.0, 0.0, // 5x
   0.0, 0.0,
   0.0, 0.0,
@@ -247,7 +272,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  8
+ +1.0, 0.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 6y
   0.0, 0.0,
@@ -255,7 +280,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  8
+  0.0,+1.0, // 8
   0.0, 0.0,
   0.0, 0.0, // 7x
   0.0, 0.0,
@@ -264,7 +289,7 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  9
+ +1.0, 0.0, // 9
   0.0, 0.0, // 7y
   0.0, 0.0,
   0.0, 0.0,
@@ -272,39 +297,39 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  9
+  0.0,+1.0, // 9
 
   0.0, 0.0, // 8x
-  0.0,+1.0, //  3
+ -1.0, 0.0, // 3
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  6
+ +1.0, 0.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 8y
- +1.0, 0.0, //  3
+  0.0,-1.0, // 3
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  6
+  0.0,+1.0, // 6
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
 
   0.0, 0.0, // 9x
   0.0, 0.0,
-  0.0,+1.0, //  4
+ -1.0, 0.0, //  4
   0.0, 0.0,
   0.0, 0.0,
-  0.0,-1.0, //  7
+ +1.0, 0.0, // 7
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0, // 9y
   0.0, 0.0,
- +1.0, 0.0, //  4
+  0.0,-1.0, // 4
   0.0, 0.0,
   0.0, 0.0,
- -1.0, 0.0, //  7
+  0.0,+1.0, // 7
   0.0, 0.0,
   0.0, 0.0,
 };
@@ -316,22 +341,24 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  verticesRef = const_cast<double*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
   id = _id;
   label = const_cast<char*>(_label);
   finalSlipFilename = const_cast<char*>(_finalSlipFilename);
   slipTimeFilename = const_cast<char*>(_slipTimeFilename);
   riseTimeFilename = const_cast<char*>(_riseTimeFilename);
-  fieldT = const_cast<double*>(_fieldT);
-  orientation = const_cast<double*>(_orientation);
-  area = const_cast<double*>(_area);
-  residual = const_cast<double*>(_residual);
-  residualIncr = const_cast<double*>(_residualIncr);
-  jacobian = const_cast<double*>(_jacobian);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldIncr = const_cast<PylithScalar*>(_fieldIncr);
+  jacobianLumped = const_cast<PylithScalar*>(_jacobianLumped);
+  orientation = const_cast<PylithScalar*>(_orientation);
+  area = const_cast<PylithScalar*>(_area);
+  residual = const_cast<PylithScalar*>(_residual);
+  residualIncr = const_cast<PylithScalar*>(_residualIncr);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
   verticesFault = const_cast<int*>(_verticesFault);
   verticesLagrange = const_cast<int*>(_verticesLagrange);
   verticesNegative = const_cast<int*>(_verticesNegative);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,11 +49,11 @@
 
   static const int _numBasis; ///< Number of vertices in cell
   static const int _numQuadPts; ///< Number of quadrature points
-  static const double _quadPts[]; ///< Coordinates of quad pts in ref cell
-  static const double _quadWts[]; ///< Weights of quadrature points
-  static const double _basis[]; ///< Basis fns at quadrature points
-  static const double _basisDeriv[]; ///< Derivatives of basis fns at quad pts
-  static const double _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
+  static const PylithScalar _quadPts[]; ///< Coordinates of quad pts in ref cell
+  static const PylithScalar _quadWts[]; ///< Weights of quadrature points
+  static const PylithScalar _basis[]; ///< Basis fns at quadrature points
+  static const PylithScalar _basisDeriv[]; ///< Derivatives of basis fns at quad pts
+  static const PylithScalar _verticesRef[]; ///< Coordinates of vertices in ref cell (dual basis)
 
   static const int _id; ///< Fault material identifier
   static const char* _label; ///< Label for fault
@@ -63,13 +63,15 @@
   static const char* _matPropsFilename; ///< Name of db for bulk mat properties.
   //@}
 
-  static const double _fieldT[]; ///< Solution field at time t.
+  static const PylithScalar _fieldT[]; ///< Field over domain at time t.
+  static const PylithScalar _fieldIncr[]; ///< Solution increment field over domain at time t.
+  static const PylithScalar _jacobianLumped[]; ///< Lumped Jacobian.
 
-  static const double _orientation[]; ///< Expected values for fault orientation.
-  static const double _area[]; ///< Expected values for fault area.
-  static const double _residual[]; ///< Expected values from residual calculation.
-  static const double _residualIncr[]; ///< Expected values from residual calculation using solution increment.
-  static const double _jacobian[]; ///< Expected values from Jacobian calculation.
+  static const PylithScalar _orientation[]; ///< Expected values for fault orientation.
+  static const PylithScalar _area[]; ///< Expected values for fault area.
+  static const PylithScalar _residual[]; ///< Expected values from residual calculation.
+  static const PylithScalar _residualIncr[]; ///< Expected values from residual calculation using solution increment.
+  static const PylithScalar _jacobian[]; ///< Expected values from Jacobian calculation.
 
   static const int _verticesFault[]; ///< Expected points for Fault vertices
   static const int _verticesLagrange[]; ///< Expected points for Lagrange vertices

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/adjustsoln.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -3,358 +3,160 @@
 
 # ----------------------------------------------------------------------
 if test == "line2":
-    C = 1.0
-    dk = 1.89546413727; l = 1.5
-    Ai = 2.2; ri = 7.5; ui = 7.2; dui = 1.2
-    Aj = 2.4; rj = -7.5; uj = 7.4; duj = 1.4
+    jL = 1.0; rL = +1.69546413727;
+    jN = 2.2; duN = 1.2
+    jP = 2.4; duP = 1.4
 
-    Si = (Ai * Aj) / (Ai + Aj)
-    Aru = ri/Ai - rj/Aj + ui - uj
-    Aruslip = -C*Aru - dk 
-    dlp = Si * Aruslip
+    Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+    duL = Sinv * (-rL + jL*(duP-duN));
 
-    ddui = +C / Ai * dlp
-    dduj = -C / Aj * dlp
+    dduN = jL / jN * duL
+    dduP = -jL / jP * duL
 
     #print "Aru",Aru
     #print "Aruslip",Aruslip
     #print "Si",Si
     #print "dlip",dlp
 
-    print dui+ddui,duj+dduj,dlp
+    print duN+dduN,duP+dduP,duL
 
 # ----------------------------------------------------------------------
 elif test == "tri3" or test == "quad4":
 
     if test == "tri3":
 
-        Cpx = 0.0
-        Cpy = -1.0
-        Cqx = -1.0
-        Cqy = 0.0
-
         if vertex == 0:
-            # Lagrange vertex 8, vertex i: 3, vertex j: 6
-            dkp = 1.89546413727; lp = 3.6
-            dkq = 0.08241148423; lq = 4.6
-            
-            # vertex i
-            Aix = 1.2; Aiy = 1.2
-            rix = -9.6; riy = -8.6
-            uix = 8.2; uiy = 9.2
-            duix = 3.2; duiy = 4.2
-            
-            # vertex j
-            Ajx = 1.5; Ajy = 1.5
-            rjx = +9.6; rjy = +8.6
-            ujx = 8.5; ujy = 9.5
-            dujx = 3.5; dujy = 4.5
-            
+            # Lagrange vertex 8, vertex N: 3, vertex P: 6
+            jL = 1.0
+            rLx = -(8.5-8.2) - (0.08241148423)
+            rLy = -(9.5-9.2) - (1.89546413727)
+            jN = 1.2; duNx = 3.2; duNy = 4.2;
+            jP = 1.5; duPx = 3.5; duPy = 4.5;
+
         elif vertex == 1:
-            # Lagrange vertex 9, vertex i: 4, vertex j: 7
-            dkp = 1.77538035254; lp = 3.8
-            dkq = 0.14794836271; lq = 4.8
+            # Lagrange vertex 9, vertex N: 4, vertex P: 7
+            jL = 1.0
+            rLx = -(8.7-8.3) - (0.14794836271)
+            rLy = -(9.7-9.3) - (1.77538035254)
+            jN = 1.3; duNx = 3.3; duNy = 4.3;
+            jP = 1.7; duPx = 3.7; duPy = 4.7;
             
-            # vertex i
-            Aix = 1.3; Aiy = 1.3
-            rix = -9.8; riy = -8.8
-            uix = 8.3; uiy = 9.3
-            duix = 3.3; duiy = 4.3
-            
-            # vertex j
-            Ajx = 1.7; Ajy = 1.7
-            rjx = +9.8; rjy = +8.8
-            ujx = 8.7; ujy = 9.7
-            dujx = 3.7; dujy = 4.7
-            
     elif test == "quad4":
 
-        Cpx = 0.0
-        Cpy = 1.0
-        Cqx = 1.0
-        Cqy = 0.0
-        
         if vertex == 0:
-            # Lagrange vertex 10, vertex i: 4, vertex j: 8
-            dkp = 1.77538035254; lp = 3.8
-            dkq = 0.14794836271; lq = 4.8
+            # Lagrange vertex 10, vertex N: 4, vertex P: 8
+            jL = 1.0
+            rLx = -(8.7-8.3) + 0.14794836271
+            rLy = -(9.7-9.3) + 1.77538035254
+            jN = 1.3; duNx = 3.3; duNy = 4.3;
+            jP = 1.7; duPx = 3.7; duPy = 4.7;
             
-            # vertex i: 4
-            Aix = 1.3; Aiy = 1.3
-            rix = +9.8; riy = +8.8
-            uix = 8.3; uiy = 9.3
-            duix = 3.3; duiy = 4.3
-            
-            # vertex j: 8
-            Ajx = 1.7; Ajy = 1.7
-            rjx = -9.8; rjy = -8.8
-            ujx = 8.7; ujy = 9.7
-            dujx = 3.7; dujy = 4.7
-            
         elif vertex == 1:
-            # Lagrange vertex 11, vertex i: 5, vertex j: 9
-            dkp = 1.89546413727; lp = 3.0
-            dkq = 0.08241148423; lq = 4.0
-            
-            # vertex i: 5
-            Aix = 1.4; Aiy = 1.4
-            rix = +9.0; riy = +8.0
-            uix = 8.4; uiy = 9.4
-            duix = 3.4; duiy = 4.4
-            
-            # vertex j: 9
-            Ajx = 1.9; Ajy = 1.9
-            rjx = -9.0; rjy = -8.0
-            ujx = 8.9; ujy = 9.9
-            dujx = 3.9; dujy = 4.9
+            # Lagrange vertex 11, vertex N: 5, vertex P: 9
+            jL = 1.0
+            rLx = -(8.9-8.4) + 0.08241148423
+            rLy = -(9.9-9.4) + 1.89546413727
+            jN = 1.4; duNx = 3.4; duNy = 4.4;
+            jP = 1.9; duPx = 3.9; duPy = 4.9;
 
-    Sppi = Aix*Ajx / (Aix + Ajx)
-    Sqqi = Aix*Ajx / (Aix + Ajx)
+    Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+    duLx = Sinv * (-rLx + jL*(duPx - duNx))
+    duLy = Sinv * (-rLy + jL*(duPy - duNy))
 
-    Arux = rix / Aix - rjx / Ajx + uix - ujx
-    Aruy = riy / Aiy - rjy / Ajy + uiy - ujy
+    dduNx = jL / jN * duLx
+    dduNy = jL / jN * duLy
 
-    Arup = Cpx*Arux + Cpy*Aruy
-    Aruq = Cqx*Arux + Cqy*Aruy
-    Arupslip = -Arup - dkp 
-    Aruqslip = -Aruq - dkq 
+    dduPx = -jL / jP * duLx
+    dduPy = -jL / jP * duLy
+            
+    print duNx+dduNx,duNy+dduNy
+    print duPx+dduPx,duPy+dduPy
+    print duLx,duLy
 
-    dlp = Sppi * Arupslip
-    dlq = Sqqi * Aruqslip
-
-    dduix = +1.0/Aix * (Cpx*dlp + Cqx*dlq)
-    dduiy = +1.0/Aiy * (Cpy*dlp + Cqy*dlq)
-
-    ddujx = -1.0/Ajx * (Cpx*dlp + Cqx*dlq)
-    ddujy = -1.0/Ajy * (Cpy*dlp + Cqy*dlq)
-
-    print "Sppi",Sppi
-    print "Sqqi",Sqqi
-
-    print "Arup",Arup
-    print "Aruq",Aruq
-
-    print "Arupslip",Arupslip
-    print "Aruqslip",Aruqslip
-
-    print "dlp",dlp
-    print "dlq",dlq
-
-    print "dduix:",dduix
-    print "dduiy:",dduiy
-
-    print "ddujx:",ddujx
-    print "ddujy:",ddujy
-
-    print duix+dduix,duiy+dduiy
-    print dujx+ddujx,dujy+ddujy
-    print dlp,dlq
-
 # ----------------------------------------------------------------------
 elif test == "tet4" or test == "hex8":
 
     if test == "tet4":
 
-        Cpx = 0.0
-        Cpy = 1.0
-        Cpz = 0.0
-        Cqx = 0.0
-        Cqy = 0.0
-        Cqz = 1.0
-        Crx = 1.0
-        Cry = 0.0
-        Crz = 0.0
-
         if vertex == 0:
-            # Lagrange vertex 10, vertex i: 3, vertex j: 7
-            dkp = 1.82575588523; lp = 3.7
-            dkq = -0.55566483464; lq = 4.7
-            dkr = 0.07938069066; lr = 5.7
-            
-            # vertex i: 3
-            Aix = 1.2; Aiy = 1.2; Aiz = 1.2
-            rix = +9.7; riy = +7.7; riz = +8.7
-            uix = 7.2; uiy = 8.2; uiz = 9.2
-            duix = 3.2; duiy = 4.2; duiz = 5.2
-            
-            # vertex j: 7
-            Ajx = 1.6; Ajy = 1.6; Ajz = 1.6
-            rjx = -9.7; rjy = -7.7; rjz = -8.7
-            ujx = 7.6; ujy = 8.6; ujz = 9.6
-            dujx = 3.6; dujy = 4.6; dujz = 5.6
-            
+            # Lagrange vertex 10, vertex N: 3, vertex P: 7
+            jL = 1.0/3.0
+            rLx = -1.0/3.0*(7.6-7.2 + -0.07938069066)
+            rLy = -1.0/3.0*(8.6-8.2 + -1.82575588523)
+            rLz = -1.0/3.0*(9.6-9.2 + 0.55566483464)
+            jN = 1.2; duNx = 3.2; duNy = 4.2; duNz = 5.2;
+            jP = 1.6; duPx = 3.6; duPy = 4.6; duPz = 5.6;
+
         elif vertex == 1:
-            # Lagrange vertex 11, vertex i: 4, vertex j: 8
-            dkp = 1.69682900001; lp = 3.9
-            dkq = -0.56560966667; lq = 4.9
-            dkr = 0.14140241667; lr = 5.9
+            # Lagrange vertex 11, vertex N: 4, vertex P: 8
+            jL = 1.0/3.0
+            rLx = -1.0/3.0*(7.8-7.3 + -0.14140241667)
+            rLy = -1.0/3.0*(8.8-8.3 + -1.69682900001)
+            rLz = -1.0/3.0*(9.8-9.3 + 0.56560966667)
+            jN = 1.3; duNx = 3.3; duNy = 4.3; duNz = 5.3;
+            jP = 1.8; duPx = 3.8; duPy = 4.8; duPz = 5.8;
             
-            # vertex i: 4
-            Aix = 1.3; Aiy = 1.3; Aiz = 1.3
-            rix = +9.9; riy = +7.9; riz = +8.9
-            uix = 7.3; uiy = 8.3; uiz = 9.3
-            duix = 3.3; duiy = 4.3; duiz = 5.3
-            
-            # vertex j: 8
-            Ajx = 1.8; Ajy = 1.8; Ajz = 1.8
-            rjx = -9.9; rjy = -7.9; rjz = -8.9
-            ujx = 7.8; ujy = 8.8; ujz = 9.8
-            dujx = 3.8; dujy = 4.8; dujz = 5.8
-            
         elif vertex == 2:
-            # Lagrange vertex 12, vertex i: 5, vertex j: 9
-            dkp = 1.51709826228; lp = 3.1
-            dkq = -0.54615537442; lq = 4.1
-            dkr = 0.18205179147; lr = 5.1
+            # Lagrange vertex 12, vertex N: 5, vertex P: 9
+            jL = 1.0/3.0
+            rLx = -1.0/3.0*(7.0-7.4 + -0.18205179147)
+            rLy = -1.0/3.0*(8.0-8.4 + -1.51709826228)
+            rLz = -1.0/3.0*(9.0-9.4 + 0.54615537442)
+            jN = 1.4; duNx = 3.4; duNy = 4.4; duNz = 5.4;
+            jP = 1.0; duPx = 3.0; duPy = 4.0; duPz = 5.0;
             
-            # vertex i: 5
-            Aix = 1.4; Aiy = 1.4; Aiz = 1.4
-            rix = +9.1; riy = +7.1; riz = +8.1
-            uix = 7.4; uiy = 8.4; uiz = 9.4
-            duix = 3.4; duiy = 4.4; duiz = 5.4
-            
-            # vertex j: 9
-            Ajx = 1.0; Ajy = 1.0; Ajz = 1.0
-            rjx = -9.1; rjy = -7.1; rjz = -8.1
-            ujx = 7.0; ujy = 8.0; ujz = 9.0
-            dujx = 3.0; dujy = 4.0; dujz = 5.0
-            
     elif test == "hex8":
 
-        Cpx = 0.0
-        Cpy = -1.0
-        Cpz = 0.0
-        Cqx = 0.0
-        Cqy = 0.0
-        Cqz = +1.0
-        Crx = -1.0
-        Cry = 0.0
-        Crz = 0.0
-
         if vertex == 0:
-            # Lagrange vertex 18, vertex i: 6, vertex j: 14
-            dkp = 1.82575588523; lp = 3.4
-            dkq = -0.55566483464; lq = 4.4
-            dkr = 0.07938069066; lr = 5.4
+            # Lagrange vertex 18, vertex N: 6, vertex P: 14
+            jL = 1.0
+            rLx = -(5.3-4.5+0.07938069066)
+            rLy = -(7.3-6.5+1.82575588523)
+            rLz = -(9.3-8.5+0.55566483464)
+            jN = 1.5; duNx = 3.5; duNy = 4.5; duNz = 5.5;
+            jP = 1.3; duPx = 3.3; duPy = 4.3; duPz = 5.3;
             
-            # vertex i: 6
-            Aix = 1.5; Aiy = 1.5; Aiz = 1.5
-            rix = -9.4; riy = -5.4; riz = +7.4
-            uix = 4.5; uiy = 6.5; uiz = 8.5
-            duix = 3.5; duiy = 4.5; duiz = 5.5
-            
-            # vertex j: 14
-            Ajx = 1.3; Ajy = 1.3; Ajz = 1.3
-            rjx = +9.4; rjy = +5.4; rjz = -7.4
-            ujx = 5.3; ujy = 7.3; ujz = 9.3
-            dujx = 3.3; dujy = 4.3; dujz = 5.3
-            
         elif vertex == 1:
-            # Lagrange vertex 19, vertex i: 7, vertex j: 15
-            dkp = 1.69682900001; lp = 3.6
-            dkq = -0.56560966667; lq = 4.6
-            dkr = 0.14140241667; lr = 5.6
+            # Lagrange vertex 19, vertex N: 7, vertex P: 15
+            jL = 1.0
+            rLx = -(5.5-4.6+0.14140241667)
+            rLy = -(7.5-6.6+1.69682900001)
+            rLz = -(9.5-8.6+0.56560966667)
+            jN = 1.6; duNx = 3.6; duNy = 4.6; duNz = 5.6;
+            jP = 1.5; duPx = 3.5; duPy = 4.5; duPz = 5.5;
             
-            # vertex i: 7
-            Aix = 1.6; Aiy = 1.6; Aiz = 1.6
-            rix = -9.6; riy = -5.6; riz = +7.6
-            uix = 4.6; uiy = 6.6; uiz = 8.6
-            duix = 3.6; duiy = 4.6; duiz = 5.6
-            
-            # vertex j: 15
-            Ajx = 1.5; Ajy = 1.5; Ajz = 1.5
-            rjx = +9.6; rjy = +5.6; rjz = -7.6
-            ujx = 5.5; ujy = 7.5; ujz = 9.5
-            dujx = 3.5; dujy = 4.5; dujz = 5.5
-            
         elif vertex == 2:
-            # Lagrange vertex 20, vertex i: 8, vertex j: 16
-            dkp = 1.51709826228; lp = 3.8
-            dkq = -0.54615537442; lq = 4.8
-            dkr = 0.18205179147; lr = 5.8
+            # Lagrange vertex 20, vertex N: 8, vertex P: 16
+            jL = 1.0
+            rLx = -(5.7-4.7+0.18205179147)
+            rLy = -(7.7-6.7+1.51709826228)
+            rLz = -(9.7-8.7+0.54615537442)
+            jN = 1.7; duNx = 3.7; duNy = 4.7; duNz = 5.7;
+            jP = 1.7; duPx = 3.7; duPy = 4.7; duPz = 5.7;
             
-            # vertex i: 8
-            Aix = 1.7; Aiy = 1.7; Aiz = 1.7
-            rix = -9.8; riy = -5.8; riz = +7.8
-            uix = 4.7; uiy = 6.7; uiz = 8.7
-            duix = 3.7; duiy = 4.7; duiz = 5.7
-            
-            # vertex j: 16
-            Ajx = 1.7; Ajy = 1.7; Ajz = 1.7
-            rjx = +9.8; rjy = +5.8; rjz = -7.8
-            ujx = 5.7; ujy = 7.7; ujz = 9.7
-            dujx = 3.7; dujy = 4.7; dujz = 5.7
-            
         elif vertex == 3:
-            # Lagrange vertex 21, vertex i: 9, vertex j: 17
-            dkp = 1.29378670385; lp = 3.0
-            dkq = -0.49761027071; lq = 4.0
-            dkr = 0.19904410828; lr = 5.0
+            # Lagrange vertex 21, vertex N: 9, vertex P: 17
+            jL = 1.0
+            rLx = -(5.9-4.8+0.19904410828)
+            rLy = -(7.9-6.8+1.29378670385)
+            rLz = -(9.9-8.8+0.49761027071)
+            jN = 1.8; duNx = 3.8; duNy = 4.8; duNz = 5.8;
+            jP = 1.9; duPx = 3.9; duPy = 4.9; duPz = 5.9;
             
-            # vertex i: 9
-            Aix = 1.8; Aiy = 1.8; Aiz = 1.8
-            rix = -9.0; riy = -5.0; riz = +7.0
-            uix = 4.8; uiy = 6.8; uiz = 8.8
-            duix = 3.8; duiy = 4.8; duiz = 5.8
-            
-            # vertex j: 17
-            Ajx = 1.9; Ajy = 1.9; Ajz = 1.9
-            rjx = +9.0; rjy = +5.0; rjz = -7.0
-            ujx = 5.9; ujy = 7.9; ujz = 9.9
-            dujx = 3.9; dujy = 4.9; dujz = 5.9
-            
-    Sppi = Aix*Ajx / (Aix + Ajx)
-    Sqqi = Aiy*Ajy / (Aiy + Ajy)
-    Srri = Aiz*Ajz / (Aiz + Ajz)
+    Sinv = 1.0/(jL**2 * (1.0/jN + 1.0/jP))
+    duLx = Sinv * (-rLx + jL*(duPx - duNx))
+    duLy = Sinv * (-rLy + jL*(duPy - duNy))
+    duLz = Sinv * (-rLz + jL*(duPz - duNz))
 
-    Arux = rix / Aix - rjx / Ajx + uix - ujx
-    Aruy = riy / Aiy - rjy / Ajy + uiy - ujy
-    Aruz = riz / Aiz - rjz / Ajz + uiz - ujz
+    dduNx = jL / jN * duLx
+    dduNy = jL / jN * duLy
+    dduNz = jL / jN * duLz
 
-    Arup = Cpx*Arux + Cpy*Aruy + Cpz*Aruz
-    Aruq = Cqx*Arux + Cqy*Aruy + Cqz*Aruz
-    Arur = Crx*Arux + Cry*Aruy + Crz*Aruz
-    Arupslip = -Arup - dkp
-    Aruqslip = -Aruq - dkq
-    Arurslip = -Arur - dkr
+    dduPx = -jL / jP * duLx
+    dduPy = -jL / jP * duLy
+    dduPz = -jL / jP * duLz
+            
+    print duNx+dduNx,duNy+dduNy, duNz+dduNz
+    print duPx+dduPx,duPy+dduPy, duPz+dduPz
+    print duLx,duLy, duLz
 
-    dlp = Sppi * Arupslip
-    dlq = Sqqi * Aruqslip
-    dlr = Srri * Arurslip
-
-    dduix = +1.0/Aix * (Cpx*dlp + Cqx*dlq + Crx*dlr)
-    dduiy = +1.0/Aiy * (Cpy*dlp + Cqy*dlq + Cry*dlr)
-    dduiz = +1.0/Aiy * (Cpz*dlp + Cqz*dlq + Crz*dlr)
-
-    ddujx = -1.0/Ajx * (Cpx*dlp + Cqx*dlq + Crx*dlr)
-    ddujy = -1.0/Ajy * (Cpy*dlp + Cqy*dlq + Cry*dlr)
-    ddujz = -1.0/Ajz * (Cpz*dlp + Cqz*dlq + Crz*dlr)
-
-#     print "Sppi",Sppi
-#     print "Sqqi",Sqqi
-#     print "Srri",Srri
-
-#     print "Arup",Arup
-#     print "Aruq",Aruq
-#     print "Arur",Arur
-
-#     print "Arupslip",Arupslip
-#     print "Aruqslip",Aruqslip
-#     print "Arurslip",Arurslip
-
-#     print "dlp",dlp
-#     print "dlq",dlq
-#     print "dlr",dlr
-
-#     print "dduix:",dduix
-#     print "dduiy:",dduiy
-#     print "dduiz:",dduiz
-
-#     print "ddujx:",ddujx
-#     print "ddujy:",ddujy
-#     print "ddujz:",ddujz
-
-    print duix+dduix,duiy+dduiy,duiz+dduiz
-    print dujx+ddujx,dujy+ddujy,dujz+ddujz
-    print dlp,dlq,dlr
-

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/cohesivedyn.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -1,6 +1,6 @@
-cell = "hex8"
-dim = "3d"
-testCase = "slip"
+cell = "tri3d"
+dim = "2d"
+testCase = "open"
 
 import numpy
 
@@ -22,6 +22,28 @@
 
 
 # ----------------------------------------------------------------------
+def globalToFault(v, R):
+    """
+    Convert vector from global coordinate system to fault coordinate system.
+    """
+    (m,ndof) = v.shape
+
+    vF = numpy.dot(C, v.reshape(m*ndof,1))
+    return vF.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
+def faultToGlobal(v, R):
+    """
+    Convert vector from fault coordinate system to global coordinate system.
+    """
+    (m,ndof) = v.shape
+
+    vG = numpy.dot(C.transpose(), v.reshape(m*ndof,1))
+    return vG.reshape((m, ndof))
+
+
+# ----------------------------------------------------------------------
 if dim == "2d":
     if cell == "tri3":
         dlagrange1 = numpy.zeros(2)
@@ -34,53 +56,56 @@
 
         fieldT = numpy.array([[8.6, 9.6],
                               [8.8, 9.8]])
-        fieldIncr = numpy.array([[9.6, -10.6],
-                                 [9.8, -10.8]])
-        area = numpy.array([1.0, 1.0])
+        fieldIncr = numpy.array([[1.6, 2.6],
+                                 [1.8, 2.8]])
+        L = numpy.array([[1.0, 0.0, 0.0, 0.0,],
+                         [0.0, 1.0, 0.0, 0.0,],
+                         [0.0, 0.0, 1.0, 0.0,],
+                         [0.0, 0.0, 0.0, 1.0,],]);
         C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
                          [-1.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0,],
                          [0.0, 0.0, -1.0, 0.0,],]);
     
         jacobianN = numpy.array(
-            [[  1.0,  5.2,  4.2,  5.3,],
-             [  6.2,  1.0,  6.3,  7.2,],
-             [  8.2,  9.2,  1.0,  9.3,],
-             [ 10.2, 11.2, 10.3,  1.0,],])
+            [[  4.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  5.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  4.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  5.1,],])
 
         jacobianP = numpy.array(
-            [[  1.0, 17.5, 16.5, 17.6,],
-             [ 18.5,  1.0, 18.6, 19.5,],
-             [ 20.5, 21.5,  1.0, 21.6,],
-             [ 22.5, 23.5, 22.6,  1.0,],])
+            [[  5.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  4.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  5.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  4.1,],])
 
         disp = numpy.array([[ 8.1, 9.1,],
                             [ 8.2, 9.2,],
                             [ 8.3, 9.3,],
                             [ 8.4, 9.4,],
-                            [ 8.5, 9.5,],
-                            [ 8.7, 9.7,],
+                            [ 8.2, 9.2,],
+                            [ 8.3, 9.3,],
                             [ 8.6, 9.6,],
                             [ 8.8, 9.8,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.6, -10.6,],
-                                    [ 9.8, -10.8,],])            
+            dispIncr = numpy.array([[ 9.1, 7.1,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ 9.4, 7.4,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.8, 2.8,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.8, 10.8,],])
+            dispIncr = numpy.array([[ 9.1, 7.1,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ 9.4, 7.4,],
+                                    [ 9.2, 7.2,],
+                                    [ 9.3, 7.3,],
+                                    [ -10.6, 2.6,],
+                                    [ -10.8, 2.8,],])            
 
 
     elif cell == "tri3d":
@@ -92,13 +117,20 @@
         m = 6
         DOF = 2
 
-        fieldT = numpy.array([[6.8, 8.8],
-                              [6.0, 8.0],
-                              [7.2, 9.2]])
-        fieldIncr = numpy.array([[9.8, -10.8],
-                                 [9.0, -10.0],
-                                 [9.2, -10.2]])
-        area = numpy.array([2.0, 1.0, 1.0])
+        fieldT = numpy.array([[-3.8, 4.8],
+                              [3.0, 4.0],
+                              [3.2, 4.2]])
+        fieldIncr = numpy.array([[1.8, 0.8],
+                                 [1.0, 0.1],
+                                 [1.2, 0.2]])
+
+        L = numpy.array([[2.0, 0.0, 0.0, 0.0, 0.0, 0.0],
+                         [0.0, 2.0, 0.0, 0.0, 0.0, 0.0],
+                         [0.0, 0.0, 1.0, 0.0, 0.0, 0.0],
+                         [0.0, 0.0, 0.0, 1.0, 0.0, 0.0],
+                         [0.0, 0.0, 0.0, 0.0, 1.0, 0.0],
+                         [0.0, 0.0, 0.0, 0.0, 0.0, 1.0]])
+
         C = numpy.array([[+0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
                          [-0.70710678118654757, -0.70710678118654757, 0.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0, 0.0, 0.0,],
@@ -107,20 +139,20 @@
                          [0.0, 0.0, 0.0, 0.0, 0.0, -1.0,],])
     
         jacobianN = numpy.array(
-            [[6.0, 7.3, 6.9, 7.4, 6.7, 7.6],
-             [3.1, 5.2, 3.2, 5.2, 3.4, 5.3],
-             [3.9, 2.7, 3.8, 2.8, 0.0, 0.0],
-             [4.1, 6.6, 4.2, 6.2, 0.0, 0.0],
-             [7.9, 8.1, 0.0, 0.0, 7.4, 8.5],
-             [6.4, 3.4, 0.0, 0.0, 6.1, 3.8]])
+            [[+6.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+             [-1.0, +6.1, -0.9, -0.8, -0.7, -0.6],
+             [-1.1, -0.9, +6.2, -2.1,  0.0,  0.0],
+             [-1.2, -0.8, -2.1, +6.3,  0.0,  0.0],
+             [-1.3, -0.7,  0.0,  0.0, +6.4, -1.1],
+             [-1.4, -0.6,  0.0,  0.0, -1.1, +6.5]])
 
         jacobianP = numpy.array(
-            [[1.6, 4.1, 1.7, 4.2, 1.8, 4.3],
-             [4.6, 4.8, 4.7, 4.4, 4.8, 4.2],
-             [6.9, 5.3, 7.0, 5.9, 0.0, 0.0],
-             [7.2, 6.6, 7.3, 6.5, 0.0, 0.0],
-             [8.4, 7.8, 0.0, 0.0, 8.3, 7.1],
-             [6.3, 8.6, 0.0, 0.0, 4.7, 8.7]])
+            [[+5.0, -1.0, -1.1, -1.2, -1.3, -1.4],
+             [-1.0, +5.1, -0.9, -0.8, -0.7, -0.6],
+             [-1.1, -0.9, +5.2, -2.1,  0.0,  0.0],
+             [-1.2, -0.8, -2.1, +5.3,  0.0,  0.0],
+             [-1.3, -0.7,  0.0,  0.0, +5.4, -1.1],
+             [-1.4, -0.6,  0.0,  0.0, -1.1, +5.5]])
 
         disp = numpy.array([[ 6.1, 8.1,],
                             [ 6.2, 8.2,],
@@ -128,39 +160,39 @@
                             [ 6.4, 8.4,],
                             [ 6.5, 8.5,],
                             [ 6.6, 8.6,],
-                            [ 6.7, 8.7,],
-                            [ 6.9, 8.9,],
-                            [ 7.1, 9.1,],
-                            [ 6.8, 8.8,],
-                            [ 6.0, 8.0,],
-                            [ 7.2, 9.2,],])
+                            [ 6.2, 8.2,],
+                            [ 6.3, 8.3,],
+                            [ 6.5, 8.5,],
+                            [-3.8, 4.8,],
+                            [ 3.0, 4.0,],
+                            [ 3.2, 4.2,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.1, 10.1,],
-                                    [ 9.8, -10.8,],
-                                    [ 9.0, -10.0,],
-                                    [ 9.2, -10.2,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.8, 0.8,],
+                                    [ 1.0, 0.1,],
+                                    [ 1.2, 0.2,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.1, 10.1,],
-                                    [ 9.8, 10.8,],
-                                    [ 9.0, 10.0,],
-                                    [ 9.2, 10.2,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.5, 2.5,],
+                                    [-10.8, 0.8,],
+                                    [-10.0, 0.1,],
+                                    [ 1.2, -10.2,],])            
 
 
     elif cell == "quad4":
@@ -174,25 +206,28 @@
 
         fieldT = numpy.array([[8.8, 9.8],
                               [8.0, 9.0]])
-        fieldIncr = numpy.array([[-9.8, -10.8],
-                                 [-9.0, -10.0]])
-        area = numpy.array([1.0, 1.0])
+        fieldIncr = numpy.array([[1.8, 2.8],
+                                 [1.0, 2.0]])
+        L = numpy.array([[1.0, 0.0, 0.0, 0.0,],
+                         [0.0, 1.0, 0.0, 0.0,],
+                         [0.0, 0.0, 1.0, 0.0,],
+                         [0.0, 0.0, 0.0, 1.0,],]);
         C = numpy.array([[0.0, -1.0, 0.0, 0.0,],
                          [-1.0, 0.0, 0.0, 0.0,],
                          [0.0, 0.0, 0.0, -1.0,],
                          [0.0, 0.0, -1.0, 0.0,],]);
     
         jacobianN = numpy.array(
-            [[  1.0,  8.1,  8.2,  8.3,],
-             [  9.9,  1.0, 10.0, 10.1,],
-             [ 11.7, 11.8,  1.0, 11.9,],
-             [ 13.5, 13.6, 13.7,  1.0,],])
+            [[  4.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  5.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  4.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  5.1,],])
 
         jacobianP = numpy.array(
-            [[  1.0, 23.7, 23.8, 23.9,],
-             [ 25.5,  1.0, 25.6, 25.7,],
-             [ 27.3, 27.4,  1.0, 27.5,],
-             [ 29.1, 29.2, 29.3,  1.0,],])
+            [[  5.0,  -1.2,  -2.2,  -2.3,],
+             [  -1.2,  4.0,  -1.3,  -3.2,],
+             [  -2.2,  -1.3,  5.1,  -4.3,],
+             [  -2.3,  -3.2,  -4.3,  4.1,],])
 
         disp = numpy.array([[ 8.1, 9.1,],
                             [ 8.2, 9.2,],
@@ -200,41 +235,43 @@
                             [ 8.4, 9.4,],
                             [ 8.5, 9.5,],
                             [ 8.6, 9.6,],
-                            [ 8.7, 9.7,],
-                            [ 8.9, 9.9,],
+                            [ 8.3, 9.3,],
+                            [ 8.4, 9.4,],
                             [ 8.8, 9.8,],
                             [ 8.0, 9.0,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ -9.8, -10.8,],
-                                    [ -9.0, -10.0,],])
-          
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.8, 2.8,],
+                                    [ 1.0, 2.0,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 9.1, 10.1,],
-                                    [ 9.2, 10.2,],
-                                    [ 9.3, 10.3,],
-                                    [ 9.4, 10.4,],
-                                    [ 9.5, 10.5,],
-                                    [ 9.6, 10.6,],
-                                    [ 9.7, 10.7,],
-                                    [ 9.9, 10.9,],
-                                    [ 9.8, 10.8,],
-                                    [ 9.0, 10.0,],])
+            dispIncr = numpy.array([[ 1.1, 2.1,],
+                                    [ 1.2, 2.2,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ 1.5, 2.5,],
+                                    [ 1.6, 2.6,],
+                                    [ 1.3, 2.3,],
+                                    [ 1.4, 2.4,],
+                                    [ -10.8, 2.8,],
+                                    [ -10.0, 2.0,],])            
 
+
     # ------------------------------------------------------------------
     fieldTpdt = fieldT + fieldIncr
 
-    tractionShear = abs(fieldTpdt[:,0]) / area
-    tractionNormal = fieldTpdt[:,1] / area
+    fieldTpdt = globalToFault(fieldTpdt, C)
 
+    tractionShear = abs(fieldTpdt[:,0])
+    tractionNormal = fieldTpdt[:,1]
+
     print "tractionShear",tractionShear
     print "tractionNormal",tractionNormal
 
@@ -242,38 +279,39 @@
 
     print "friction",friction
 
-    lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
-
-    lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
-
-    print "lagrangeIncr0",lagrangeIncr0
-
-    dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
-    
+    dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+                           
     print "dlagrange0",dlagrange0
 
     if testCase == "slip": 
         dLagrange = numpy.vstack((dlagrange0, dlagrange1))
         dLagrange = numpy.transpose(dLagrange)
-        dLagrange = numpy.reshape(dLagrange, m)
+        dLagrange = faultToGlobal(dLagrange, C).reshape(m)
     elif testCase == "open":
         dLagrange = numpy.reshape(disp+dispIncr, n)
-        dLagrange = dLagrange[indexL]
+        dLagrange = -dLagrange[indexL]
 
     print "dLagrange \n", dLagrange
 
-    RHS = numpy.dot(numpy.transpose(C),dLagrange)
-    duN = -numpy.dot(inv(jacobianN),RHS)
-    duP = numpy.dot(inv(jacobianP),RHS)
+    RHS = numpy.dot(numpy.transpose(L),dLagrange)
+    print "RHS",RHS
+    duN = numpy.dot(inv(jacobianN),RHS)
+    duP = -numpy.dot(inv(jacobianP),RHS)
     
     dispRel = duP - duN
 
-    slipVertex = numpy.dot(C,dispRel)
+    dispTpdt = disp + dispIncr
+    dispTpdt = numpy.reshape(dispTpdt, n)
+
+    slipVertex = dispRel + dispTpdt[indexP]-dispTpdt[indexN]
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
     if testCase == "slip":
         slipVertex[:,1] = 0
     mask = slipVertex[:,1] < 0.0
     slipVertex[mask,1] = 0
+    print "slip",slipVertex
+    slipVertex = faultToGlobal(slipVertex, C)
     slipVertex = numpy.reshape(slipVertex, m)
 
     print "duN \n", duN
@@ -281,15 +319,13 @@
 
     dispIncrE = dispIncr
     dispIncrE = numpy.reshape(dispIncrE, n)
+    dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+    dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+    dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
 
-    dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
-    dispIncrE[indexN] = dispIncrE[indexN] - \
-        0.5*numpy.dot(C.transpose(), slipVertex)
-    dispIncrE[indexP] = dispIncrE[indexP] + \
-        0.5*numpy.dot(C.transpose(), slipVertex)
-
-    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
 
     print "dispIncrE\n", printdata(dispIncrE)
     print "slipVertexE\n", printdata(slipVertex)
@@ -310,69 +346,86 @@
         fieldT = numpy.array([[7.7, 8.7, 9.7],
                               [7.9, 8.9, 9.9],
                               [7.1, 8.1, 9.1]])
-        fieldIncr = numpy.array([[8.7, 9.7, -10.7],
-                                 [8.9, 9.9, -10.9],
-                                 [8.1, 9.1, -10.1]])
-        area = numpy.array([1.0/3.0, 1.0/3.0, 1.0/3.0])
+        fieldIncr = numpy.array([[9.7, 2.7, 3.7],
+                                 [9.9, 2.9, 3.9],
+                                 [9.1, 2.1, 3.1]])
         
+        L = numpy.array([[1.0/3.0,0,0, 0.0,0,0, 0.0,0,0,],
+                         [0,1.0/3.0,0, 0,0.0,0, 0,0.0,0,],
+                         [0,0,1.0/3.0, 0,0,0.0, 0,0,0.0,],
+                         [0.0,0,0, 1.0/3.0,0,0, 0.0,0,0,],
+                         [0,0.0,0, 0,1.0/3.0,0, 0,0.0,0,],
+                         [0,0,0.0, 0,0,1.0/3.0, 0,0,0.0,],
+                         [0.0,0,0, 0.0,0,0, 1.0/3.0,0,0,],
+                         [0,0.0,0, 0,0.0,0, 0,1.0/3.0,0,],
+                         [0,0,0.0, 0,0,0.0, 0,0,1.0/3.0,]])
+
+        Cv = numpy.array([[ 0, -1, 0,],
+                          [ 0, 0, +1,],
+                          [ -1, 0, 0,],])
+        Zv = numpy.zeros([3,3])
+        C = numpy.vstack( (numpy.hstack((Cv, Zv, Zv)),
+                           numpy.hstack((Zv, Cv, Zv)),
+                           numpy.hstack((Zv, Zv, Cv)) ) )
+
         jacobianN = numpy.array(
-            [[1.0, 10.0, 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7],
-             [13.1, 1.0, 13.2, 13.3, 13.4, 13.5, 13.6, 13.7, 13.8], 
-             [16.2, 16.3, 1.0, 16.4, 16.5, 16.6, 16.7, 16.8, 16.9],
-             [19.3, 19.4, 19.5, 1.0, 19.6, 19.7, 19.8, 19.9, 20.0],
-             [22.4, 22.5, 22.6, 22.7, 1.0, 22.8, 22.9, 23.0, 23.1],
-             [25.5, 25.6, 25.7, 25.8, 25.9, 1.0, 26.0, 26.1, 26.2],
-             [28.6, 28.7, 28.8, 28.9, 29.0, 29.1, 1.0, 29.2, 29.3],
-             [31.7, 31.8, 31.9, 32.0, 32.1, 32.2, 32.3, 1.0, 32.4],
-             [34.8, 34.9, 35.0, 35.1, 35.2, 35.3, 35.4, 35.5, 1.0]])
+            [[ 4.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+             [-1.1,  4.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9], 
+             [-1.2, -2.3,  4.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+             [-1.3, -2.4, -1.0,  4.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+             [-1.4, -2.5, -1.1, -0.2,  4.4, -0.9, -0.8, -0.7, -0.5],
+             [-1.5, -2.6, -1.2, -0.3, -0.9,  4.5, -1.1, -1.2, -1.3],
+             [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1,  4.6, -1.8, -1.5],
+             [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8,  4.7, -1.1],
+             [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1,  4.8]])
 
         jacobianP = numpy.array(
-            [[  1.0, 48.7, 48.8, 48.9, 49.0, 49.1, 49.2, 49.3, 49.4,],
-             [ 51.8,  1.0, 51.9, 52.0, 52.1, 52.2, 52.3, 52.4, 52.5,],
-             [ 54.9, 55.0,  1.0, 55.1, 55.2, 55.3, 55.4, 55.5, 55.6,],
-             [ 58.0, 58.1, 58.2,  1.0, 58.3, 58.4, 58.5, 58.6, 58.7,],
-             [ 61.1, 61.2, 61.3, 61.4,  1.0, 61.5, 61.6, 61.7, 61.8,],
-             [ 64.2, 64.3, 64.4, 64.5, 64.6,  1.0, 64.7, 64.8, 64.9,],
-             [ 67.3, 67.4, 67.5, 67.6, 67.7, 67.8,  1.0, 67.9, 68.0,],
-             [ 70.4, 70.5, 70.6, 70.7, 70.8, 70.9, 71.0,  1.0, 71.1,],
-             [ 73.5, 73.6, 73.7, 73.8, 73.9, 74.0, 74.1, 74.2,  1.0,],])
+            [[ 5.0, -1.1, -1.2, -1.3, -1.4, -1.5, -1.6, -1.7, -1.8],
+             [-1.1,  5.1, -2.3, -2.4, -2.5, -2.6, -2.7, -2.8, -2.9], 
+             [-1.2, -2.3,  5.2, -1.0, -1.1, -1.2, -1.3, -1.4, -1.5],
+             [-1.3, -2.4, -1.0,  5.3, -0.2, -0.3, -0.4, -0.5, -0.6],
+             [-1.4, -2.5, -1.1, -0.2,  5.4, -0.9, -0.8, -0.7, -0.5],
+             [-1.5, -2.6, -1.2, -0.3, -0.9,  5.5, -1.1, -1.2, -1.3],
+             [-1.6, -2.7, -1.3, -0.4, -0.8, -1.1,  5.6, -1.8, -1.5],
+             [-1.7, -2.8, -1.4, -0.5, -0.7, -1.2, -1.8,  5.7, -1.1],
+             [-1.8, -2.9, -1.5, -0.6, -0.5, -1.3, -1.5, -1.1,  5.8]])
 
         disp = numpy.array([[ 7.1, 8.1, 9.1,],
                             [ 7.2, 8.2, 9.2,],
                             [ 7.3, 8.3, 9.3,],
                             [ 7.4, 8.4, 9.4,],
                             [ 7.5, 8.5, 9.5,],
-                            [ 7.6, 8.6, 9.6,],
-                            [ 7.8, 8.8, 9.8,],
-                            [ 7.0, 8.0, 9.0,],
+                            [ 7.2, 8.2, 9.2,],
+                            [ 7.3, 8.3, 9.3,],
+                            [ 7.4, 8.4, 9.4,],
                             [ 7.7, 8.7, 9.7,],
                             [ 7.9, 8.9, 9.9,],
                             [ 7.1, 8.1, 9.1,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
-                                    [ 8.2, 9.2, 10.2,],
-                                    [ 8.3, 9.3, 10.3,],
-                                    [ 8.4, 9.4, 10.4,],
-                                    [ 8.5, 9.5, 10.5,],
-                                    [ 8.6, 9.6, 10.6,],
-                                    [ 8.8, 9.8, 10.8,],
-                                    [ 8.0, 9.0, 10.0,],
-                                    [ 8.7, 9.7, -10.7,],
-                                    [ 8.9, 9.9, -10.9,],
-                                    [ 8.1, 9.1, -10.1,],])            
+            dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [ 1.5, 2.5, 3.5,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [ 9.7, 2.7, 3.7,],
+                                    [ 9.9, 2.9, 3.9,],
+                                    [ 9.1, 2.1, 3.1,],])            
         elif testCase == "open":
-            dispIncr = numpy.array([[ 8.1, 9.1, 10.1,],
-                                    [ 8.2, 9.2, 10.2,],
-                                    [ 8.3, 9.3, 10.3,],
-                                    [ 8.4, 9.4, 10.4,],
-                                    [ 8.5, 9.5, 10.5,],
-                                    [ 8.6, 9.6, 10.6,],
-                                    [ 8.8, 9.8, 10.8,],
-                                    [ 8.0, 9.0, 10.0,],
-                                    [ 8.7, 9.7, 10.7,],
-                                    [ 8.9, 9.9, 10.9,],
-                                    [ 8.1, 9.1, 10.1,],])
+            dispIncr = numpy.array([[ 1.1, 2.1, 3.1,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [ 1.5, 2.5, 3.5,],
+                                    [ 1.2, 2.2, 3.2,],
+                                    [ 1.3, 2.3, 3.3,],
+                                    [ 1.4, 2.4, 3.4,],
+                                    [-20.7,  2.7, 3.7,],
+                                    [-20.9,  2.9, 3.9,],
+                                    [-20.1,  2.1, 3.1,],])            
 
 
     elif cell == "hex8":
@@ -384,115 +437,141 @@
         m = 12
         DOF = 3
 
-        fieldT = numpy.array([[5.4, 7.4, 9.4],
-                              [5.6, 7.6, 9.6],
-                              [5.8, 7.8, 9.8],
-                              [5.0, 7.0, 9.0]])
-        fieldIncr = numpy.array([[-6.4, -8.4, -10.4],
-                                 [-6.6, -8.6, -10.6],
-                                 [-6.8, -8.8, -10.8],
-                                 [-6.0, -8.0, -10.0]])
-        area = numpy.array([1.0, 1.0, 1.0, 1.0])
-    
+        a0 = 1.0
+        a1 = 0.0
+        a2 = 0.0
+        L = numpy.array([[a0, 0, 0, a1, 0, 0, a1, 0, 0, a2, 0, 0],
+                         [0, a0, 0, 0, a1, 0, 0, a1, 0, 0, a2, 0],
+                         [0, 0, a0, 0, 0, a1, 0, 0, a1, 0, 0, a2],
+                         [a1, 0, 0, a0, 0, 0, a2, 0, 0, a1, 0, 0],
+                         [0, a1, 0, 0, a0, 0, 0, a2, 0, 0, a1, 0],
+                         [0, 0, a1, 0, 0, a0, 0, 0, a2, 0, 0, a1],
+                         [a1, 0, 0, a2, 0, 0, a0, 0, 0, a1, 0, 0],
+                         [0, a1, 0, 0, a2, 0, 0, a0, 0, 0, a1, 0],
+                         [0, 0, a1, 0, 0, a2, 0, 0, a0, 0, 0, a1],
+                         [a2, 0, 0, a1, 0, 0, a1, 0, 0, a0, 0, 0],
+                         [0, a2, 0, 0, a1, 0, 0, a1, 0, 0, a0, 0],
+                         [0, 0, a2, 0, 0, a1, 0, 0, a1, 0, 0, a0]])
+
+        fieldT = numpy.array([[4.4, 2.4, 3.4],
+                              [4.6, 2.6, 3.6],
+                              [4.8, 2.8, 3.8],
+                              [4.0, 2.0, 3.0]])
+        fieldIncr = numpy.array([[1.4, 2.4, 0.4],
+                                 [1.6, 2.6, 0.6],
+                                 [1.8, 2.8, 0.8],
+                                 [1.0, 2.0, 0.2]])
+
+        Cv = numpy.array([[ 0, -1, 0,],
+                          [ 0, 0, +1,],
+                          [ -1, 0, 0,],])
+        Zv = numpy.zeros([3,3])
+        C = numpy.vstack( (numpy.hstack((Cv, Zv, Zv, Zv)),
+                           numpy.hstack((Zv, Cv, Zv, Zv)),
+                           numpy.hstack((Zv, Zv, Cv, Zv)),
+                           numpy.hstack((Zv, Zv, Zv, Cv)) ) )
+
         jacobianN = numpy.array(
-            [[   1.0,  72.1,  72.2,  72.3,  72.4,  72.5,  72.6,  72.7,  72.8,  72.9,  73.0,  73.1,],
-             [  77.9,   1.0,  78.0,  78.1,  78.2,  78.3,  78.4,  78.5,  78.6,  78.7,  78.8,  78.9,],
-             [  83.7,  83.8,   1.0,  83.9,  84.0,  84.1,  84.2,  84.3,  84.4,  84.5,  84.6,  84.7,],
-             [  89.5,  89.6,  89.7,   1.0,  89.8,  89.9,  90.0,  90.1,  90.2,  90.3,  90.4,  90.5,],
-             [  95.3,  95.4,  95.5,  95.6,   1.0,  95.7,  95.8,  95.9,  96.0,  96.1,  96.2,  96.3,],
-             [ 101.1, 101.2, 101.3, 101.4, 101.5,   1.0, 101.6, 101.7, 101.8, 101.9, 102.0, 102.1,],
-             [ 106.9, 107.0, 107.1, 107.2, 107.3, 107.4,   1.0, 107.5, 107.6, 107.7, 107.8, 107.9,],
-             [ 112.7, 112.8, 112.9, 113.0, 113.1, 113.2, 113.3,   1.0, 113.4, 113.5, 113.6, 113.7,],
-             [ 118.5, 118.6, 118.7, 118.8, 118.9, 119.0, 119.1, 119.2,   1.0, 119.3, 119.4, 119.5,],
-             [ 124.3, 124.4, 124.5, 124.6, 124.7, 124.8, 124.9, 125.0, 125.1,   1.0, 125.2, 125.3,],
-             [ 130.1, 130.2, 130.3, 130.4, 130.5, 130.6, 130.7, 130.8, 130.9, 131.0,   1.0, 131.1,],
-             [ 135.9, 136.0, 136.1, 136.2, 136.3, 136.4, 136.5, 136.6, 136.7, 136.8, 136.9,   1.0,],])
+            [[+6.0, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0, -0.8, -0.7, -0.6, -0.5, -0.4,],
+             [-0.5, +6.1, -1.0, -1.1, -1.2, -1.3, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9,],
+             [-0.6, -1.0, +6.2, -0.5, -0.6, -0.7, -0.8, -0.9, -0.8, -0.7, -0.6, -0.5,],
+             [-0.7, -1.1, -0.5, +6.3, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,],
+             [-0.8, -1.2, -0.6, -0.8, +6.4, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9,],
+             [-0.9, -1.3, -0.7, -0.7, -0.3, +6.5, -0.3, -0.8, -0.7, -0.6, -0.9, -0.7,],
+             [-1.0, -1.4, -0.8, -0.6, -0.4, -0.3, +6.6, -1.1, -0.8, -0.7, -0.6, -0.5,],
+             [-0.8, -1.3, -0.9, -0.5, -0.5, -0.8, -1.1, +6.7, -0.8, -0.9, -1.0, -1.1,],
+             [-0.7, -1.2, -0.8, -0.4, -0.6, -0.7, -0.8, -0.8, +6.8, -1.0, -1.1, -1.2,],
+             [-0.6, -1.1, -0.7, -0.3, -0.7, -0.6, -0.7, -0.9, -1.0, +6.9, -0.5, -0.4,],
+             [-0.5, -1.0, -0.6, -0.2, -0.8, -0.9, -0.6, -1.0, -1.1, -0.5, +6.0, -1.2,],
+             [-0.4, -0.9, -0.5, -0.1, -0.9, -0.7, -0.5, -1.1, -1.2, -0.4, -1.2, +6.1,],])
 
 
         jacobianP = numpy.array(
-            [[   1.0, 214.9, 215.0, 215.1, 215.2, 215.3, 215.4, 215.5, 215.6, 215.7, 215.8, 215.9,],
-             [ 220.7,   1.0, 220.8, 220.9, 221.0, 221.1, 221.2, 221.3, 221.4, 221.5, 221.6, 221.7,],
-             [ 226.5, 226.6,   1.0, 226.7, 226.8, 226.9, 227.0, 227.1, 227.2, 227.3, 227.4, 227.5,],
-             [ 232.3, 232.4, 232.5,   1.0, 232.6, 232.7, 232.8, 232.9, 233.0, 233.1, 233.2, 233.3,],
-             [ 238.1, 238.2, 238.3, 238.4,   1.0, 238.5, 238.6, 238.7, 238.8, 238.9, 239.0, 239.1,],
-             [ 243.9, 244.0, 244.1, 244.2, 244.3,   1.0, 244.4, 244.5, 244.6, 244.7, 244.8, 244.9,],
-             [ 249.7, 249.8, 249.9, 250.0, 250.1, 250.2,   1.0, 250.3, 250.4, 250.5, 250.6, 250.7,],
-             [ 255.5, 255.6, 255.7, 255.8, 255.9, 256.0, 256.1,   1.0, 256.2, 256.3, 256.4, 256.5,],
-             [ 261.3, 261.4, 261.5, 261.6, 261.7, 261.8, 261.9, 262.0,   1.0, 262.1, 262.2, 262.3,],
-             [ 267.1, 267.2, 267.3, 267.4, 267.5, 267.6, 267.7, 267.8, 267.9,   1.0, 268.0, 268.1,],
-             [ 272.9, 273.0, 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8,   1.0, 273.9,],
-             [ 278.7, 278.8, 278.9, 279.0, 279.1, 279.2, 279.3, 279.4, 279.5, 279.6, 279.7,   1.0,],])
+            [[+7.0, -0.5, -0.6, -0.7, -0.8, -0.9, -1.0, -0.8, -0.7, -0.6, -0.5, -0.4,],
+             [-0.5, +7.1, -1.0, -1.1, -1.2, -1.3, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9,],
+             [-0.6, -1.0, +7.2, -0.5, -0.6, -0.7, -0.8, -0.9, -0.8, -0.7, -0.6, -0.5,],
+             [-0.7, -1.1, -0.5, +7.3, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1,],
+             [-0.8, -1.2, -0.6, -0.8, +7.4, -0.3, -0.4, -0.5, -0.6, -0.7, -0.8, -0.9,],
+             [-0.9, -1.3, -0.7, -0.7, -0.3, +7.5, -0.3, -0.8, -0.7, -0.6, -0.9, -0.7,],
+             [-1.0, -1.4, -0.8, -0.6, -0.4, -0.3, +7.6, -1.1, -0.8, -0.7, -0.6, -0.5,],
+             [-0.8, -1.3, -0.9, -0.5, -0.5, -0.8, -1.1, +7.7, -0.8, -0.9, -1.0, -1.1,],
+             [-0.7, -1.2, -0.8, -0.4, -0.6, -0.7, -0.8, -0.8, +7.8, -1.0, -1.1, -1.2,],
+             [-0.6, -1.1, -0.7, -0.3, -0.7, -0.6, -0.7, -0.9, -1.0, +7.9, -0.5, -0.4,],
+             [-0.5, -1.0, -0.6, -0.2, -0.8, -0.9, -0.6, -1.0, -1.1, -0.5, +7.0, -1.2,],
+             [-0.4, -0.9, -0.5, -0.1, -0.9, -0.7, -0.5, -1.1, -1.2, -0.4, -1.2, +7.1,],])
 
-        disp = numpy.array([[ 4.1, 6.1, 8.1,],
-                            [ 4.2, 6.2, 8.2,],
-                            [ 4.3, 6.3, 8.3,],
-                            [ 4.4, 6.4, 8.4,],
-                            [ 4.5, 6.5, 8.5,],
-                            [ 4.6, 6.6, 8.6,],
-                            [ 4.7, 6.7, 8.7,],
-                            [ 4.8, 6.8, 8.8,],
-                            [ 4.9, 6.9, 8.9,],
-                            [ 4.0, 6.0, 8.0,],
-                            [ 5.1, 7.1, 9.1,],
-                            [ 5.2, 7.2, 9.2,],
-                            [ 5.3, 7.3, 9.3,],
-                            [ 5.5, 7.5, 9.5,],
-                            [ 5.7, 7.7, 9.7,],
-                            [ 5.9, 7.9, 9.9,],
-                            [ 5.4, 7.4, 9.4,],
-                            [ 5.6, 7.6, 9.6,],
-                            [ 5.8, 7.8, 9.8,],
-                            [ 5.0, 7.0, 9.0,],])
+        disp = numpy.array([[ 4.1, 2.1, 3.1,],
+                            [ 4.2, 2.2, 3.2,],
+                            [ 4.3, 2.3, 3.3,],
+                            [ 4.4, 2.4, 3.4,],
+                            [ 4.5, 2.5, 3.5,],
+                            [ 4.6, 2.6, 3.6,],
+                            [ 4.7, 2.7, 3.7,],
+                            [ 4.8, 2.8, 3.8,],
+                            [ 4.9, 2.9, 3.9,],
+                            [ 4.0, 2.0, 3.0,],
+                            [ 4.1, 2.1, 3.1,],
+                            [ 4.2, 2.2, 3.2,],
+                            [ 4.5, 2.5, 3.5,],
+                            [ 4.6, 2.6, 3.6,],
+                            [ 4.7, 2.7, 3.7,],
+                            [ 4.8, 2.8, 3.8,],
+                            [ 4.4, 2.4, 3.4,],
+                            [ 4.6, 2.6, 3.6,],
+                            [ 4.8, 2.8, 3.8,],
+                            [ 4.0, 2.0, 3.0,],])
 
         if testCase == "slip":
-            dispIncr = numpy.array([[ 5.1, 7.1, 9.1,],
-                                    [ 5.2, 7.2, 9.2,],
-                                    [ 5.3, 7.3, 9.3,],
-                                    [ 5.4, 7.4, 9.4,],
-                                    [ 5.5, 7.5, 9.5,],
-                                    [ 5.6, 7.6, 9.6,],
-                                    [ 5.7, 7.7, 9.7,],
-                                    [ 5.8, 7.8, 9.8,],
-                                    [ 5.9, 7.9, 9.9,],
-                                    [ 5.0, 7.0, 9.0,],
-                                    [ 6.1, 8.1, 10.1,],
-                                    [ 6.2, 8.2, 10.2,],
-                                    [ 6.3, 8.3, 10.3,],
-                                    [ 6.5, 8.5, 10.5,],
-                                    [ 6.7, 8.7, 10.7,],
-                                    [ 6.9, 8.9, 10.9,],
-                                    [ -6.4, -8.4, -10.4,],
-                                    [ -6.6, -8.6, -10.6,],
-                                    [ -6.8, -8.8, -10.8,],
-                                    [ -6.0, -8.0, -10.0,],])          
+            dispIncr = numpy.array([[ 1.1, 2.1, 0.1,],
+                                    [ 1.2, 2.2, 0.2,],
+                                    [ 1.3, 2.3, 0.3,],
+                                    [ 1.4, 2.4, 0.4,],
+                                    [ 1.5, 2.5, 0.5,],
+                                    [ 1.6, 2.6, 0.6,],
+                                    [ 1.7, 2.7, 0.7,],
+                                    [ 1.8, 2.8, 0.8,],
+                                    [ 1.9, 2.9, 0.9,],
+                                    [ 1.0, 2.0, 0.0,],
+                                    [ 1.1, 2.1, 0.1,],
+                                    [ 1.2, 2.2, 0.2,],
+                                    [ 1.5, 2.5, 0.5,],
+                                    [ 1.6, 2.6, 0.6,],
+                                    [ 1.7, 2.7, 0.7,],
+                                    [ 1.8, 2.8, 0.8,],
+                                    [ 1.4, 2.4, 0.4,],
+                                    [ 1.6, 2.6, 0.6,],
+                                    [ 1.8, 2.8, 0.8,],
+                                    [ 1.0, 2.0, 0.2,],])          
         elif testCase == "open":
-            dispIncr = numpy.array([[ 5.1, 7.1, 9.1,],
-                                    [ 5.2, 7.2, 9.2,],
-                                    [ 5.3, 7.3, 9.3,],
-                                    [ 5.4, 7.4, 9.4,],
-                                    [ 5.5, 7.5, 9.5,],
-                                    [ 5.6, 7.6, 9.6,],
-                                    [ 5.7, 7.7, 9.7,],
-                                    [ 5.8, 7.8, 9.8,],
-                                    [ 5.9, 7.9, 9.9,],
-                                    [ 5.0, 7.0, 9.0,],
-                                    [ 6.1, 8.1, 10.1,],
-                                    [ 6.2, 8.2, 10.2,],
-                                    [ 6.3, 8.3, 10.3,],
-                                    [ 6.5, 8.5, 10.5,],
-                                    [ 6.7, 8.7, 10.7,],
-                                    [ 6.9, 8.9, 10.9,],
-                                    [ 6.4, 8.4, 10.4,],
-                                    [ 6.6, 8.6, 10.6,],
-                                    [ 6.8, 8.8, 10.8,],
-                                    [ 6.0, 8.0, 10.0,],])
+            dispIncr = numpy.array([[ 1.1, 2.1, 0.1,],
+                                    [ 1.2, 2.2, 0.2,],
+                                    [ 1.3, 2.3, 0.3,],
+                                    [ 1.4, 2.4, 0.4,],
+                                    [ 1.5, 2.5, 0.5,],
+                                    [ 1.6, 2.6, 0.6,],
+                                    [ 1.7, 2.7, 0.7,],
+                                    [ 1.8, 2.8, 0.8,],
+                                    [ 1.9, 2.9, 0.9,],
+                                    [ 1.0, 2.0, 0.0,],
+                                    [ 1.1, 2.1, 0.1,],
+                                    [ 1.2, 2.2, 0.2,],
+                                    [ 1.5, 2.5, 0.5,],
+                                    [ 1.6, 2.6, 0.6,],
+                                    [ 1.7, 2.7, 0.7,],
+                                    [ 1.8, 2.8, 0.8,],
+                                    [-10.4, 2.4, 0.4,],
+                                    [-10.6, 2.6, 0.6,],
+                                    [-10.8, 2.8, 0.8,],
+                                    [-10.0, 2.0, 0.2,],])          
 
     # ------------------------------------------------------------------
     fieldTpdt = fieldT + fieldIncr
 
-    tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5 / area
-    tractionNormal = fieldTpdt[:,2] / area
+    fieldTpdt = globalToFault(fieldTpdt, C)
 
+    tractionShear = (fieldTpdt[:,0]**2 + fieldTpdt[:,1]**2)**0.5
+    tractionNormal = fieldTpdt[:,2]
+
     print "tractionShear",tractionShear
     print "tractionNormal",tractionNormal
 
@@ -500,61 +579,40 @@
 
     print "friction",friction
 
-    lagrangeTpdt0 = friction * fieldTpdt[:,0] / tractionShear
-    lagrangeTpdt1 = friction * fieldTpdt[:,1] / tractionShear
-
-    lagrangeIncr0 = lagrangeTpdt0 - fieldT[:,0]
-    lagrangeIncr1 = lagrangeTpdt1 - fieldT[:,1]
-
-    print "lagrangeIncr0",lagrangeIncr0
-    print "lagrangeIncr1",lagrangeIncr1
-
-    dlagrange0 = (tractionShear - friction) * fieldTpdt[:,0] / tractionShear
-    dlagrange1 = (tractionShear - friction) * fieldTpdt[:,1] / tractionShear
-    
+    dlagrange0 = (friction - tractionShear) * fieldTpdt[:,0] / tractionShear
+    dlagrange1 = (friction - tractionShear) * fieldTpdt[:,1] / tractionShear
+                           
     print "dlagrange0",dlagrange0
     print "dlagrange1",dlagrange1
 
-    D = numpy.array([[ 0, -1, 0,],
-                     [ 0, 0, +1,],
-                     [ -1, 0, 0,],])
-
-    Z = numpy.zeros([3,3])
-
-    if cell == "tet4":
-        C1 = numpy.hstack((D, Z, Z))
-        C2 = numpy.hstack((Z, D, Z))
-        C3 = numpy.hstack((Z, Z, D))
-        C = numpy.vstack((C1, C2, C3))
-    elif cell == "hex8":
-        C1 = numpy.hstack((D, Z, Z, Z))
-        C2 = numpy.hstack((Z, D, Z, Z))
-        C3 = numpy.hstack((Z, Z, D, Z))
-        C4 = numpy.hstack((Z, Z, Z, D))        
-        C = numpy.vstack((C1, C2, C3, C4))
-
     if testCase == "slip": 
         dLagrange = numpy.vstack((dlagrange0, dlagrange1, dlagrange2))
         dLagrange = numpy.transpose(dLagrange)
-        dLagrange = numpy.reshape(dLagrange, m)
+        dLagrange = faultToGlobal(dLagrange, C).reshape(m)
     elif testCase == "open":
         dLagrange = numpy.reshape(disp+dispIncr, n)
-        dLagrange = dLagrange[indexL]
+        dLagrange = -dLagrange[indexL]
 
     print "dLagrange \n", dLagrange
 
-    RHS = numpy.dot(numpy.transpose(C),dLagrange)
-    duN = -numpy.dot(inv(jacobianN),RHS)
-    duP = numpy.dot(inv(jacobianP),RHS)
+    RHS = numpy.dot(numpy.transpose(L),dLagrange)
+    print "RHS",RHS
+    duN = numpy.dot(inv(jacobianN),RHS)
+    duP = -numpy.dot(inv(jacobianP),RHS)
     
     dispRel = duP - duN
 
-    slipVertex = numpy.dot(C,dispRel)
+    dispTpdt = disp + dispIncr
+    dispTpdt = numpy.reshape(dispTpdt, n)
+
+    slipVertex = dispRel + dispTpdt[indexP]-dispTpdt[indexN]
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
     if testCase == "slip":
-        slipVertex[:,2] = 0    
+        slipVertex[:,2] = 0
     mask = slipVertex[:,2] < 0.0
     slipVertex[mask,2] = 0
+    slipVertex = faultToGlobal(slipVertex, C)
     slipVertex = numpy.reshape(slipVertex, m)
 
     print "duN \n", duN
@@ -563,15 +621,13 @@
     dispIncrE = dispIncr
     dispIncrE = numpy.reshape(dispIncrE, n)
 
-    dispIncrE[indexL] = dispIncrE[indexL] - dLagrange
-    dispIncrE[indexN] = dispIncrE[indexN] - \
-        0.5*numpy.dot(C.transpose(), slipVertex)
-    dispIncrE[indexP] = dispIncrE[indexP] + \
-        0.5*numpy.dot(C.transpose(), slipVertex)
+    dispIncrE[indexL] = dispIncrE[indexL] + dLagrange
+    dispIncrE[indexN] = dispIncrE[indexN] - 0.5*slipVertex
+    dispIncrE[indexP] = dispIncrE[indexP] + 0.5*slipVertex
+    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
 
-    dispIncrE = numpy.reshape(dispIncrE, (n/DOF,DOF))
     slipVertex = numpy.reshape(slipVertex, (m/DOF,DOF))
+    slipVertex = globalToFault(slipVertex, C)
 
     print "dispIncrE\n", printdata(dispIncrE)
     print "slipVertexE\n", printdata(slipVertex)
-

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/hex8_initialtract.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/hex8_initialtract.spatialdb	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/hex8_initialtract.spatialdb	2011-10-31 15:27:29 UTC (rev 19131)
@@ -11,7 +11,7 @@
     space-dim = 3
   }
 }
-0.0  -0.57735027  -0.57735027    1.0000    2.0000   -3.0000
-0.0   0.57735027  -0.57735027    1.1000    2.1000   -3.1000
-0.0  -0.57735027   0.57735027    1.2000    2.2000   -3.2000
-0.0   0.57735027   0.57735027    1.3000    2.3000   -3.3000
+0.0  -1.0  -1.0    1.0000    2.0000   -3.0000
+0.0   1.0  -1.0    1.1000    2.1000   -3.1000
+0.0  -1.0   1.0    1.2000    2.2000   -3.2000
+0.0   1.0   1.0    1.3000    2.3000   -3.3000

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestCellGeometry.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestCellGeometry.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestCellGeometry.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -21,7 +21,7 @@
 #include "TestCellGeometry.hh" // Implementation of class methods
 
 #include "pylith/feassemble/CellGeometry.hh" // USES CellGeometry
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "data/CellGeomData.hh" // USES CellGeomData
 
@@ -51,16 +51,16 @@
 void
 pylith::feassemble::TestCellGeometry::testOrient0D(void)
 { // testOrient0D
-  double_array jacobian;
-  double jacobianDet;
-  double_array upDir;
-  double_array orientation(1);
+  scalar_array jacobian;
+  PylithScalar jacobianDet;
+  scalar_array upDir;
+  scalar_array orientation(1);
   
   CellGeometry::_orient0D(&orientation, jacobian, jacobianDet, upDir);
 
   const int size = orientation.size();
   CPPUNIT_ASSERT_EQUAL(1, size);
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, orientation[i], tolerance);
 } // testOrient0D
@@ -74,27 +74,27 @@
   const int spaceDim = 2;
   const int orientSize = 4;
 
-  const double jacobianVals[] = {
+  const PylithScalar jacobianVals[] = {
     -1.0, 2.0,
     -0.5, 1.0
   };
-  const double orientationE[] = {
+  const PylithScalar orientationE[] = {
     -1.0,  2.0,  2.0, 1.0,
     -0.5,  1.0,  1.0, 0.5
   };
 
   const int jacobianSize = spaceDim*(spaceDim-1);
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array jacobian(&jacobianVals[iLoc*jacobianSize], jacobianSize);
-    double jacobianDet;
-    double_array upDir;
-    double_array orientation(orientSize);
+    scalar_array jacobian(&jacobianVals[iLoc*jacobianSize], jacobianSize);
+    PylithScalar jacobianDet;
+    scalar_array upDir;
+    scalar_array orientation(orientSize);
 
     CellGeometry::_orient1D(&orientation, jacobian, jacobianDet, upDir);
 
     const int size = orientation.size();
     CPPUNIT_ASSERT_EQUAL(orientSize, size);
-    const double tolerance = 1.0e-6;
+    const PylithScalar tolerance = 1.0e-6;
     for (int i=0; i < size; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(orientationE[iLoc*orientSize+i],
 				   orientation[i], tolerance);
@@ -110,7 +110,7 @@
   const int spaceDim = 3;
   const int orientSize = 9;
 
-  const double jacobianVals[] = {
+  const PylithScalar jacobianVals[] = {
     2.0,  -0.5,
     1.0,  -0.2,
     0.5,   2.0,
@@ -119,11 +119,11 @@
     -3.0, -0.2,
     -0.3,  0.3,
   };
-  const double jacobianDetVals[] = {
+  const PylithScalar jacobianDetVals[] = {
     1.3, 0.7
   };
-  const double upDirVals[] = { 0.0, 0.0, 1.0 };
-  const double orientationE[] = {
+  const PylithScalar upDirVals[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar orientationE[] = {
     1.1654847299258313, 0.57588657243394026, 0.0, 
     -0.012145479112634533, 0.024580136299379406, 1.2997108540889502, 
     0.57575848378190342, -1.1652255028919474, 0.027417070656281111,
@@ -133,18 +133,18 @@
     -0.10698846644884991, -0.033433895765265592, 0.69096717914882233
   };
 
-  double_array upDir(upDirVals, 3);
+  scalar_array upDir(upDirVals, 3);
   const int jacobianSize = spaceDim*(spaceDim-1);
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array jacobian(&jacobianVals[iLoc*jacobianSize], jacobianSize);
-    double jacobianDet = jacobianDetVals[iLoc];
-    double_array orientation(orientSize);
+    scalar_array jacobian(&jacobianVals[iLoc*jacobianSize], jacobianSize);
+    PylithScalar jacobianDet = jacobianDetVals[iLoc];
+    scalar_array orientation(orientSize);
 
     CellGeometry::_orient2D(&orientation, jacobian, jacobianDet, upDir);
 
     const int size = orientation.size();
     CPPUNIT_ASSERT_EQUAL(orientSize, size);
-    const double tolerance = 1.0e-6;
+    const PylithScalar tolerance = 1.0e-6;
     for (int i=0; i < size; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(orientationE[iLoc*orientSize+i],
 				   orientation[i], tolerance);
@@ -239,17 +239,17 @@
   CPPUNIT_ASSERT_EQUAL(spaceDim, _object->spaceDim());
   CPPUNIT_ASSERT_EQUAL(numCorners, _object->numCorners());
 
-  double_array jacobian(cellDim*spaceDim);
-  double det = 0;
+  scalar_array jacobian(cellDim*spaceDim);
+  PylithScalar det = 0;
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array vertices(_data->vertices, numCorners*spaceDim);
-    double_array location(&_data->locations[iLoc*cellDim], cellDim);
+    scalar_array vertices(_data->vertices, numCorners*spaceDim);
+    scalar_array location(&_data->locations[iLoc*cellDim], cellDim);
 
     _object->jacobian(&jacobian, &det, vertices, location);
 
     const int size = jacobian.size();
     const int index = iLoc*cellDim*spaceDim;
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < size; ++i)
       if (_data->jacobian[index+i] < 1.0)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->jacobian[index+i], jacobian[i],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -30,6 +30,8 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
+
 #include "spatialdata/geocoords/CSCart.hh" // USES CSCart
 #include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
 #include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
@@ -84,7 +86,7 @@
 { // testTimeStep
   ElasticityExplicit integrator;
 
-  const double dt1 = 2.0;
+  const PylithScalar dt1 = 2.0;
   integrator.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
   integrator.timeStep(dt1);
@@ -99,7 +101,7 @@
 { // testNormViscosity
   ElasticityExplicit integrator;
 
-  const double viscosity = 1.234;
+  const PylithScalar viscosity = 1.234;
   integrator.normViscosity(viscosity);
   CPPUNIT_ASSERT_EQUAL(viscosity, integrator._normViscosity);
 } // testTimeStep
@@ -120,7 +122,7 @@
   CPPUNIT_ASSERT_EQUAL(id, integrator._material->id());
   CPPUNIT_ASSERT_EQUAL(label, std::string(integrator._material->label()));
   CPPUNIT_ASSERT_EQUAL(integrator._dt, integrator._material->timeStep());
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   integrator.timeStep(dt);
   CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
 } // testMaterial
@@ -188,15 +190,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -207,7 +209,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -228,15 +230,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidualLumped(residual, t, &fields);
 
-  const double* valsE = _data->valsResidualLumped;
+  const PylithScalar* valsE = _data->valsResidualLumped;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -247,7 +249,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -270,12 +272,12 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -292,7 +294,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -300,7 +302,7 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -332,12 +334,12 @@
   jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
   jacobian.allocate();
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.complete();
 
-  const double* valsE = _data->valsJacobianLumped;
+  const PylithScalar* valsE = _data->valsJacobianLumped;
 
 #if 0 // DEBUGGING
   // TEMPORARY
@@ -353,12 +355,12 @@
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
-  const double* vals = jacobianSection->restrictSpace();
+  const PylithScalar* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
   const int sizeE = _data->numVertices * _data->spaceDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -378,7 +380,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 
@@ -392,8 +394,8 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double stableTimeStep = integrator.stableTimeStep(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0e+30, stableTimeStep);
+  const PylithScalar stableTimeStep = integrator.stableTimeStep(mesh);
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXSCALAR, stableTimeStep);
 } // testStableTimeStep
 
 // ----------------------------------------------------------------------
@@ -411,7 +413,7 @@
   CPPUNIT_ASSERT(0 != _material);
 
   const int spaceDim = _data->spaceDim;
-  const double dt = _data->dt;
+  const PylithScalar dt = _data->dt;
 
   // Setup mesh
   mesh->createSieveMesh(_data->cellDim);
@@ -516,8 +518,8 @@
   CPPUNIT_ASSERT(!velSection.isNull());
   CPPUNIT_ASSERT(!accSection.isNull());
 
-  double_array velVertex(spaceDim);
-  double_array accVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
+  scalar_array accVertex(spaceDim);
 
 
   const int offset = _data->numCells;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicit.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,7 +32,7 @@
 #include "pylith/feassemble/feassemblefwd.hh" // forward declarations
 #include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
 #include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
-#include "pylith/utils/arrayfwd.hh" // USES double_array
+#include "pylith/utils/arrayfwd.hh" // USES scalar_array
 
 #include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitGrav3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,6 @@
 #include "pylith/feassemble/ElasticityExplicitLgDeform.hh" // USES ElasticityExplicitLgDeform
 #include "data/ElasticityExplicitData.hh" // USES ElasticityExplicitData
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/topology/Mesh.hh" // USES Mesh
@@ -103,10 +102,10 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
 #if 0 // DEBUGGING
@@ -118,11 +117,11 @@
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-04;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -143,15 +142,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidualLumped(residual, t, &fields);
 
-  const double* valsE = _data->valsResidualLumped;
+  const PylithScalar* valsE = _data->valsResidualLumped;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -162,7 +161,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-04;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -185,12 +184,12 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -207,7 +206,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -215,7 +214,7 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -247,12 +246,12 @@
   jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
   jacobian.allocate();
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.complete();
 
-  const double* valsE = _data->valsJacobianLumped;
+  const PylithScalar* valsE = _data->valsJacobianLumped;
 
 #if 0 // DEBUGGING
   // TEMPORARY
@@ -268,12 +267,12 @@
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
-  const double* vals = jacobianSection->restrictSpace();
+  const PylithScalar* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
   const int sizeE = _data->numVertices * _data->spaceDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -293,7 +292,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 
@@ -312,7 +311,7 @@
   CPPUNIT_ASSERT(0 != _material);
 
   const int spaceDim = _data->spaceDim;
-  const double dt = _data->dt;
+  const PylithScalar dt = _data->dt;
 
   // Setup mesh
   spatialdata::geocoords::CSCart cs;
@@ -416,8 +415,8 @@
   CPPUNIT_ASSERT(!velSection.isNull());
   CPPUNIT_ASSERT(!accSection.isNull());
 
-  double_array velVertex(spaceDim);
-  double_array accVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
+  scalar_array accVertex(spaceDim);
 
   const int offset = _data->numCells;
   for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitLgDeformGrav3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -93,7 +93,7 @@
 { // testTimeStep
   ElasticityExplicitTet4 integrator;
 
-  const double dt1 = 2.0;
+  const PylithScalar dt1 = 2.0;
   integrator.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
   integrator.timeStep(dt1);
@@ -117,7 +117,7 @@
   CPPUNIT_ASSERT_EQUAL(id, integrator._material->id());
   CPPUNIT_ASSERT_EQUAL(label, std::string(integrator._material->label()));
   CPPUNIT_ASSERT_EQUAL(integrator._dt, integrator._material->timeStep());
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   integrator.timeStep(dt);
   CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
 } // testMaterial
@@ -185,15 +185,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -204,7 +204,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif // DEBUGGING
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -225,15 +225,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidualLumped(residual, t, &fields);
 
-  const double* valsE = _data->valsResidualLumped;
+  const PylithScalar* valsE = _data->valsResidualLumped;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -244,7 +244,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif // DEBUGGING
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -267,12 +267,12 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -289,7 +289,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -297,7 +297,7 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -329,20 +329,20 @@
   jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
   jacobian.allocate();
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.complete();
 
-  const double* valsMatrixE = _data->valsJacobian;
+  const PylithScalar* valsMatrixE = _data->valsJacobian;
   const int sizeE = _data->numVertices * _data->spaceDim;
-  double_array valsE(sizeE);
+  scalar_array valsE(sizeE);
   const int spaceDim = _data->spaceDim;
   const int numBasis = _data->numVertices;
   for (int iBasis=0; iBasis < numBasis; ++iBasis)
     for (int iDim=0; iDim < spaceDim; ++iDim) {
       const int indexRow = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
-      double value = 0.0;
+      PylithScalar value = 0.0;
       for (int jBasis=0; jBasis < numBasis; ++jBasis)
 	value += valsMatrixE[indexRow + jBasis*spaceDim+iDim];
       valsE[iBasis*spaceDim+iDim] = value;
@@ -358,11 +358,11 @@
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
-  const double* vals = jacobianSection->restrictSpace();
+  const PylithScalar* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -382,7 +382,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 
@@ -396,8 +396,8 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double stableTimeStep = integrator.stableTimeStep(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0e+30, stableTimeStep);
+  const PylithScalar stableTimeStep = integrator.stableTimeStep(mesh);
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXSCALAR, stableTimeStep);
 } // testStableTimeStep
 
 // ----------------------------------------------------------------------
@@ -415,7 +415,7 @@
   CPPUNIT_ASSERT(0 != _material);
 
   const int spaceDim = _data->spaceDim;
-  const double dt = _data->dt;
+  const PylithScalar dt = _data->dt;
 
   // Setup mesh
   mesh->createSieveMesh(_data->cellDim);
@@ -523,8 +523,8 @@
   CPPUNIT_ASSERT(!velSection.isNull());
   CPPUNIT_ASSERT(!accSection.isNull());
 
-  double_array velVertex(spaceDim);
-  double_array accVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
+  scalar_array accVertex(spaceDim);
 
   const int offset = _data->numCells;
   for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -93,7 +93,7 @@
 { // testTimeStep
   ElasticityExplicitTri3 integrator;
 
-  const double dt1 = 2.0;
+  const PylithScalar dt1 = 2.0;
   integrator.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
   integrator.timeStep(dt1);
@@ -117,7 +117,7 @@
   CPPUNIT_ASSERT_EQUAL(id, integrator._material->id());
   CPPUNIT_ASSERT_EQUAL(label, std::string(integrator._material->label()));
   CPPUNIT_ASSERT_EQUAL(integrator._dt, integrator._material->timeStep());
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   integrator.timeStep(dt);
   CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
 } // testMaterial
@@ -185,15 +185,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -204,7 +204,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif // DEBUGGING
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -225,15 +225,15 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidualLumped(residual, t, &fields);
 
-  const double* valsE = _data->valsResidualLumped;
+  const PylithScalar* valsE = _data->valsResidualLumped;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
@@ -244,7 +244,7 @@
     std::cout << "  " << valsE[i] << std::endl;
 #endif // DEBUGGING
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -267,12 +267,12 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -289,7 +289,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -297,7 +297,7 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -329,20 +329,20 @@
   jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
   jacobian.allocate();
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.complete();
 
-  const double* valsMatrixE = _data->valsJacobian;
+  const PylithScalar* valsMatrixE = _data->valsJacobian;
   const int sizeE = _data->numVertices * _data->spaceDim;
-  double_array valsE(sizeE);
+  scalar_array valsE(sizeE);
   const int spaceDim = _data->spaceDim;
   const int numBasis = _data->numVertices;
   for (int iBasis=0; iBasis < numBasis; ++iBasis)
     for (int iDim=0; iDim < spaceDim; ++iDim) {
       const int indexRow = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
-      double value = 0.0;
+      PylithScalar value = 0.0;
       for (int jBasis=0; jBasis < numBasis; ++jBasis)
 	value += valsMatrixE[indexRow + jBasis*spaceDim+iDim];
       valsE[iBasis*spaceDim+iDim] = value;
@@ -358,11 +358,11 @@
 
   const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
   CPPUNIT_ASSERT(!jacobianSection.isNull());
-  const double* vals = jacobianSection->restrictSpace();
+  const PylithScalar* vals = jacobianSection->restrictSpace();
   const int size = jacobianSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -382,7 +382,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 
@@ -396,8 +396,8 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double stableTimeStep = integrator.stableTimeStep(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0e+30, stableTimeStep);
+  const PylithScalar stableTimeStep = integrator.stableTimeStep(mesh);
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXSCALAR, stableTimeStep);
 } // testStableTimeStep
 
 // ----------------------------------------------------------------------
@@ -415,7 +415,7 @@
   CPPUNIT_ASSERT(0 != _material);
 
   const int spaceDim = _data->spaceDim;
-  const double dt = _data->dt;
+  const PylithScalar dt = _data->dt;
 
   // Setup mesh
   mesh->createSieveMesh(_data->cellDim);
@@ -523,8 +523,8 @@
   CPPUNIT_ASSERT(!velSection.isNull());
   CPPUNIT_ASSERT(!accSection.isNull());
 
-  double_array velVertex(spaceDim);
-  double_array accVertex(spaceDim);
+  scalar_array velVertex(spaceDim);
+  scalar_array accVertex(spaceDim);
 
   const int offset = _data->numCells;
   for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicit.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicit.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "pylith/feassemble/ElasticityImplicit.hh" // USES ElasticityImplicit
 #include "data/IntegratorData.hh" // USES IntegratorData
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/topology/Mesh.hh" // USES Mesh
@@ -83,7 +83,7 @@
 { // testTimeStep
   ElasticityImplicit integrator;
 
-  const double dt1 = 2.0;
+  const PylithScalar dt1 = 2.0;
   integrator.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
   integrator.timeStep(dt1);
@@ -107,7 +107,7 @@
   CPPUNIT_ASSERT_EQUAL(id, integrator._material->id());
   CPPUNIT_ASSERT_EQUAL(label, std::string(integrator._material->label()));
   CPPUNIT_ASSERT_EQUAL(integrator._dt, integrator._material->timeStep());
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   integrator.timeStep(dt);
   CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
 } // testMaterial
@@ -167,19 +167,19 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 4.0e-05;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -202,14 +202,14 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   //mesh->getSieve()->setDebug(10);
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   //mesh->getSieve()->setDebug(0);
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -226,7 +226,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -234,7 +234,7 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-04;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
@@ -259,7 +259,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 
@@ -274,8 +274,8 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double stableTimeStep = integrator.stableTimeStep(mesh);
-  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXDOUBLE, stableTimeStep);
+  const PylithScalar stableTimeStep = integrator.stableTimeStep(mesh);
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXSCALAR, stableTimeStep);
 } // testStableTimeStep
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitGrav3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,6 @@
 #include "pylith/feassemble/ElasticityImplicitLgDeform.hh" // USES ElasticityImplicitLgDeform
 #include "data/IntegratorData.hh" // USES IntegratorData
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/topology/Mesh.hh" // USES Mesh
@@ -103,10 +102,10 @@
   _initialize(&mesh, &integrator, &fields);
 
   topology::Field<topology::Mesh>& residual = fields.get("residual");
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateResidual(residual, t, &fields);
 
-  const double* valsE = _data->valsResidual;
+  const PylithScalar* valsE = _data->valsResidual;
   const int sizeE = _data->spaceDim * _data->numVertices;
 
 #if 0 // DEBUGGING
@@ -118,11 +117,11 @@
 
   const ALE::Obj<RealSection>& residualSection = residual.section();
   CPPUNIT_ASSERT(!residualSection.isNull());
-  const double* vals = residualSection->restrictSpace();
+  const PylithScalar* vals = residualSection->restrictSpace();
   const int size = residualSection->sizeWithBC();
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-04;
   for (int i=0; i < size; ++i)
     if (fabs(valsE[i]) > 1.0)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
@@ -145,12 +144,12 @@
 
   topology::Jacobian jacobian(fields.solution());
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.integrateJacobian(&jacobian, t, &fields);
   CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
   jacobian.assemble("final_assembly");
 
-  const double* valsE = _data->valsJacobian;
+  const PylithScalar* valsE = _data->valsJacobian;
   const int nrowsE = _data->numVertices * _data->spaceDim;
   const int ncolsE = _data->numVertices * _data->spaceDim;
 
@@ -167,7 +166,7 @@
   MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
   MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
 
-  double_array vals(nrows*ncols);
+  scalar_array vals(nrows*ncols);
   int_array rows(nrows);
   int_array cols(ncols);
   for (int iRow=0; iRow < nrows; ++iRow)
@@ -175,14 +174,17 @@
   for (int iCol=0; iCol < ncols; ++iCol)
     cols[iCol] = iCol;
   MatGetValues(jDense, nrows, &rows[0], ncols, &cols[0], &vals[0]);
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 2.0e-05;
   for (int iRow=0; iRow < nrows; ++iRow)
     for (int iCol=0; iCol < ncols; ++iCol) {
       const int index = ncols*iRow+iCol;
-      if (fabs(valsE[index]) > 1.0)
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[index]/valsE[index], tolerance);
-      else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[index], vals[index], tolerance);
+      const PylithScalar valE = valsE[index];
+      if (fabs(valE) > 1.0) {
+	// Adjust tolerance based on magnitude of expected value compared to typical Jacobian values of 1.0e+11
+	const PylithScalar toleranceAdj = (fabs(valE) < 1.0e+10) ? tolerance*1.0e+11/fabs(valE) : tolerance;
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[index]/valE, toleranceAdj);
+      } else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[index], tolerance);
     } // for
   MatDestroy(&jDense);
   MatDestroy(&jSparseAIJ);
@@ -200,7 +202,7 @@
   topology::SolutionFields fields(mesh);
   _initialize(&mesh, &integrator, &fields);
 
-  const double t = 1.0;
+  const PylithScalar t = 1.0;
   integrator.updateStateVars(t, &fields);
 } // testUpdateStateVars
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryLine1D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { -1.0, 0.0, 0.0};
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { -1.0, 0.0, 0.0};
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,8 +45,8 @@
   GeometryTri2D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
-  const double gravityDir[] = { 0.0, -1.0, 0.0 };
+  const PylithScalar g = 1.0e8;
+  const PylithScalar gravityDir[] = { 0.0, -1.0, 0.0 };
   _gravityField->gravAcceleration(g);
   _gravityField->gravityDir(gravityDir[0], gravityDir[1], gravityDir[2]);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityImplicitLgDeformGrav3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   GeometryTet3D geometry;
   _quadrature->refGeometry(&geometry);
 
-  const double g = 1.0e8;
+  const PylithScalar g = 1.0e8;
   _gravityField->gravAcceleration(g);
 
   _material = new materials::ElasticIsotropic3D;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/feassemble/GeometryPoint1D.hh"
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "data/GeomDataPoint1D.hh"
 
@@ -75,15 +75,15 @@
   CPPUNIT_ASSERT_EQUAL(spaceDim, geometry.spaceDim());
   CPPUNIT_ASSERT_EQUAL(numCorners, geometry.numCorners());
 
-  double_array jacobian(1);
-  double det = 0.0;
+  scalar_array jacobian(1);
+  PylithScalar det = 0.0;
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array vertices(data.vertices, numCorners*spaceDim);
-    double_array location(&data.locations[iLoc], 1);
+    scalar_array vertices(data.vertices, numCorners*spaceDim);
+    scalar_array location(&data.locations[iLoc], 1);
 
     geometry.jacobian(&jacobian, &det, vertices, location);
-    CPPUNIT_ASSERT_EQUAL(1.0, jacobian[0]);
-    CPPUNIT_ASSERT_EQUAL(1.0, det);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), jacobian[0]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), det);
   } //for
 } // testJacobian
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/feassemble/GeometryPoint2D.hh"
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "data/GeomDataPoint2D.hh"
 
@@ -75,15 +75,15 @@
   CPPUNIT_ASSERT_EQUAL(spaceDim, geometry.spaceDim());
   CPPUNIT_ASSERT_EQUAL(numCorners, geometry.numCorners());
 
-  double_array jacobian(1);
-  double det = 0.0;
+  scalar_array jacobian(1);
+  PylithScalar det = 0.0;
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array vertices(data.vertices, numCorners*spaceDim);
-    double_array location(&data.locations[iLoc], 1);
+    scalar_array vertices(data.vertices, numCorners*spaceDim);
+    scalar_array location(&data.locations[iLoc], 1);
 
     geometry.jacobian(&jacobian, &det, vertices, location);
-    CPPUNIT_ASSERT_EQUAL(1.0, jacobian[0]);
-    CPPUNIT_ASSERT_EQUAL(1.0, det);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), jacobian[0]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), det);
   } //for
 } // testJacobian
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestGeometryPoint3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/feassemble/GeometryPoint3D.hh"
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "data/GeomDataPoint3D.hh"
 
@@ -75,15 +75,15 @@
   CPPUNIT_ASSERT_EQUAL(spaceDim, geometry.spaceDim());
   CPPUNIT_ASSERT_EQUAL(numCorners, geometry.numCorners());
 
-  double_array jacobian(1);
-  double det = 0.0;
+  scalar_array jacobian(1);
+  PylithScalar det = 0.0;
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    double_array vertices(data.vertices, numCorners*spaceDim);
-    double_array location(&data.locations[iLoc], 1);
+    scalar_array vertices(data.vertices, numCorners*spaceDim);
+    scalar_array location(&data.locations[iLoc], 1);
 
     geometry.jacobian(&jacobian, &det, vertices, location);
-    CPPUNIT_ASSERT_EQUAL(1.0, jacobian[0]);
-    CPPUNIT_ASSERT_EQUAL(1.0, det);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), jacobian[0]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), det);
   } //for
 } // testJacobian
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegrator.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegrator.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegrator.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 #include "pylith/feassemble/ElasticityImplicit.hh" // USES ElasticityImplicit
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 
 #include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
 
@@ -37,7 +37,7 @@
 pylith::feassemble::TestIntegrator::testTimeStep(void)
 { // testTimeStep
   ElasticityExplicit integrator;
-  const double dt = 1.2;
+  const PylithScalar dt = 1.2;
   integrator.timeStep(dt);
 
   CPPUNIT_ASSERT_EQUAL(dt, integrator._dt);
@@ -51,7 +51,8 @@
   ElasticityExplicit integrator;
   topology::Mesh mesh;
 
-  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXDOUBLE, integrator.stableTimeStep(mesh));
+  CPPUNIT_ASSERT_EQUAL(pylith::PYLITH_MAXSCALAR,
+		       integrator.stableTimeStep(mesh));
 } // testStableTimeStep
 
 // ----------------------------------------------------------------------
@@ -76,7 +77,7 @@
   // value of minJacobian
 
   Quadrature<topology::Mesh> quadrature;
-  const double minJacobian = 4.0;
+  const PylithScalar minJacobian = 4.0;
   quadrature.minJacobian(minJacobian);
   
   ElasticityExplicit integrator;
@@ -132,7 +133,7 @@
     quadrature.spaceDim() * quadrature.numBasis();
   CPPUNIT_ASSERT_EQUAL(size, integrator._cellVector.size());
   for (size_t i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(0.0, integrator._cellVector[i]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), integrator._cellVector[i]);
 } // testInitCellVector
 
 // ----------------------------------------------------------------------
@@ -155,7 +156,7 @@
     integrator._cellVector[i] = 1.4+2*i;
   integrator._resetCellVector();
   for (size_t i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(0.0, integrator._cellVector[i]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), integrator._cellVector[i]);
 } // testResetCellVector
 
 // ----------------------------------------------------------------------
@@ -176,7 +177,7 @@
     quadrature.spaceDim() * quadrature.numBasis();
   CPPUNIT_ASSERT_EQUAL(size, integrator._cellMatrix.size());
   for (size_t i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(0.0, integrator._cellMatrix[i]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), integrator._cellMatrix[i]);
 } // testInitCellMatrix
 
 // ----------------------------------------------------------------------
@@ -200,7 +201,7 @@
     integrator._cellMatrix[i] = 1.23 + 1.2*i;
   integrator._resetCellMatrix();
   for (size_t i=0; i < size; ++i)
-    CPPUNIT_ASSERT_EQUAL(0.0, integrator._cellMatrix[i]);
+    CPPUNIT_ASSERT_EQUAL(PylithScalar(0.0), integrator._cellMatrix[i]);
 } // testResetCellMatrix
 
 // ----------------------------------------------------------------------
@@ -225,12 +226,12 @@
     integrator._cellMatrix[i] = 1.23 + 1.2*i;
   integrator._lumpCellMatrix();
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   const int numBasis = quadrature.numBasis();
   const int spaceDim = quadrature.spaceDim();
   for (int iBasis=0; iBasis < numBasis; ++iBasis)
     for (int iDim=0; iDim < spaceDim; ++iDim) {
-      double value = 0;
+      PylithScalar value = 0;
       const int index = (iBasis*spaceDim+iDim)*numBasis*spaceDim;
       for (int jBasis=0; jBasis < numBasis; ++jBasis)
 	value += 1.23 + 1.2*(index+jBasis*spaceDim+iDim);
@@ -264,11 +265,11 @@
   const int numBasis = 2;
   const int numQuadPts = 1;
   const int spaceDim = 1;
-  const double basis[] = { 0.5, 0.5 };
-  const double basisDeriv[] = { -0.5, 0.5 };
-  const double quadPtsRef[] = { 0.0 };
-  const double quadWts[] = { 2.0 };
-  const double minJacobian = 1.0;
+  const PylithScalar basis[] = { 0.5, 0.5 };
+  const PylithScalar basisDeriv[] = { -0.5, 0.5 };
+  const PylithScalar quadPtsRef[] = { 0.0 };
+  const PylithScalar quadWts[] = { 2.0 };
+  const PylithScalar minJacobian = 1.0;
 
   quadrature->initialize(basis, numQuadPts, numBasis,
 			 basisDeriv, numQuadPts, numBasis, cellDim,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticity.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticity.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,25 +41,25 @@
   const int dim = 1;
   const int numBasis = 2;
   const int numQuadPts = 2;
-  const double basisDerivVals[] = {
+  const PylithScalar basisDerivVals[] = {
     -0.50, 0.50,
     -0.25, 0.25 };
   const int tensorSize = 1;
 
   // Let u(x) = 1 + 0.5 * x
-  const double dispVals[] = { 0.5, 1.5 };
-  const double strainE[] = { 0.5, 0.25 };
+  const PylithScalar dispVals[] = { 0.5, 1.5 };
+  const PylithScalar strainE[] = { 0.5, 0.25 };
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array disp(dispVals, numBasis*dim);
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array disp(dispVals, numBasis*dim);
 
   IntegratorElasticity::_calcTotalStrain1D(&strain,
 					   basisDeriv, disp, numBasis, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
@@ -80,7 +80,7 @@
   const int dim = 2;
   const int numBasis = 3;
   const int numQuadPts = 2;
-  const double basisDerivVals[] = {
+  const PylithScalar basisDerivVals[] = {
     +1.0,  0.0,   0.0, +1.0,   -1.0, -1.0,
     +2.0,  0.0,   0.0, +2.0,   -2.0, -2.0
   };
@@ -88,26 +88,26 @@
 
   // Let ux(x,y) = +0.4 + 0.3*x + 0.8*y
   // Ley uy(x,y) = -2.0 + 0.5*x - 0.2*y
-  const double dispVals[] = {
+  const PylithScalar dispVals[] = {
     0.7, -1.5,
     1.2, -2.2,
     0.4, -2.0
   };
-  const double strainE[] = {
+  const PylithScalar strainE[] = {
     0.3, -0.2, 0.65,
     0.6, -0.4, 1.3
   };
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array disp(dispVals, numBasis*dim);
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array disp(dispVals, numBasis*dim);
 
   IntegratorElasticity::_calcTotalStrain2D(&strain, basisDeriv, disp,
 					   numBasis, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
@@ -130,7 +130,7 @@
   const int dim = 3;
   const int numBasis = 4;
   const int numQuadPts = 2;
-  const double basisDerivVals[] = {
+  const PylithScalar basisDerivVals[] = {
     +1.0,  0.0,  0.0, // Quad pt 0
      0.0, +1.0,  0.0,
      0.0,  0.0, +1.0,
@@ -145,27 +145,27 @@
   // Let ux(x,y,z) = +0.4 + 0.3*x + 0.8*y + 0.4*z
   // Ley uy(x,y,z) = -2.0 + 0.5*x - 0.2*y + 1.2*z
   // Ley uz(x,y,z) = -1.0 + 0.2*x - 0.7*y - 0.3*z
-  const double dispVals[] = {
+  const PylithScalar dispVals[] = {
     0.7, -1.5, -0.8,
     1.2, -2.2, -1.7,
     0.8, -0.8, -1.3,
     0.4, -2.0, -1.0
   };
-  const double strainE[] = {
+  const PylithScalar strainE[] = {
     0.3, -0.2, -0.3, 0.65, 0.25, 0.3,
     0.9, -0.6, -0.9, 1.95, 0.75, 0.9
   };
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array disp(dispVals, numBasis*dim);
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array disp(dispVals, numBasis*dim);
 
   IntegratorElasticity::_calcTotalStrain3D(&strain, basisDeriv, disp,
 					   numBasis, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestIntegratorElasticityLgDeform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,25 +40,25 @@
   const int dim = 1;
   const int numBasis = 2;
   const int numQuadPts = 2;
-  const double verticesVals[] = { -1.0, 1.0 };
-  const double basisDerivVals[] = {
+  const PylithScalar verticesVals[] = { -1.0, 1.0 };
+  const PylithScalar basisDerivVals[] = {
     -0.50, 0.50,
     -0.50, 0.50 };
   const int tensorSize = 1;
 
   const int size = numQuadPts * dim*dim;
-  double_array deform(size);    
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array vertices(verticesVals, numBasis*dim);
+  scalar_array deform(size);    
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array vertices(verticesVals, numBasis*dim);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   { // Rigid body translation
     // u(x) = 1.0
-    const double dispVals[] = { 1.0, 1.0 };
-    const double deformE[] = { 1.0, 1.0 };
+    const PylithScalar dispVals[] = { 1.0, 1.0 };
+    const PylithScalar deformE[] = { 1.0, 1.0 };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -71,10 +71,10 @@
 
   { // Uniform strain
     // u(x) = 0.1*x
-    const double dispVals[] = { -0.1, 0.1 };
-    const double deformE[] = { 1.1, 1.1 };
+    const PylithScalar dispVals[] = { -0.1, 0.1 };
+    const PylithScalar deformE[] = { 1.1, 1.1 };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -100,38 +100,38 @@
   const int dim = 2;
   const int numBasis = 3;
   const int numQuadPts = 2;
-  const double verticesVals[] = {
+  const PylithScalar verticesVals[] = {
     1.0, 0.0,
     0.0, 1.0, 
     0.0, 0.0,
   };
-  const double basisDerivVals[] = {
+  const PylithScalar basisDerivVals[] = {
     +1.0,  0.0,   0.0, +1.0,   -1.0, -1.0,
     +1.0,  0.0,   0.0, +1.0,   -1.0, -1.0
   };
   const int tensorSize = 3;
 
   const int size = numQuadPts * dim*dim;
-  double_array deform(size);    
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array vertices(verticesVals, numBasis*dim);
+  scalar_array deform(size);    
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array vertices(verticesVals, numBasis*dim);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   { // Rigid body translation
     // ux(x,y) = 0.5
     // uy(x,y) = 0.2
-    const double dispVals[] = {
+    const PylithScalar dispVals[] = {
       0.5, 0.2,
       0.5, 0.2,
       0.5, 0.2,
     };
-    const double deformE[] = {
+    const PylithScalar deformE[] = {
       1.0, 0.0,   0.0, 1.0,
       1.0, 0.0,   0.0, 1.0,
     };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -146,9 +146,9 @@
     // ux(x,y) = 0.5 + cos(theta)*x + sin(theta)*y - x0
     // uy(x,y) = 0.2 - sin(theta)*x + cos(theta)*y - y0
     // theta = pi/6
-    const double pi = 4.0*atan(1.0);
-    const double theta = pi / 6.0;
-    const double dispVals[] = {
+    const PylithScalar pi = 4.0*atan(1.0);
+    const PylithScalar theta = pi / 6.0;
+    const PylithScalar dispVals[] = {
       0.5+cos(theta)*1.0+sin(theta)*0.0-1.0,
       0.2-sin(theta)*1.0+cos(theta)*0.0-0.0,
 
@@ -158,12 +158,12 @@
       0.5+cos(theta)*0.0+sin(theta)*0.0-0.0,
       0.2-sin(theta)*0.0+cos(theta)*0.0-0.0,
     };
-    const double deformE[] = {
+    const PylithScalar deformE[] = {
       cos(theta), sin(theta), -sin(theta), cos(theta),
       cos(theta), sin(theta), -sin(theta), cos(theta),
     };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -177,17 +177,17 @@
   { // Uniform strain
     // Let ux(x,y) = +0.4 + 0.3*x + 0.8*y
     // Ley uy(x,y) = -2.0 + 0.5*x - 0.2*y
-    const double dispVals[] = {
+    const PylithScalar dispVals[] = {
       0.7, -1.5,
       1.2, -2.2,
       0.4, -2.0
     };
-    const double deformE[] = {
+    const PylithScalar deformE[] = {
       1.3, 0.8,   0.5, 0.8,
       1.3, 0.8,   0.5, 0.8,
     };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -223,7 +223,7 @@
   const int dim = 3;
   const int numBasis = 8;
   const int numQuadPts = 1;
-  const double verticesVals[] = {
+  const PylithScalar verticesVals[] = {
     -1.0, -1.0, -1.0,
     +1.0, -1.0, -1.0,
     +1.0, +1.0, -1.0,
@@ -233,7 +233,7 @@
     +1.0, +1.0, +1.0,
     -1.0, +1.0, +1.0,
   };
-  const double basisDerivVals[] = {
+  const PylithScalar basisDerivVals[] = {
     -0.125, -0.125, -0.125,
     +0.125, -0.125, -0.125,
     +0.125, +0.125, -0.125,
@@ -246,17 +246,17 @@
   const int tensorSize = 3;
 
   const int size = numQuadPts * dim*dim;
-  double_array deform(size);    
-  double_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
-  double_array vertices(verticesVals, numBasis*dim);
+  scalar_array deform(size);    
+  scalar_array basisDeriv(basisDerivVals, numQuadPts*numBasis*dim);
+  scalar_array vertices(verticesVals, numBasis*dim);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   { // Rigid body translation
     // ux(x,y,z) = 0.5
     // uy(x,y,z) = 0.2
     // uz(x,y,z) = 0.3
-    const double dispVals[] = {
+    const PylithScalar dispVals[] = {
       0.5, 0.2, 0.3,
       0.5, 0.2, 0.3,
       0.5, 0.2, 0.3,
@@ -266,12 +266,12 @@
       0.5, 0.2, 0.3,
       0.5, 0.2, 0.3,
     };
-    const double deformE[] = {
+    const PylithScalar deformE[] = {
       1.0, 0.0, 0.0,   0.0, 1.0, 0.0,  0.0, 0.0, 1.0,
       1.0, 0.0, 0.0,   0.0, 1.0, 0.0,  0.0, 0.0, 1.0,
     };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -286,7 +286,7 @@
     // Let ux(x,y,z) = +0.4 + 0.3*x + 0.8*y - 0.2*z
     // Ley uy(x,y,z) = -2.0 + 0.5*x - 0.2*y + 0.6*z
     // Ley uz(x,y,z) = +0.7 + 0.8*x - 0.9*y - 0.1*z
-    const double dispVals[] = {
+    const PylithScalar dispVals[] = {
       +0.4+0.3*-1+0.8*-1-0.2*-1,
       -2.0+0.5*-1-0.2*-1+0.6*-1,
       +0.7+0.8*-1-0.9*-1-0.1*-1,
@@ -320,13 +320,13 @@
       +0.7+0.8*-1-0.9*+1-0.1*+1,
 
     };
-    const double deformE[] = {
+    const PylithScalar deformE[] = {
       1.3, 0.8, -0.2,
       0.5, 0.8, 0.6,
       0.8, -0.9, 0.9,
     };
     
-    double_array disp(dispVals, numBasis*dim);
+    scalar_array disp(dispVals, numBasis*dim);
     
     IntegratorElasticityLgDeform::_calcDeformation(&deform,
 						   basisDeriv, vertices, disp,
@@ -347,23 +347,23 @@
   // X = [ 2.0 ], [ 0.4 ]
   const int dim = 1;
   const int numQuadPts = 2;
-  const double deformVals[] = {
+  const PylithScalar deformVals[] = {
     2.0,  0.4,
   };
-  const double strainE[] = {
+  const PylithScalar strainE[] = {
     0.5*(2.0*2.0-1.0),  0.5*(0.4*0.4-1.0),
   };
   const int tensorSize = 1;
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array deform(deformVals, numQuadPts*dim*dim);
+  scalar_array deform(deformVals, numQuadPts*dim*dim);
 
   IntegratorElasticityLgDeform::_calcTotalStrain1D(&strain,
 						   deform, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
@@ -379,25 +379,25 @@
   //     [ 0.6, 1.4 ],   [ -0.9, 0.8 ]
   const int dim = 2;
   const int numQuadPts = 2;
-  const double deformVals[] = {
+  const PylithScalar deformVals[] = {
     2.0,  0.4, 0.6, 1.4,
     1.5, 0.2, -0.9, 0.8,
   };
-  const double strainE[] = {
+  const PylithScalar strainE[] = {
     1.68, 0.56, 0.82,
     1.03, -0.16, -0.21,
   };
   const int tensorSize = 3;
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array deform(deformVals, numQuadPts*dim*dim);
+  scalar_array deform(deformVals, numQuadPts*dim*dim);
 
   IntegratorElasticityLgDeform::_calcTotalStrain2D(&strain,
 						   deform, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);
@@ -414,25 +414,25 @@
   //     [ -0.1, 0.6,  1.0 ],   [ -0.8, 0.5,  1.2 ]
   const int dim = 3;
   const int numQuadPts = 2;
-  const double deformVals[] = {
+  const PylithScalar deformVals[] = {
     2.0,  0.4, 0.3,  0.6, 1.4, -0.8,  -0.1, 0.6, 1.0,
     1.5, 0.2, -0.1,  -0.9, 0.8, 0.3,  -0.8, 0.5, 1.2,
   };
-  const double strainE[] = {
+  const PylithScalar strainE[] = {
     1.685, 0.74, 0.365, 0.79, -0.2, 0.01,
     1.35, -0.035, 0.27, -0.41, 0.41, -0.69,
   };
   const int tensorSize = 6;
 
   const int size = numQuadPts * tensorSize;
-  double_array strain(size);
+  scalar_array strain(size);
 
-  double_array deform(deformVals, numQuadPts*dim*dim);
+  scalar_array deform(deformVals, numQuadPts*dim*dim);
 
   IntegratorElasticityLgDeform::_calcTotalStrain3D(&strain,
 						   deform, numQuadPts);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_EQUAL(size, int(strain.size()));
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(strainE[i], strain[i], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,20 +41,20 @@
 pylith::feassemble::TestQuadrature::testCopyConstructor(void)
 { // testClone
   // Semi-random values manually set to check cloning
-  const double minJacobianE = 1.0;
+  const PylithScalar minJacobianE = 1.0;
   const bool checkConditioning = true;
   const int cellDimE = 1;
   const int numBasisE = 2;
   const int numQuadPtsE = 1;
   const int spaceDimE = 1;
-  const double basisE[] = { 0.2, 0.4 };
-  const double basisDerivE[] = { 0.8, 1.6 };
-  const double quadPtsRefE[] = { 3.2 };
-  const double quadWtsE[] = { 6.4 };
-  const double quadPtsE[] = { 12.8 };
-  const double jacobianE[] = { 2.56 };
-  const double jacobianInvE[] = { 5.12 };
-  const double jacobianDetE[] = { 10.24 };
+  const PylithScalar basisE[] = { 0.2, 0.4 };
+  const PylithScalar basisDerivE[] = { 0.8, 1.6 };
+  const PylithScalar quadPtsRefE[] = { 3.2 };
+  const PylithScalar quadWtsE[] = { 6.4 };
+  const PylithScalar quadPtsE[] = { 12.8 };
+  const PylithScalar jacobianE[] = { 2.56 };
+  const PylithScalar jacobianInvE[] = { 5.12 };
+  const PylithScalar jacobianDetE[] = { 10.24 };
   GeometryLine1D geometry;
 
   // Set values
@@ -80,25 +80,25 @@
   CPPUNIT_ASSERT_EQUAL(numQuadPtsE, qCopy.numQuadPts());
   CPPUNIT_ASSERT_EQUAL(spaceDimE, qCopy.spaceDim());
 
-  const double_array& basis = qCopy.basis();
+  const scalar_array& basis = qCopy.basis();
   size_t size = numBasisE * numQuadPtsE;
   CPPUNIT_ASSERT_EQUAL(size, basis.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(basisE[i], basis[i]);
 
-  const double_array& basisDerivRef = qCopy._basisDerivRef;
+  const scalar_array& basisDerivRef = qCopy._basisDerivRef;
   size = numBasisE * numQuadPtsE * spaceDimE;
   CPPUNIT_ASSERT_EQUAL(size, basisDerivRef.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(basisDerivE[i], basisDerivRef[i]);
 
-  const double_array& quadPtsRef = qCopy._quadPtsRef;
+  const scalar_array& quadPtsRef = qCopy._quadPtsRef;
   size = numQuadPtsE * cellDimE;
   CPPUNIT_ASSERT_EQUAL(size, quadPtsRef.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(quadPtsRefE[i], quadPtsRef[i]);
 
-  const double_array& quadWts = qCopy.quadWts();
+  const scalar_array& quadWts = qCopy.quadWts();
   size = numQuadPtsE;
   CPPUNIT_ASSERT_EQUAL(size, quadWts.size());
   for (int i=0; i < size; ++i)
@@ -132,18 +132,18 @@
   const int numBasis = 5;
   const int numQuadPts = 1;
   const int spaceDim = 3;
-  const double basis[] = { 
+  const PylithScalar basis[] = { 
     1.1, 1.2, 1.3, 1.4, 1.5
   };
-  const double basisDerivRef[] = {
+  const PylithScalar basisDerivRef[] = {
     2.1, 2.2, 2.3,
     2.4, 2.5, 2.6,
     2.7, 2.8, 2.9,
     2.10, 2.11, 2.12,
     2.13, 2.14, 2.15,
   };
-  const double quadPtsRef[] = { 3.1, 3.2, 3.3 };
-  const double quadWts[] = { 4.0 };
+  const PylithScalar quadPtsRef[] = { 3.1, 3.2, 3.3 };
+  const PylithScalar quadWts[] = { 4.0 };
 
   QuadratureRefCell refCell;
   refCell.initialize(basis, numQuadPts, numBasis,
@@ -187,13 +187,13 @@
   const int spaceDim = data.spaceDim;
 
   const int numCells = data.numCells;
-  const double* vertCoords = data.vertices;
-  const double* quadPtsE = data.quadPts;
-  const double* jacobianE = data.jacobian;
-  const double* jacobianDetE = data.jacobianDet;
-  const double* basisDerivE = data.basisDeriv;
+  const PylithScalar* vertCoords = data.vertices;
+  const PylithScalar* quadPtsE = data.quadPts;
+  const PylithScalar* jacobianE = data.jacobian;
+  const PylithScalar* jacobianDetE = data.jacobianDet;
+  const PylithScalar* basisDerivE = data.basisDeriv;
 
-  const double minJacobian = 1.0e-06;
+  const PylithScalar minJacobian = 1.0e-06;
 
   // Create mesh with test cell
   topology::Mesh mesh(data.cellDim);
@@ -236,7 +236,7 @@
 #if defined(PRECOMPUTE_GEOMETRY)
   quadrature.computeGeometry(mesh, cells);
 #else
-  double_array coordinatesCell(numBasis*spaceDim);
+  scalar_array coordinatesCell(numBasis*spaceDim);
   const ALE::Obj<topology::Mesh::RealSection>& coordinates = 
     sieveMesh->getRealSection("coordinates");
   assert(!coordinates.isNull());
@@ -247,7 +247,7 @@
   size_t size = 0;
 
   // Check values from computeGeometry()
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const SieveMesh::label_sequence::iterator cellsEnd = cells->end(); 
   for (SieveMesh::label_sequence::iterator c_iter=cells->begin();
        c_iter != cellsEnd;
@@ -260,25 +260,25 @@
     quadrature.computeGeometry(coordinatesCell, *c_iter);    
 #endif
 
-    const double_array& quadPts = quadrature.quadPts();
+    const scalar_array& quadPts = quadrature.quadPts();
     size = numQuadPts * spaceDim;
     CPPUNIT_ASSERT_EQUAL(size, quadPts.size());
     for (size_t i=0; i < size; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPtsE[i], quadPts[i], tolerance);
 
-    const double_array& jacobian = quadrature.jacobian();
+    const scalar_array& jacobian = quadrature.jacobian();
     size = numQuadPts * cellDim * spaceDim;
     CPPUNIT_ASSERT_EQUAL(size, jacobian.size());
     for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianE[i], jacobian[i], tolerance);
 
-    const double_array& jacobianDet = quadrature.jacobianDet();
+    const scalar_array& jacobianDet = quadrature.jacobianDet();
     size = numQuadPts;
     CPPUNIT_ASSERT_EQUAL(size, jacobianDet.size());
     for (size_t i=0; i < size; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDetE[i], jacobianDet[i], tolerance);
     
-    const double_array& basisDeriv = quadrature.basisDeriv();
+    const scalar_array& basisDeriv = quadrature.basisDeriv();
     size = numQuadPts * numBasis * spaceDim;
     CPPUNIT_ASSERT_EQUAL(size, basisDeriv.size());
     for (size_t i=0; i < size; ++i)
@@ -309,13 +309,13 @@
   const int spaceDim = data.spaceDim;
 
   const int numCells = data.numCells;
-  double_array vertCoords(data.vertices, numBasis*spaceDim);
-  const double* quadPtsE = data.quadPts;
-  const double* jacobianE = data.jacobian;
-  const double* jacobianDetE = data.jacobianDet;
-  const double* basisDerivE = data.basisDeriv;
+  scalar_array vertCoords(data.vertices, numBasis*spaceDim);
+  const PylithScalar* quadPtsE = data.quadPts;
+  const PylithScalar* jacobianE = data.jacobian;
+  const PylithScalar* jacobianDetE = data.jacobianDet;
+  const PylithScalar* basisDerivE = data.basisDeriv;
 
-  const double minJacobian = 1.0e-06;
+  const PylithScalar minJacobian = 1.0e-06;
 
 #if 0
   // Create mesh with test cell
@@ -365,27 +365,27 @@
   size_t size = 0;
 
   // Check values from computeGeometry()
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
-  const double_array& quadPts = quadrature.quadPts();
+  const scalar_array& quadPts = quadrature.quadPts();
   size = numQuadPts * spaceDim;
   CPPUNIT_ASSERT_EQUAL(size, quadPts.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPtsE[i], quadPts[i], tolerance);
   
-  const double_array& jacobian = quadrature.jacobian();
+  const scalar_array& jacobian = quadrature.jacobian();
   size = numQuadPts * cellDim * spaceDim;
   CPPUNIT_ASSERT_EQUAL(size, jacobian.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianE[i], jacobian[i], tolerance);
   
-  const double_array& jacobianDet = quadrature.jacobianDet();
+  const scalar_array& jacobianDet = quadrature.jacobianDet();
   size = numQuadPts;
   CPPUNIT_ASSERT_EQUAL(size, jacobianDet.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobianDetE[i], jacobianDet[i], tolerance);
   
-  const double_array& basisDeriv = quadrature.basisDeriv();
+  const scalar_array& basisDeriv = quadrature.basisDeriv();
   size = numQuadPts * numBasis * spaceDim;
   CPPUNIT_ASSERT_EQUAL(size, basisDeriv.size());
   for (size_t i=0; i < size; ++i)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature0D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature0D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadrature0D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,23 +44,23 @@
   const int numBasis = 1;
   const int numQuadPts = 1;
   const int spaceDim = 1;
-  const double basis[] = { 1.0 };
-  const double basisDerivRef[] = { 1.0 };
-  const double quadPtsRef[] = { 0.0 };
-  const double quadWts[] = { 1.0 };
+  const PylithScalar basis[] = { 1.0 };
+  const PylithScalar basisDerivRef[] = { 1.0 };
+  const PylithScalar quadPtsRef[] = { 0.0 };
+  const PylithScalar quadWts[] = { 1.0 };
 
   const int numVertices = 1;
   const int numCells = 1;
-  const double vertCoordsData[] = { 1.1 };
+  const PylithScalar vertCoordsData[] = { 1.1 };
   const int cells[] = { 0 };
-  const double quadPts[] = { 1.1 };
-  const double jacobian[] = { 1.0 };
-  const double jacobianInv[] = { 1.0 };
-  const double jacobianDet[] = { 1.0 };
+  const PylithScalar quadPts[] = { 1.1 };
+  const PylithScalar jacobian[] = { 1.0 };
+  const PylithScalar jacobianInv[] = { 1.0 };
+  const PylithScalar jacobianDet[] = { 1.0 };
 
-  double_array vertCoords(vertCoordsData, numBasis*spaceDim);
+  scalar_array vertCoords(vertCoordsData, numBasis*spaceDim);
 
-  const double minJacobian = 1.0e-06;
+  const PylithScalar minJacobian = 1.0e-06;
   
   QuadratureRefCell refCell;
   refCell.minJacobian(minJacobian);
@@ -75,7 +75,7 @@
   engine.initialize();
   engine.computeGeometry(vertCoords, 0);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPts[0], engine._quadPts[0], 
 			       tolerance);
   CPPUNIT_ASSERT_DOUBLES_EQUAL(jacobian[0], engine._jacobian[0], 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureEngine.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureEngine.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureEngine.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,11 +36,11 @@
 pylith::feassemble::TestQuadratureEngine::testCopyConstructor(void)
 { // testClone
   // Semi-random values manually set to check cloning
-  const double quadPtsE[] = { 12.8 };
-  const double jacobianE[] = { 2.56 };
-  const double jacobianInvE[] = { 5.12 };
-  const double jacobianDetE[] = { 10.24 };
-  const double basisDerivE[] = { 0.8, 1.6 };
+  const PylithScalar quadPtsE[] = { 12.8 };
+  const PylithScalar jacobianE[] = { 2.56 };
+  const PylithScalar jacobianInvE[] = { 5.12 };
+  const PylithScalar jacobianDetE[] = { 10.24 };
+  const PylithScalar basisDerivE[] = { 0.8, 1.6 };
 
   QuadratureRefCell refCell;
 
@@ -50,43 +50,43 @@
   // Set values
   size = 1;
   engineOrig._quadPts.resize(size);
-  memcpy(&engineOrig._quadPts[0], quadPtsE, size*sizeof(double));
+  memcpy(&engineOrig._quadPts[0], quadPtsE, size*sizeof(PylithScalar));
 
   size = 1;
   engineOrig._jacobian.resize(size);
-  memcpy(&engineOrig._jacobian[0], jacobianE, size*sizeof(double));
+  memcpy(&engineOrig._jacobian[0], jacobianE, size*sizeof(PylithScalar));
 
   size = 1;
   engineOrig._jacobianInv.resize(size);
-  memcpy(&engineOrig._jacobianInv[0], jacobianInvE, size*sizeof(double));
+  memcpy(&engineOrig._jacobianInv[0], jacobianInvE, size*sizeof(PylithScalar));
 
   size = 1;
   engineOrig._jacobianDet.resize(size);
-  memcpy(&engineOrig._jacobianDet[0], jacobianDetE, size*sizeof(double));
+  memcpy(&engineOrig._jacobianDet[0], jacobianDetE, size*sizeof(PylithScalar));
 
   // Copy
   const QuadratureEngine* engine = engineOrig.clone();
   CPPUNIT_ASSERT(0 != engine);
 
-  const double_array& quadPts = engine->quadPts();
+  const scalar_array& quadPts = engine->quadPts();
   size = 1;
   CPPUNIT_ASSERT_EQUAL(size, quadPts.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(quadPtsE[i], quadPts[i]);
 
-  const double_array& jacobian = engine->_jacobian;
+  const scalar_array& jacobian = engine->_jacobian;
   size = 1;
   CPPUNIT_ASSERT_EQUAL(size, jacobian.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(jacobianE[i], jacobian[i]);
 
-  const double_array& jacobianInv = engine->_jacobianInv;
+  const scalar_array& jacobianInv = engine->_jacobianInv;
   size = 1;
   CPPUNIT_ASSERT_EQUAL(size, jacobianInv.size());
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_EQUAL(jacobianInvE[i], jacobianInv[i]);
 
-  const double_array& jacobianDet = engine->jacobianDet();
+  const scalar_array& jacobianDet = engine->jacobianDet();
   size = 1;
   CPPUNIT_ASSERT_EQUAL(size, jacobianDet.size());
   for (int i=0; i < size; ++i)
@@ -104,18 +104,18 @@
   const int numBasis = 5;
   const int numQuadPts = 1;
   const int spaceDim = 3;
-  const double basis[] = { 
+  const PylithScalar basis[] = { 
     1.1, 1.2, 1.3, 1.4, 1.5
   };
-  const double basisDerivRef[] = {
+  const PylithScalar basisDerivRef[] = {
     2.1, 2.2, 2.3,
     2.4, 2.5, 2.6,
     2.7, 2.8, 2.9,
     2.10, 2.11, 2.12,
     2.13, 2.14, 2.15,
   };
-  const double quadPtsRef[] = { 3.1, 3.2, 3.3 };
-  const double quadWts[] = { 4.0 };
+  const PylithScalar quadPtsRef[] = { 3.1, 3.2, 3.3 };
+  const PylithScalar quadWts[] = { 4.0 };
 
   QuadratureRefCell refCell;
   refCell.initialize(basis, numQuadPts, numBasis,
@@ -157,26 +157,26 @@
   const int numBasis = data.numBasis;
   const int numQuadPts = data.numQuadPts;
   const int spaceDim = data.spaceDim;
-  const double* basis = data.basis;
-  const double* basisDerivRef = data.basisDerivRef;
-  const double* quadPtsRef = data.quadPtsRef;
-  const double* quadWts = data.quadWts;
+  const PylithScalar* basis = data.basis;
+  const PylithScalar* basisDerivRef = data.basisDerivRef;
+  const PylithScalar* quadPtsRef = data.quadPtsRef;
+  const PylithScalar* quadWts = data.quadWts;
 
   const int numVertices = data.numVertices;
   const int numCells = data.numCells;
-  const double_array vertCoords(data.vertices, numBasis*spaceDim);
+  const scalar_array vertCoords(data.vertices, numBasis*spaceDim);
   const int* cells = data.cells;
-  const double* quadPtsE = data.quadPts;
-  const double* jacobianE = data.jacobian;
-  const double* jacobianInvE = data.jacobianInv;
-  const double* jacobianDetE = data.jacobianDet;
-  const double* basisDerivE = data.basisDeriv;
+  const PylithScalar* quadPtsE = data.quadPts;
+  const PylithScalar* jacobianE = data.jacobian;
+  const PylithScalar* jacobianInvE = data.jacobianInv;
+  const PylithScalar* jacobianDetE = data.jacobianDet;
+  const PylithScalar* basisDerivE = data.basisDeriv;
 
   CPPUNIT_ASSERT(1 == numCells);
   CPPUNIT_ASSERT(0 != engine);
   CPPUNIT_ASSERT(0 != refCell);
 
-  const double minJacobian = 1.0e-06;
+  const PylithScalar minJacobian = 1.0e-06;
   refCell->minJacobian(minJacobian);
   refCell->initialize(basis, numQuadPts, numBasis,
 		      basisDerivRef, numQuadPts, numBasis, cellDim,
@@ -188,7 +188,7 @@
   engine->initialize();
   engine->computeGeometry(vertCoords, 0);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   int size = numQuadPts * spaceDim;
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(quadPtsE[i], engine->_quadPts[i], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureRefCell.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureRefCell.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestQuadratureRefCell.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -45,7 +45,7 @@
 { // testMinJacobian
   QuadratureRefCell q;
 
-  const double min = 1.0;
+  const PylithScalar min = 1.0;
   q.minJacobian(min);
   CPPUNIT_ASSERT_EQUAL(min, q._minJacobian);
 } // testMinJacobian
@@ -76,11 +76,11 @@
   const int numBasis = 2;
   const int numQuadPts = 1;
   const int spaceDim = 1;
-  const double basis[] = { 0.5, 0.5 };
-  const double basisDerivRef[] = { -0.5, 0.5 };
-  const double quadPtsRef[] = { 0.0 };
-  const double quadWts[] = { 2.0 };
-  const double minJacobian = 1.0;
+  const PylithScalar basis[] = { 0.5, 0.5 };
+  const PylithScalar basisDerivRef[] = { -0.5, 0.5 };
+  const PylithScalar quadPtsRef[] = { 0.0 };
+  const PylithScalar quadWts[] = { 2.0 };
+  const PylithScalar minJacobian = 1.0;
 
   QuadratureRefCell q;
   q.initialize(basis, numQuadPts, numBasis,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/CellGeomData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/CellGeomData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/CellGeomData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_feassemble_cellgeomdata_hh)
 #define pylith_feassemble_cellgeomdata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace feassemble {
      class CellGeomData;
@@ -46,11 +48,11 @@
 
   int numLocs; ///< Number of locations
 
-  double* gravityVec; ///< Gravity vector for problem
-  double* vertices; ///< Coordinates of vertices of cell
-  double* locations; ///< Locations where Jacobian is computed
-  double* jacobian; ///< Jacobian at locations
-  double* jacobianDet; ///< Determinant of Jacobian at locations
+  PylithScalar* gravityVec; ///< Gravity vector for problem
+  PylithScalar* vertices; ///< Coordinates of vertices of cell
+  PylithScalar* locations; ///< Locations where Jacobian is computed
+  PylithScalar* jacobian; ///< Jacobian at locations
+  PylithScalar* jacobianDet; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitApp.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitApp.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitApp.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -85,10 +85,10 @@
 
     ElasticityApp._initData(self)
     # Calculated values
-    self.data.addArray(vtype="double", name="_valsResidualLumped",
+    self.data.addArray(vtype="PylithScalar", name="_valsResidualLumped",
                        values=self.valsResidualLumped,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_valsJacobianLumped",
+    self.data.addArray(vtype="PylithScalar", name="_valsJacobianLumped",
                        values=self.valsJacobianLumped,
                        format="%16.8e", ncols=self.spaceDim)
     return

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -44,8 +44,8 @@
 
   /// @name Calculated values.
   //@{
-  double* valsResidualLumped; ///< Expected values from residual calculation (lumped Jacobian).
-  double* valsJacobianLumped; ///< Expected values from lumped Jacobian calculation.
+  PylithScalar* valsResidualLumped; ///< Expected values from residual calculation (lumped Jacobian).
+  PylithScalar* valsJacobianLumped; ///< Expected values from lumped Jacobian calculation.
   //@}
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,62 +56,62 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidual[] = {
   1.71634375e+10,
  -1.72365625e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_valsJacobian[] = {
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_valsResidualLumped[] = {
   1.71690625e+10,
  -1.72421875e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DLinear::_valsJacobianLumped[] = {
   2.81250000e+07,
   2.81250000e+07,
 };
@@ -129,21 +129,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData1DLinear::~ElasticityExplicitData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsResidual[] = {
   6.00504167e+10,
   1.45260729e+11,
  -2.05377708e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsJacobian[] = {
   6.25000000e+06,
  -3.12500000e+06,
   6.25000000e+06,
@@ -126,13 +126,13 @@
   2.50000000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsResidualLumped[] = {
   6.00563542e+10,
   1.45266667e+11,
  -2.05389583e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData1DQuadratic::_valsJacobianLumped[] = {
   9.37500000e+06,
   9.37500000e+06,
   3.75000000e+07,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData1DQuadratic::~ElasticityExplicitData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidual[] = {
  -7.10095578e+10,  1.36893348e+11,
  -1.02829242e+10, -1.20976325e+11,
   8.12828570e+10, -1.59202314e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobian[] = {
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
@@ -126,13 +126,13 @@
   0.00000000e+00,  1.52777778e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidualLumped[] = {
  -7.10086411e+10,  1.36894418e+11,
  -1.02842992e+10, -1.20980297e+11,
   8.12833153e+10, -1.59173286e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobianLumped[] = {
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData2DLinear::~ElasticityExplicitData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidual[] = {
   1.14469580e+10,  9.89206525e+10,
  -3.22261697e+10, -5.24164966e+09,
   5.33382294e+09,  6.79748894e+10,
@@ -178,7 +178,7 @@
   1.58455201e+10, -6.90098433e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobian[] = {
   2.24121094e+06,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
@@ -253,7 +253,7 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsResidualLumped[] = {
   1.14454133e+10,  9.89209294e+10,
  -3.22283567e+10, -5.24308887e+09,
   5.33172309e+09,  6.79741797e+10,
@@ -262,7 +262,7 @@
   1.58484937e+10, -6.90064316e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData2DQuadratic::_valsJacobianLumped[] = {
   4.21875000e+06,  4.21875000e+06,
   3.98437500e+06,  3.98437500e+06,
   3.98437500e+06,  3.98437500e+06,
@@ -284,21 +284,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData2DQuadratic::~ElasticityExplicitData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidual[] = {
  -6.53693819e+09,  3.88079833e+10,  3.46544326e+09,
  -4.32000975e+09,  7.13967240e+10,  2.36593900e+10,
   7.21670494e+09, -1.13026998e+11, -3.40757835e+10,
   3.64360549e+09,  2.82229089e+09,  6.95364028e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobian[] = {
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
@@ -163,14 +163,14 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_valsResidualLumped[] = {
  -6.53643381e+09,  3.88073108e+10,  3.46544326e+09,
  -4.31950537e+09,  7.13977327e+10,  2.36607350e+10,
   7.21485556e+09, -1.13028007e+11, -3.40771285e+10,
   3.64444612e+09,  2.82296339e+09,  6.95364028e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DLinear::_valsJacobianLumped[] = {
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
@@ -190,21 +190,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData3DLinear::~ElasticityExplicitData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsResidual[] = {
   2.17054586e+10, -1.01739898e+10,  2.19940105e+10,
   6.44485026e+10, -2.49355435e+10,  6.57568524e+09,
  -4.99706922e+10, -5.58679967e+10, -3.45875247e+10,
@@ -199,7 +199,7 @@
   5.77073439e+10, -6.86734841e+10,  9.70537069e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsJacobian[] = {
   1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
@@ -502,7 +502,7 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsResidualLumped[] = {
   2.17058857e+10, -1.01733961e+10,  2.19900081e+10,
   6.44476753e+10, -2.49368998e+10,  6.57917072e+09,
  -4.99716018e+10, -5.58679351e+10, -3.45875383e+10,
@@ -515,7 +515,7 @@
   5.76997342e+10, -6.86862545e+10,  9.70617888e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitData3DQuadratic::_valsJacobianLumped[] = {
   2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
   2.40117187e+06,  2.40117187e+06,  2.40117187e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
@@ -541,21 +541,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitData3DQuadratic::~ElasticityExplicitData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,62 +56,62 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidual[] = {
  -2.64086562e+11,
  -2.98486562e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobian[] = {
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsResidualLumped[] = {
  -2.64080938e+11,
  -2.98492188e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DLinear::_valsJacobianLumped[] = {
   2.81250000e+07,
   2.81250000e+07,
 };
@@ -129,21 +129,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData1DLinear::~ElasticityExplicitGravData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidual[] = {
  -3.36995833e+10,
   5.15107292e+10,
  -5.80377708e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobian[] = {
   6.25000000e+06,
  -3.12500000e+06,
   6.25000000e+06,
@@ -126,13 +126,13 @@
   2.50000000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsResidualLumped[] = {
  -3.36936458e+10,
   5.15166667e+10,
  -5.80389583e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData1DQuadratic::_valsJacobianLumped[] = {
   9.37500000e+06,
   9.37500000e+06,
   3.75000000e+07,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData1DQuadratic::~ElasticityExplicitGravData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidual[] = {
  -7.10095578e+10,  9.10600148e+10,
  -1.02829242e+10, -1.66809658e+11,
   8.12828570e+10, -6.17535647e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobian[] = {
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
@@ -126,13 +126,13 @@
   0.00000000e+00,  1.52777778e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidualLumped[] = {
  -7.10086411e+10,  9.10610843e+10,
  -1.02842992e+10, -1.66813631e+11,
   8.12833153e+10, -6.17506619e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobianLumped[] = {
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData2DLinear::~ElasticityExplicitGravData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidual[] = {
   1.14469580e+10,  5.67331525e+10,
  -3.22261697e+10, -4.50853997e+10,
   5.33382294e+09,  2.81311394e+10,
@@ -178,7 +178,7 @@
   1.58455201e+10, -1.20572343e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobian[] = {
   2.24121094e+06,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
@@ -253,7 +253,7 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsResidualLumped[] = {
   1.14454133e+10,  5.67334294e+10,
  -3.22283567e+10, -4.50868389e+10,
   5.33172309e+09,  2.81304297e+10,
@@ -262,7 +262,7 @@
   1.58484937e+10, -1.20568932e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData2DQuadratic::_valsJacobianLumped[] = {
   4.21875000e+06,  4.21875000e+06,
   3.98437500e+06,  3.98437500e+06,
   3.98437500e+06,  3.98437500e+06,
@@ -284,21 +284,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData2DQuadratic::~ElasticityExplicitGravData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidual[] = {
  -6.53693819e+09,  3.88079833e+10, -3.01595567e+10,
  -4.32000975e+09,  7.13967240e+10, -9.96561003e+09,
   7.21670494e+09, -1.13026998e+11, -6.77007835e+10,
   3.64360549e+09,  2.82229089e+09, -2.66713597e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobian[] = {
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
@@ -163,14 +163,14 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsResidualLumped[] = {
  -6.53643381e+09,  3.88073108e+10, -3.01595567e+10,
  -4.31950537e+09,  7.13977327e+10, -9.96426503e+09,
   7.21485556e+09, -1.13028007e+11, -6.77021285e+10,
   3.64444612e+09,  2.82296339e+09, -2.66713597e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DLinear::_valsJacobianLumped[] = {
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
@@ -190,21 +190,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData3DLinear::~ElasticityExplicitGravData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidual[] = {
   2.17054586e+10, -1.01739898e+10, -3.79635409e+09,
   6.44485026e+10, -2.49355435e+10, -1.74360335e+10,
  -4.99706922e+10, -5.58679967e+10, -5.85992435e+10,
@@ -199,7 +199,7 @@
   5.77073439e+10, -6.86734841e+10, -2.38942097e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobian[] = {
   1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
@@ -502,7 +502,7 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsResidualLumped[] = {
   2.17058857e+10, -1.01733961e+10, -3.80035653e+09,
   6.44476753e+10, -2.49368998e+10, -1.74325480e+10,
  -4.99716018e+10, -5.58679351e+10, -5.85992570e+10,
@@ -515,7 +515,7 @@
   5.76997342e+10, -6.86862545e+10, -2.38861279e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitGravData3DQuadratic::_valsJacobianLumped[] = {
   2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
   2.40117187e+06,  2.40117187e+06,  2.40117187e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
@@ -541,21 +541,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitGravData3DQuadratic::~ElasticityExplicitGravData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,62 +56,62 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsResidual[] = {
   2.04829437e+10,
  -2.05560687e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsJacobian[] = {
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsResidualLumped[] = {
   2.04885687e+10,
  -2.05616937e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::_valsJacobianLumped[] = {
   2.81250000e+07,
   2.81250000e+07,
 };
@@ -129,21 +129,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData1DLinear::~ElasticityExplicitLgDeformData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsResidual[] = {
   8.41042438e+10,
  -9.31754244e+09,
  -7.48532639e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsJacobian[] = {
   6.25000000e+06,
  -3.12500000e+06,
   6.25000000e+06,
@@ -126,13 +126,13 @@
   2.50000000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsResidualLumped[] = {
   8.41101813e+10,
  -9.31160494e+09,
  -7.48651389e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::_valsJacobianLumped[] = {
   9.37500000e+06,
   9.37500000e+06,
   3.75000000e+07,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData1DQuadratic::~ElasticityExplicitLgDeformData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidual[] = {
  -5.23632630e+11,  5.83305846e+11,
   1.65372743e+11, -5.78685990e+11,
   3.58250262e+11, -4.62306437e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobian[] = {
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
@@ -126,13 +126,13 @@
   0.00000000e+00,  1.52777778e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidualLumped[] = {
  -5.23631714e+11,  5.83306915e+11,
   1.65371368e+11, -5.78689962e+11,
   3.58250720e+11, -4.62016160e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobianLumped[] = {
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::~ElasticityExplicitLgDeformData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsResidual[] = {
   3.35186619e+10,  8.10189832e+10,
  -7.94930135e+10, -4.37826989e+10,
   2.10035850e+10,  2.15156871e+10,
@@ -178,7 +178,7 @@
   6.13022939e+09,  4.70980577e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsJacobian[] = {
   2.24121094e+06,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
@@ -253,7 +253,7 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsResidualLumped[] = {
   3.35171172e+10,  8.10192601e+10,
  -7.94952005e+10, -4.37841381e+10,
   2.10014852e+10,  2.15149774e+10,
@@ -262,7 +262,7 @@
   6.13320302e+09,  4.71014693e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::_valsJacobianLumped[] = {
   4.21875000e+06,  4.21875000e+06,
   3.98437500e+06,  3.98437500e+06,
   3.98437500e+06,  3.98437500e+06,
@@ -284,21 +284,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData2DQuadratic::~ElasticityExplicitLgDeformData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsResidual[] = {
  -1.33659352e+10,  3.00655421e+11,  1.48221233e+11,
  -5.48900483e+10,  6.55599721e+11,  3.04460965e+11,
   6.45910023e+10, -1.06342951e+12, -4.86426871e+11,
   3.66834369e+09,  1.07174373e+11,  3.37473630e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsJacobian[] = {
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
@@ -163,14 +163,14 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsResidualLumped[] = {
  -1.33654308e+10,  3.00654749e+11,  1.48221233e+11,
  -5.48895440e+10,  6.55600730e+11,  3.04462310e+11,
   6.45891529e+10, -1.06343052e+12, -4.86428216e+11,
   3.66918432e+09,  1.07175045e+11,  3.37473630e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::_valsJacobianLumped[] = {
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
@@ -190,21 +190,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData3DLinear::~ElasticityExplicitLgDeformData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsResidual[] = {
   3.68904302e+10,  2.89154635e+10, -8.34303196e+08,
   1.31658958e+11, -3.38188176e+10,  5.13285187e+10,
  -3.92909711e+11, -2.10630391e+11, -2.01774869e+11,
@@ -199,7 +199,7 @@
   4.58368848e+11, -2.69312012e+11,  3.51028310e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsJacobian[] = {
   1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
@@ -502,7 +502,7 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsResidualLumped[] = {
   3.68908573e+10,  2.89160572e+10, -8.38305638e+08,
   1.31658131e+11, -3.38201739e+10,  5.13320041e+10,
  -3.92910621e+11, -2.10630330e+11, -2.01774882e+11,
@@ -515,7 +515,7 @@
   4.58361238e+11, -2.69324783e+11,  3.51036392e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_valsJacobianLumped[] = {
   2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
@@ -541,21 +541,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::~ElasticityExplicitLgDeformData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,62 +56,62 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsResidual[] = {
  -2.60767056e+11,
  -3.01806069e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsJacobian[] = {
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
   1.40625000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsResidualLumped[] = {
  -2.60761431e+11,
  -3.01811694e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::_valsJacobianLumped[] = {
   2.81250000e+07,
   2.81250000e+07,
 };
@@ -129,21 +129,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData1DLinear::~ElasticityExplicitLgDeformGravData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
  -9.64575617e+09,
  -1.03067542e+11,
  -4.49853264e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
   6.25000000e+06,
  -3.12500000e+06,
   6.25000000e+06,
@@ -126,13 +126,13 @@
   2.50000000e+07,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsResidualLumped[] = {
  -9.63981867e+09,
  -1.03061605e+11,
  -4.49865139e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::_valsJacobianLumped[] = {
   9.37500000e+06,
   9.37500000e+06,
   3.75000000e+07,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData1DQuadratic::~ElasticityExplicitLgDeformGravData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidual[] = {
  -5.23632630e+11,  5.37472513e+11,
   1.65372743e+11, -6.24519323e+11,
   3.58250262e+11, -5.04563977e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobian[] = {
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
   1.52777778e+06,  0.00000000e+00,
@@ -126,13 +126,13 @@
   0.00000000e+00,  1.52777778e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidualLumped[] = {
  -5.23631714e+11,  5.37473582e+11,
   1.65371368e+11, -6.24523296e+11,
   3.58250720e+11, -5.04534949e+10,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobianLumped[] = {
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
   4.58333333e+06,  4.58333333e+06,
@@ -151,21 +151,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::~ElasticityExplicitLgDeformGravData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
   3.35186619e+10,  3.88314832e+10,
  -7.94930135e+10, -8.36264489e+10,
   2.10035850e+10, -1.83280629e+10,
@@ -178,7 +178,7 @@
   6.13022939e+09, -4.46444228e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
   2.24121094e+06,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
   2.41699219e+05,  0.00000000e+00,
@@ -253,7 +253,7 @@
   0.00000000e+00,  8.46679688e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsResidualLumped[] = {
   3.35171172e+10,  3.88317601e+10,
  -7.94952005e+10, -8.36278881e+10,
   2.10014852e+10, -1.83287726e+10,
@@ -262,7 +262,7 @@
   6.13320302e+09, -4.46103066e+09,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::_valsJacobianLumped[] = {
   4.21875000e+06,  4.21875000e+06,
   3.98437500e+06,  3.98437500e+06,
   3.98437500e+06,  3.98437500e+06,
@@ -284,21 +284,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData2DQuadratic::~ElasticityExplicitLgDeformGravData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsResidual[] = {
  -1.33659352e+10,  3.00655421e+11,  1.14596233e+11,
  -5.48900483e+10,  6.55599721e+11,  2.70835965e+11,
   6.45910023e+10, -1.06342951e+12, -5.20051871e+11,
   3.66834369e+09,  1.07174373e+11,  1.22363040e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsJacobian[] = {
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
   8.40625000e+05,  0.00000000e+00,  0.00000000e+00,
@@ -163,14 +163,14 @@
   0.00000000e+00,  0.00000000e+00,  8.40625000e+05,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsResidualLumped[] = {
  -1.33654308e+10,  3.00654749e+11,  1.14596233e+11,
  -5.48895440e+10,  6.55600730e+11,  2.70837310e+11,
   6.45891529e+10, -1.06343052e+12, -5.20053216e+11,
   3.66918432e+09,  1.07175045e+11,  1.22363040e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::_valsJacobianLumped[] = {
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
   3.36250000e+06,  3.36250000e+06,  3.36250000e+06,
@@ -190,21 +190,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData3DLinear::~ElasticityExplicitLgDeformGravData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
   3.68904302e+10,  2.89154635e+10, -2.66246678e+10,
   1.31658958e+11, -3.38188176e+10,  2.73167999e+10,
  -3.92909711e+11, -2.10630391e+11, -2.25786587e+11,
@@ -199,7 +199,7 @@
   4.58368848e+11, -2.69312012e+11,  2.30080394e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
   1.50251107e+06,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
  -5.70500651e+05,  0.00000000e+00,  0.00000000e+00,
@@ -502,7 +502,7 @@
   0.00000000e+00,  0.00000000e+00,  3.25847917e+06,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsResidualLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsResidualLumped[] = {
   3.68908573e+10,  2.89160572e+10, -2.66286702e+10,
   1.31658131e+11, -3.38201739e+10,  2.73202854e+10,
  -3.92910621e+11, -2.10630330e+11, -2.25786601e+11,
@@ -515,7 +515,7 @@
   4.58361238e+11, -2.69324783e+11,  2.30088475e+11,
 };
 
-const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsJacobianLumped[] = {
+const PylithScalar pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_valsJacobianLumped[] = {
   2.57903646e+06,  2.57903646e+06,  2.57903646e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
   2.40117188e+06,  2.40117188e+06,  2.40117188e+06,
@@ -541,21 +541,21 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
-  valsResidualLumped = const_cast<double*>(_valsResidualLumped);
-  valsJacobianLumped = const_cast<double*>(_valsJacobianLumped);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
+  valsResidualLumped = const_cast<PylithScalar*>(_valsResidualLumped);
+  valsJacobianLumped = const_cast<PylithScalar*>(_valsJacobianLumped);
 } // constructor
 
 pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::~ElasticityExplicitLgDeformGravData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,37 +63,37 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
-  static const double _valsResidualLumped[];
+  static const PylithScalar _valsResidualLumped[];
 
-  static const double _valsJacobianLumped[];
+  static const PylithScalar _valsJacobianLumped[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,50 +56,50 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_valsResidual[] = {
   3.60000000e+10,
  -3.60000000e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DLinear::_valsJacobian[] = {
   4.00000000e+10,
  -4.00000000e+10,
  -4.00000000e+10,
@@ -119,19 +119,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData1DLinear::~ElasticityImplicitData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_valsResidual[] = {
   1.25333333e+11,
   3.01333333e+11,
  -4.26666667e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData1DQuadratic::_valsJacobian[] = {
   9.33333333e+10,
   1.33333333e+10,
  -1.06666667e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData1DQuadratic::~ElasticityImplicitData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_valsResidual[] = {
  -1.04842898e+11,  2.84328125e+11,
  -3.14863636e+10, -2.63281250e+11,
   1.36329261e+11, -2.10468750e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DLinear::_valsJacobian[] = {
   4.35710227e+10, -2.45596591e+10,
  -1.59886364e+10,  7.35795455e+09,
  -2.75823864e+10,  1.72017045e+10,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData2DLinear::~ElasticityImplicitData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsResidual[] = {
   1.29278791e+09,  2.30117470e+11,
  -1.01094274e+11, -3.41937391e+10,
  -6.14324363e+09,  2.06921658e+11,
@@ -178,7 +178,7 @@
   4.15069698e+10, -1.37586697e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData2DQuadratic::_valsJacobian[] = {
   4.84911024e+10,  1.08235677e+10,
   1.04859303e+10,  1.58599175e+10,
   1.60687211e+10, -9.93272569e+09,
@@ -266,19 +266,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData2DQuadratic::~ElasticityImplicitData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_valsResidual[] = {
  -6.04851301e+09,  7.19421933e+10,  7.13890954e+09,
   1.11995353e+10,  1.19496190e+11,  5.83920074e+10,
  -1.62946097e+10, -1.94715799e+11, -8.38339529e+10,
   1.11435874e+10,  3.27741636e+09,  1.83030359e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DLinear::_valsJacobian[] = {
   1.08203222e+10,  5.80793061e+09, -3.19702602e+08,
   5.03531599e+09, -1.66914498e+09, -2.27509294e+09,
  -1.72763321e+10, -4.57125155e+09,  4.59107807e+09,
@@ -176,19 +176,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData3DLinear::~ElasticityImplicitData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_valsResidual[] = {
   2.17091508e+10, -1.76856611e+10, -5.86893265e+09,
   1.31632837e+11, -4.68038741e+10,  8.29256662e+09,
  -5.63686735e+10, -5.92797533e+10, -1.13371237e+11,
@@ -199,7 +199,7 @@
   4.65874861e+10, -2.46708036e+11,  2.94377360e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitData3DQuadratic::_valsJacobian[] = {
   4.84108858e+10,  7.55490483e+09,  1.36932650e+10,
   1.51828404e+10, -1.68096633e+09,  3.67199854e+09,
   2.10939239e+09,  5.87866032e+09, -4.46211567e+09,
@@ -515,19 +515,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitData3DQuadratic::~ElasticityImplicitData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,50 +56,50 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_valsResidual[] = {
  -2.45250000e+11,
  -3.17250000e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DLinear::_valsJacobian[] = {
   4.00000000e+10,
  -4.00000000e+10,
  -4.00000000e+10,
@@ -119,19 +119,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData1DLinear::~ElasticityImplicitGravData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_valsResidual[] = {
   3.15833333e+10,
   2.07583333e+11,
  -8.01666667e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData1DQuadratic::_valsJacobian[] = {
   9.33333333e+10,
   1.33333333e+10,
  -1.06666667e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData1DQuadratic::~ElasticityImplicitGravData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsResidual[] = {
  -1.04842898e+11,  2.38494792e+11,
  -3.14863636e+10, -3.09114583e+11,
   1.36329261e+11, -6.68802083e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsJacobian[] = {
   4.35710227e+10, -2.45596591e+10,
  -1.59886364e+10,  7.35795455e+09,
  -2.75823864e+10,  1.72017045e+10,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData2DLinear::~ElasticityImplicitGravData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsResidual[] = {
   1.29278791e+09,  1.87929970e+11,
  -1.01094274e+11, -7.40374891e+10,
  -6.14324363e+09,  1.67077908e+11,
@@ -178,7 +178,7 @@
   4.15069698e+10, -6.53211697e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData2DQuadratic::_valsJacobian[] = {
   4.84911024e+10,  1.08235677e+10,
   1.04859303e+10,  1.58599175e+10,
   1.60687211e+10, -9.93272569e+09,
@@ -266,19 +266,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData2DQuadratic::~ElasticityImplicitGravData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_valsResidual[] = {
  -6.04851301e+09,  7.19421933e+10, -2.64860905e+10,
   1.11995353e+10,  1.19496190e+11,  2.47670074e+10,
  -1.62946097e+10, -1.94715799e+11, -1.17458953e+11,
   1.11435874e+10,  3.27741636e+09, -1.53219641e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DLinear::_valsJacobian[] = {
   1.08203222e+10,  5.80793061e+09, -3.19702602e+08,
   5.03531599e+09, -1.66914498e+09, -2.27509294e+09,
  -1.72763321e+10, -4.57125155e+09,  4.59107807e+09,
@@ -176,19 +176,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData3DLinear::~ElasticityImplicitGravData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_valsResidual[] = {
   2.17091508e+10, -1.76856611e+10, -3.16592972e+10,
   1.31632837e+11, -4.68038741e+10, -1.57191521e+10,
  -5.63686735e+10, -5.92797533e+10, -1.37382956e+11,
@@ -199,7 +199,7 @@
   4.65874861e+10, -2.46708036e+11,  1.73429444e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitGravData3DQuadratic::_valsJacobian[] = {
   4.84108858e+10,  7.55490483e+09,  1.36932650e+10,
   1.51828404e+10, -1.68096633e+09,  3.67199854e+09,
   2.10939239e+09,  5.87866032e+09, -4.46211567e+09,
@@ -515,19 +515,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitGravData3DQuadratic::~ElasticityImplicitGravData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,50 +56,50 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsResidual[] = {
   6.04800000e+10,
  -6.04800000e+10,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::_valsJacobian[] = {
   9.76000000e+10,
  -9.76000000e+10,
  -9.76000000e+10,
@@ -119,19 +119,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData1DLinear::~ElasticityImplicitLgDeformData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsResidual[] = {
   3.54626283e+11,
   3.31341344e+11,
  -6.85967627e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::_valsJacobian[] = {
   5.56003292e+11,
   7.76230453e+10,
  -6.33626337e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData1DQuadratic::~ElasticityImplicitLgDeformData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsResidual[] = {
  -1.46216315e+12,  4.23583651e+12,
   3.60137277e+11, -4.38718860e+12,
   1.10202587e+12,  1.51352095e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsJacobian[] = {
   1.74525304e+12, -5.94796107e+11,
  -1.12489278e+12,  3.51094670e+11,
  -6.20360267e+11,  2.43701437e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::~ElasticityImplicitLgDeformData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsResidual[] = {
   1.03829775e+12,  1.76362384e+12,
  -7.52244241e+11, -8.27609561e+11,
   8.03865887e+11,  1.06221366e+12,
@@ -178,7 +178,7 @@
  -3.65876743e+11,  1.04548083e+12,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::_valsJacobian[] = {
   1.18059576e+12,  5.56624427e+11,
   2.17020537e+10,  2.82688919e+10,
   7.03170548e+11,  3.46233237e+11,
@@ -266,19 +266,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData2DQuadratic::~ElasticityImplicitLgDeformData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsResidual[] = {
   2.79474210e+11,  1.80174876e+12,  1.26556850e+12,
   6.44632598e+11,  4.29759382e+12,  2.88601168e+12,
  -1.13174893e+12, -6.94850554e+12, -4.65500318e+12,
   2.07642124e+11,  8.49162957e+11,  5.03422995e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::_valsJacobian[] = {
   2.94874367e+11,  6.16951570e+10,  3.89461610e+10,
   5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
  -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
@@ -176,19 +176,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData3DLinear::~ElasticityImplicitLgDeformData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsResidual[] = {
   2.83531193e+11,  6.85360097e+11, -7.35048936e+11,
   8.17609945e+11, -2.46059924e+11,  5.76994362e+11,
  -1.61369461e+12, -3.33728123e+11, -1.98412259e+12,
@@ -199,7 +199,7 @@
   1.79162831e+12, -3.54139567e+12,  4.51463965e+12,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::_valsJacobian[] = {
   4.65661925e+11,  1.45207670e+11,  8.48382894e+10,
   1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
   7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
@@ -515,19 +515,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformData3DQuadratic::~ElasticityImplicitLgDeformData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -56,50 +56,50 @@
 0,1,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadPts[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTIncr[] = {
   1.20000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldT[] = {
   1.10000000e+00,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_fieldTmdt[] = {
   1.00000000e+00,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsResidual[] = {
  -2.20770000e+11,
  -3.41730000e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::_valsJacobian[] = {
   9.76000000e+10,
  -9.76000000e+10,
  -9.76000000e+10,
@@ -119,19 +119,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData1DLinear::~ElasticityImplicitLgDeformGravData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_matLabel = "elastic strain 1-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_gravityVec[] = {
  -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -57,22 +57,22 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadPts[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -81,7 +81,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -90,31 +90,31 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTIncr[] = {
   1.20000000e+00,
   0.00000000e+00,
   1.70000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldT[] = {
   1.10000000e+00,
   1.00000000e-01,
   1.50000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_fieldTmdt[] = {
   1.00000000e+00,
   1.00000000e-01,
   1.30000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsResidual[] = {
   2.60876283e+11,
   2.37591344e+11,
  -1.06096763e+12,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::_valsJacobian[] = {
   5.56003292e+11,
   7.76230453e+10,
  -6.33626337e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData1DQuadratic::~ElasticityImplicitLgDeformGravData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -57,55 +57,55 @@
 0,1,2,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadPts[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTIncr[] = {
   1.30000000e+00, -9.00000000e-01,
   1.40000000e+00,  1.50000000e+00,
   5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldT[] = {
   1.60000000e+00, -8.00000000e-01,
   9.00000000e-01,  7.00000000e-01,
  -2.00000000e-01, -1.10000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_fieldTmdt[] = {
   8.00000000e-01,  1.00000000e-01,
   5.00000000e-01,  3.00000000e-01,
  -1.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsResidual[] = {
  -1.46216315e+12,  4.19000317e+12,
   3.60137277e+11, -4.43302194e+12,
   1.10202587e+12,  1.05518761e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsJacobian[] = {
   1.74525304e+12, -5.94796107e+11,
  -1.12489278e+12,  3.51094670e+11,
  -6.20360267e+11,  2.43701437e+11,
@@ -139,19 +139,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::~ElasticityImplicitLgDeformGravData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_matLabel = "elastic strain 2-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_gravityVec[] = {
   0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -60,7 +60,7 @@
 0,1,2,3,4,5,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -69,7 +69,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadPts[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -78,11 +78,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -103,7 +103,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -142,7 +142,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTIncr[] = {
  -4.00000000e-01, -6.00000000e-01,
   7.00000000e-01,  8.00000000e-01,
   0.00000000e+00,  2.00000000e-01,
@@ -151,7 +151,7 @@
  -3.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldT[] = {
  -3.00000000e-01, -4.00000000e-01,
   5.00000000e-01,  6.00000000e-01,
   0.00000000e+00,  1.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_fieldTmdt[] = {
  -2.00000000e-01, -3.00000000e-01,
   3.00000000e-01,  4.00000000e-01,
   0.00000000e+00, -1.00000000e-01,
@@ -169,7 +169,7 @@
  -2.00000000e-01, -6.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsResidual[] = {
   1.03829775e+12,  1.72143634e+12,
  -7.52244241e+11, -8.67453311e+11,
   8.03865887e+11,  1.02236991e+12,
@@ -178,7 +178,7 @@
  -3.65876743e+11,  9.93918331e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::_valsJacobian[] = {
   1.18059576e+12,  5.56624427e+11,
   2.17020537e+10,  2.82688919e+10,
   7.03170548e+11,  3.46233237e+11,
@@ -266,19 +266,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData2DQuadratic::~ElasticityImplicitLgDeformGravData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -58,61 +58,61 @@
 0,1,2,3,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadPts[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTIncr[] = {
   3.00000000e-01,  2.00000000e-01, -5.00000000e-01,
  -3.00000000e-01, -4.00000000e-01, -6.00000000e-01,
   2.00000000e-01,  6.00000000e-01,  3.00000000e-01,
  -6.00000000e-01, -1.00000000e-01, -3.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldT[] = {
   8.00000000e-01,  1.00000000e-01, -6.00000000e-01,
  -1.00000000e-01, -2.00000000e-01, -5.00000000e-01,
   1.00000000e-01,  7.00000000e-01,  2.00000000e-01,
  -5.00000000e-01, -0.00000000e+00, -2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_fieldTmdt[] = {
   1.00000000e-01,  1.00000000e-01, -3.00000000e-01,
  -2.00000000e-01, -1.00000000e-01, -5.00000000e-01,
   2.00000000e-01,  4.00000000e-01,  1.00000000e-01,
  -4.00000000e-01, -1.00000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsResidual[] = {
   2.79474210e+11,  1.80174876e+12,  1.23194350e+12,
   6.44632598e+11,  4.29759382e+12,  2.85238668e+12,
  -1.13174893e+12, -6.94850554e+12, -4.68862818e+12,
   2.07642124e+11,  8.49162957e+11,  4.69797995e+11,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::_valsJacobian[] = {
   2.94874367e+11,  6.16951570e+10,  3.89461610e+10,
   5.48150595e+11,  1.11804684e+11,  7.10898629e+10,
  -9.45152856e+11, -2.08621385e+11, -1.32482083e+11,
@@ -176,19 +176,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData3DLinear::~ElasticityImplicitLgDeformGravData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -41,13 +41,13 @@
 
 const char* pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_matLabel = "elastic isotropic 3-D";
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_dt =   1.00000000e-02;
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_gravityVec[] = {
   0.00000000e+00,  0.00000000e+00, -1.00000000e+08,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -64,7 +64,7 @@
 0,1,2,3,4,5,6,7,8,9,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -77,18 +77,18 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadPts[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -104,7 +104,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -147,7 +147,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTIncr[] = {
   3.00000000e-01, -4.00000000e-01, -4.00000000e-01,
  -6.00000000e-01,  8.00000000e-01,  2.00000000e-01,
   5.00000000e-01,  5.00000000e-01,  7.00000000e-01,
@@ -160,7 +160,7 @@
  -1.00000000e-01,  5.00000000e-01, -9.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldT[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldT[] = {
   1.00000000e-01, -2.00000000e-01, -6.00000000e-01,
  -3.00000000e-01,  4.00000000e-01,  9.00000000e-01,
   6.00000000e-01,  8.00000000e-01,  5.00000000e-01,
@@ -173,7 +173,7 @@
  -9.00000000e-01,  3.00000000e-01, -8.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_fieldTmdt[] = {
   2.00000000e-01, -3.00000000e-01, -1.00000000e-01,
  -4.00000000e-01,  2.00000000e-01,  3.00000000e-01,
  -5.00000000e-01,  2.00000000e-01,  2.00000000e-01,
@@ -186,7 +186,7 @@
  -4.00000000e-01,  5.00000000e-01, -7.00000000e-01,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsResidual[] = {
   2.83531193e+11,  6.85360097e+11, -7.60839301e+11,
   8.17609945e+11, -2.46059924e+11,  5.52982643e+11,
  -1.61369461e+12, -3.33728123e+11, -2.00813431e+12,
@@ -199,7 +199,7 @@
   1.79162831e+12, -3.54139567e+12,  4.39369174e+12,
 };
 
-const double pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
+const PylithScalar pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::_valsJacobian[] = {
   4.65661925e+11,  1.45207670e+11,  8.48382894e+10,
   1.24772472e+11,  7.41894782e+10, -4.42698676e+10,
   7.18213188e+10,  5.09242305e+09,  4.05530373e+10,
@@ -515,19 +515,19 @@
   matId = _matId;
   matLabel = const_cast<char*>(_matLabel);
   dt = _dt;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPts = const_cast<double*>(_quadPts);
-  quadWts = const_cast<double*>(_quadWts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  fieldTIncr = const_cast<double*>(_fieldTIncr);
-  fieldT = const_cast<double*>(_fieldT);
-  fieldTmdt = const_cast<double*>(_fieldTmdt);
-  valsResidual = const_cast<double*>(_valsResidual);
-  valsJacobian = const_cast<double*>(_valsJacobian);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  fieldTIncr = const_cast<PylithScalar*>(_fieldTIncr);
+  fieldT = const_cast<PylithScalar*>(_fieldT);
+  fieldTmdt = const_cast<PylithScalar*>(_fieldTmdt);
+  valsResidual = const_cast<PylithScalar*>(_valsResidual);
+  valsJacobian = const_cast<PylithScalar*>(_valsJacobian);
 } // constructor
 
 pylith::feassemble::ElasticityImplicitLgDeformGravData3DQuadratic::~ElasticityImplicitLgDeformGravData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -63,33 +63,33 @@
 
   static const char* _matLabel;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
-  static const double _gravityVec[];
+  static const PylithScalar _gravityVec[];
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _fieldTIncr[];
+  static const PylithScalar _fieldTIncr[];
 
-  static const double _fieldT[];
+  static const PylithScalar _fieldT[];
 
-  static const double _fieldTmdt[];
+  static const PylithScalar _fieldTmdt[];
 
-  static const double _valsResidual[];
+  static const PylithScalar _valsResidual[];
 
-  static const double _valsJacobian[];
+  static const PylithScalar _valsJacobian[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,7 +20,7 @@
 
 const int pylith::feassemble::GeomDataHex3D::_cellDim = 3;
 
-const double pylith::feassemble::GeomDataHex3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataHex3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataHex3D::_spaceDim = 3;
@@ -29,7 +29,7 @@
 
 const int pylith::feassemble::GeomDataHex3D::_numLocs = 9;
 
-const double pylith::feassemble::GeomDataHex3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataHex3D::_vertices[] = {
   -1.3, -1.4, -0.8,
   1.2, -1.5, -0.9,
   1.4, 0.7, -1.2,
@@ -40,7 +40,7 @@
   -1.8, 0.3, 2.2,
 };
 
-const double pylith::feassemble::GeomDataHex3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataHex3D::_locations[] = {
  -1.0,-1.0,-1.0,
   1.0,-1.0,-1.0,
  -1.0, 1.0,-1.0,
@@ -53,7 +53,7 @@
 };
 
 // Reference cell has volume of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataHex3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataHex3D::_jacobian[] = {
   2.5/2.0, -0.3/2.0, -0.4/2.0, -0.1/2.0, 1.8/2.0, 0.6/2.0, -0.1/2.0, 0.3/2.0, 2.6/2.0,
   2.5/2.0, 0.2/2.0, 0.9/2.0, -0.1/2.0, 2.2/2.0, -0.2/2.0, -0.1/2.0, -0.3/2.0, 1.5/2.0,
   3.0/2.0, -0.3/2.0, -0.2/2.0, 0.3/2.0, 1.8/2.0, -0.1/2.0, -0.7/2.0, 0.3/2.0, 2.7/2.0,
@@ -66,7 +66,7 @@
 };
 
 // Reference cell has volume of 2.0, so divide by 8.0;
-const double pylith::feassemble::GeomDataHex3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataHex3D::_jacobianDet[] = {
   11.13/8.0,
   8.359/8.0,
   14.622/8.0,
@@ -84,11 +84,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataHex3D::~GeomDataHex3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataHex3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,31 +22,31 @@
 
 const int pylith::feassemble::GeomDataLine1D::_spaceDim = 1;
 
-const double pylith::feassemble::GeomDataLine1D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataLine1D::_gravityVec[] = {
   -9.80665 };
 
 const int pylith::feassemble::GeomDataLine1D::_numCorners = 2;
 
 const int pylith::feassemble::GeomDataLine1D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataLine1D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataLine1D::_vertices[] = {
   1.2,
   4.5
 };
 
-const double pylith::feassemble::GeomDataLine1D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataLine1D::_locations[] = {
   0.345,
   0.459
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine1D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataLine1D::_jacobian[] = {
   3.3/2.0,
   3.3/2.0
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine1D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataLine1D::_jacobianDet[] = {
   3.3/2.0,
   3.3/2.0
 };
@@ -57,11 +57,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataLine1D::~GeomDataLine1D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,31 +22,31 @@
 
 const int pylith::feassemble::GeomDataLine2D::_spaceDim = 2;
 
-const double pylith::feassemble::GeomDataLine2D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataLine2D::_gravityVec[] = {
   0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataLine2D::_numCorners = 2;
 
 const int pylith::feassemble::GeomDataLine2D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataLine2D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataLine2D::_vertices[] = {
   1.2, 2.4,
   4.5, -1.4
 };
 
-const double pylith::feassemble::GeomDataLine2D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataLine2D::_locations[] = {
   0.345,
   0.459
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine2D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataLine2D::_jacobian[] = {
   3.3/2.0, -3.8/2.0,
   3.3/2.0, -3.8/2.0
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine2D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataLine2D::_jacobianDet[] = {
   5.0328918128646478/2.0,
   5.0328918128646478/2.0
 };
@@ -57,11 +57,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataLine2D::~GeomDataLine2D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,31 +22,31 @@
 
 const int pylith::feassemble::GeomDataLine3D::_spaceDim = 3;
 
-const double pylith::feassemble::GeomDataLine3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataLine3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataLine3D::_numCorners = 2;
 
 const int pylith::feassemble::GeomDataLine3D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataLine3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataLine3D::_vertices[] = {
   1.2, 2.3, 2.4,
   4.5, -1.5, 5.3
 };
 
-const double pylith::feassemble::GeomDataLine3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataLine3D::_locations[] = {
   0.345,
   0.459
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataLine3D::_jacobian[] = {
   3.3/2.0, -3.8/2.0, 2.9/2.0,
   3.3/2.0, -3.8/2.0, 2.9/2.0
 };
 
 // Reference cell has length of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataLine3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataLine3D::_jacobianDet[] = {
   5.8086142925830417/2.0,
   5.8086142925830417/2.0
 };
@@ -57,11 +57,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataLine3D::~GeomDataLine3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataLine3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,29 +22,29 @@
 
 const int pylith::feassemble::GeomDataPoint1D::_spaceDim = 1;
 
-const double pylith::feassemble::GeomDataPoint1D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint1D::_gravityVec[] = {
   -9.80665 };
 
 const int pylith::feassemble::GeomDataPoint1D::_numCorners = 1;
 
 const int pylith::feassemble::GeomDataPoint1D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataPoint1D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint1D::_vertices[] = {
   1.2,
   4.5
 };
 
-const double pylith::feassemble::GeomDataPoint1D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint1D::_locations[] = {
   0.0,
   0.0
 };
 
-const double pylith::feassemble::GeomDataPoint1D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint1D::_jacobian[] = {
   1.0,
   1.0
 };
 
-const double pylith::feassemble::GeomDataPoint1D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint1D::_jacobianDet[] = {
   1.0,
   1.0
 };
@@ -55,11 +55,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataPoint1D::~GeomDataPoint1D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,29 +22,29 @@
 
 const int pylith::feassemble::GeomDataPoint2D::_spaceDim = 2;
 
-const double pylith::feassemble::GeomDataPoint2D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint2D::_gravityVec[] = {
   0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataPoint2D::_numCorners = 1;
 
 const int pylith::feassemble::GeomDataPoint2D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataPoint2D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint2D::_vertices[] = {
   1.3, 5.4,
   4.1, 7.5
 };
 
-const double pylith::feassemble::GeomDataPoint2D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint2D::_locations[] = {
   0.0,
   0.0
 };
 
-const double pylith::feassemble::GeomDataPoint2D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint2D::_jacobian[] = {
   1.0,
   1.0
 };
 
-const double pylith::feassemble::GeomDataPoint2D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint2D::_jacobianDet[] = {
   1.0,
   1.0
 };
@@ -55,11 +55,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataPoint2D::~GeomDataPoint2D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,29 +22,29 @@
 
 const int pylith::feassemble::GeomDataPoint3D::_spaceDim = 3;
 
-const double pylith::feassemble::GeomDataPoint3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataPoint3D::_numCorners = 1;
 
 const int pylith::feassemble::GeomDataPoint3D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataPoint3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint3D::_vertices[] = {
   1.22, 4.35, 6.56,
   4.45, 5.62, 2.55
 };
 
-const double pylith::feassemble::GeomDataPoint3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint3D::_locations[] = {
   0.0,
   0.0
 };
 
-const double pylith::feassemble::GeomDataPoint3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint3D::_jacobian[] = {
   1.0,
   1.0
 };
 
-const double pylith::feassemble::GeomDataPoint3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataPoint3D::_jacobianDet[] = {
   1.0,
   1.0
 };
@@ -55,11 +55,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataPoint3D::~GeomDataPoint3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataPoint3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,21 +22,21 @@
 
 const int pylith::feassemble::GeomDataQuad2D::_spaceDim = 2;
 
-const double pylith::feassemble::GeomDataQuad2D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad2D::_gravityVec[] = {
   0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataQuad2D::_numCorners = 4;
 
 const int pylith::feassemble::GeomDataQuad2D::_numLocs = 5;
 
-const double pylith::feassemble::GeomDataQuad2D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad2D::_vertices[] = {
   0.3, 0.1,
   0.8, -0.2,
   0.7, 1.2,
   -0.1, 1.6,
 };
 
-const double pylith::feassemble::GeomDataQuad2D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad2D::_locations[] = {
  -1.0, -1.0,
   1.0, -1.0,
  -1.0,  1.0,
@@ -45,7 +45,7 @@
 };
 
 // Reference cell has area of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataQuad2D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad2D::_jacobian[] = {
   0.5/2.0, -0.4/2.0, -0.3/2.0, 1.5/2.0,
   0.5/2.0, -0.1/2.0, -0.3/2.0, 1.4/2.0,
   0.8/2.0, -0.4/2.0, -0.4/2.0, 1.5/2.0,
@@ -54,7 +54,7 @@
 };
 
 // Reference cell has area of 2.0, so divide by 4.0;
-const double pylith::feassemble::GeomDataQuad2D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad2D::_jacobianDet[] = {
   0.63/4.0,
   0.67/4.0,
   1.04/4.0,
@@ -68,11 +68,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataQuad2D::~GeomDataQuad2D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,21 +22,21 @@
 
 const int pylith::feassemble::GeomDataQuad3D::_spaceDim = 3;
 
-const double pylith::feassemble::GeomDataQuad3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataQuad3D::_numCorners = 4;
 
 const int pylith::feassemble::GeomDataQuad3D::_numLocs = 5;
 
-const double pylith::feassemble::GeomDataQuad3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad3D::_vertices[] = {
   1.1, -0.9, 0.1,
   1.0, 0.7, 0.8,
   -0.4, 0.6, 1.2,
   -0.3, -1.3, -0.1,
 };
 
-const double pylith::feassemble::GeomDataQuad3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad3D::_locations[] = {
  -1.0, -1.0,
   1.0, -1.0,
  -1.0,  1.0,
@@ -45,7 +45,7 @@
 };
 
 // Reference cell has area of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataQuad3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad3D::_jacobian[] = {
   -0.1/2.0, -1.4/2.0, 1.6/2.0, -0.4/2.0, 0.7/2.0, -0.2/2.0,
   -0.1/2.0, -1.4/2.0, 1.6/2.0, -0.1/2.0, 0.7/2.0, 0.4/2.0,
   -0.1/2.0, -1.4/2.0, 1.9/2.0, -0.4/2.0, 1.3/2.0, -0.2/2.0,
@@ -54,7 +54,7 @@
 };
 
 // Reference cell has area of 2.0, so divide by 4.0;
-const double pylith::feassemble::GeomDataQuad3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataQuad3D::_jacobianDet[] = {
   2.4899799195977463/4.0,
   2.5397243944963788/4.0,
   3.2703516630478742/4.0,
@@ -68,11 +68,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataQuad3D::~GeomDataQuad3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataQuad3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,33 +22,33 @@
 
 const int pylith::feassemble::GeomDataTet3D::_spaceDim = 3;
 
-const double pylith::feassemble::GeomDataTet3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataTet3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataTet3D::_numCorners = 4;
 
 const int pylith::feassemble::GeomDataTet3D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataTet3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataTet3D::_vertices[] = {
   -1.3, -0.8, 0.2,
   2.1, -0.7, 0.1,
   -1.0, 2.4, -0.3,
   -0.1, 0.2, 3.0
 };
 
-const double pylith::feassemble::GeomDataTet3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataTet3D::_locations[] = {
   0.345, 0.397, 0.319,
   0.459, 0.727, 0.693
 };
 
 // Reference cell has volume of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataTet3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataTet3D::_jacobian[] = {
   3.4/2.0, 0.3/2.0, 1.2/2.0, 0.1/2.0, 3.2/2.0, 1.0/2.0, -0.1/2.0, -0.5/2.0, 2.8/2.0,
   3.4/2.0, 0.3/2.0, 1.2/2.0, 0.1/2.0, 3.2/2.0, 1.0/2.0, -0.1/2.0, -0.5/2.0, 2.8/2.0
 };
 
 // Reference cell has volume of 2.0, so divide by 8.0;
-const double pylith::feassemble::GeomDataTet3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataTet3D::_jacobianDet[] = {
   32.374/8.0,
   32.374/8.0
 };
@@ -59,11 +59,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataTet3D::~GeomDataTet3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTet3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,32 +22,32 @@
 
 const int pylith::feassemble::GeomDataTri2D::_spaceDim = 2;
 
-const double pylith::feassemble::GeomDataTri2D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataTri2D::_gravityVec[] = {
   0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataTri2D::_numCorners = 3;
 
 const int pylith::feassemble::GeomDataTri2D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataTri2D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataTri2D::_vertices[] = {
   1.0,  1.2,
   3.0,  2.0,
   1.5,  4.0
 };
 
-const double pylith::feassemble::GeomDataTri2D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataTri2D::_locations[] = {
   0.345, 0.397,
   0.459, 0.727
 };
 
 // Reference cell has area of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataTri2D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataTri2D::_jacobian[] = {
   2.0/2.0, 0.5/2.0, 0.8/2.0, 2.8/2.0,
   2.0/2.0, 0.5/2.0, 0.8/2.0, 2.8/2.0
 };
 
 // Reference cell has area of 2.0, so divide by 4.0;
-const double pylith::feassemble::GeomDataTri2D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataTri2D::_jacobianDet[] = {
   5.2/4.0,
   5.2/4.0
 };
@@ -58,11 +58,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataTri2D::~GeomDataTri2D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,32 +22,32 @@
 
 const int pylith::feassemble::GeomDataTri3D::_spaceDim = 3;
 
-const double pylith::feassemble::GeomDataTri3D::_gravityVec[] = {
+const PylithScalar pylith::feassemble::GeomDataTri3D::_gravityVec[] = {
   0.0, 0.0, -9.80665 };
 
 const int pylith::feassemble::GeomDataTri3D::_numCorners = 3;
 
 const int pylith::feassemble::GeomDataTri3D::_numLocs = 2;
 
-const double pylith::feassemble::GeomDataTri3D::_vertices[] = {
+const PylithScalar pylith::feassemble::GeomDataTri3D::_vertices[] = {
   1.2, 1.3, -0.4,
   -0.3, -1.7, 0.1,
   -0.1, 0.4, 1.4
 };
 
-const double pylith::feassemble::GeomDataTri3D::_locations[] = {
+const PylithScalar pylith::feassemble::GeomDataTri3D::_locations[] = {
   0.345, 0.397,
   0.459, 0.727
 };
 
 // Reference cell has area of 2.0, so divide by 2.0;
-const double pylith::feassemble::GeomDataTri3D::_jacobian[] = {
+const PylithScalar pylith::feassemble::GeomDataTri3D::_jacobian[] = {
   -1.5/2.0, -1.3/2.0, -3.0/2.0, -0.9/2.0, 0.5/2.0, 1.8/2.0,
   -1.5/2.0, -1.3/2.0, -3.0/2.0, -0.9/2.0, 0.5/2.0, 1.8/2.0
 };
 
 // Reference cell has area of 2.0, so divide by 4.0;
-const double pylith::feassemble::GeomDataTri3D::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::GeomDataTri3D::_jacobianDet[] = {
   5.933590818383081/4.0,
   5.933590818383081/4.0
 };
@@ -58,11 +58,11 @@
   spaceDim = _spaceDim;
   numCorners = _numCorners;
   numLocs = _numLocs;
-  gravityVec = const_cast<double*>(_gravityVec);
-  vertices = const_cast<double*>(_vertices);
-  locations = const_cast<double*>(_locations);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
+  gravityVec = const_cast<PylithScalar*>(_gravityVec);
+  vertices = const_cast<PylithScalar*>(_vertices);
+  locations = const_cast<PylithScalar*>(_locations);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
 } // constructor
 
 pylith::feassemble::GeomDataTri3D::~GeomDataTri3D(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/GeomDataTri3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,11 +48,11 @@
 
   static const int _numLocs; ///< Number of locations for computing Jacobian
 
-  static const double _gravityVec[]; ///< Constant gravity vector
-  static const double _vertices[]; ///< Coordinates of cell's vertices
-  static const double _locations[]; ///< Locations to compute Jacobian
-  static const double _jacobian[]; ///< Jacobian at locations
-  static const double _jacobianDet[]; ///< Determinant of Jacobian at locations
+  static const PylithScalar _gravityVec[]; ///< Constant gravity vector
+  static const PylithScalar _vertices[]; ///< Coordinates of cell's vertices
+  static const PylithScalar _locations[]; ///< Locations to compute Jacobian
+  static const PylithScalar _jacobian[]; ///< Jacobian at locations
+  static const PylithScalar _jacobianDet[]; ///< Determinant of Jacobian at locations
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorApp.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorApp.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorApp.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -205,13 +205,13 @@
                         format="%d")
     self.data.addScalar(vtype="int", name="_numCells", value=self.numCells,
                         format="%d")
-    self.data.addArray(vtype="double", name="_gravityVec", values=self.gravityVec,
+    self.data.addArray(vtype="PylithScalar", name="_gravityVec", values=self.gravityVec,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_vertices", values=self.vertices,
+    self.data.addArray(vtype="PylithScalar", name="_vertices", values=self.vertices,
                        format="%16.8e", ncols=self.spaceDim)
     self.data.addArray(vtype="int", name="_cells", values=self.cells,
                        format="%d", ncols=self.numBasis)    
-    self.data.addArray(vtype="double", name="_verticesRef", values=self.verticesRef,
+    self.data.addArray(vtype="PylithScalar", name="_verticesRef", values=self.verticesRef,
                        format="%16.8e", ncols=self.cellDim)
 
     # Quadrature information
@@ -219,13 +219,13 @@
                         format="%d")
     self.data.addScalar(vtype="int", name="_numQuadPts", value=self.numQuadPts,
                         format="%d")
-    self.data.addArray(vtype="double", name="_quadPts", values=self.quadPts,
+    self.data.addArray(vtype="PylithScalar", name="_quadPts", values=self.quadPts,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_quadWts", values=self.quadWts,
+    self.data.addArray(vtype="PylithScalar", name="_quadWts", values=self.quadWts,
                        format="%16.8e", ncols=self.numQuadPts)
-    self.data.addArray(vtype="double", name="_basis", values=self.basis,
+    self.data.addArray(vtype="PylithScalar", name="_basis", values=self.basis,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_basisDerivRef",
+    self.data.addArray(vtype="PylithScalar", name="_basisDerivRef",
                        values=self.basisDerivRef,
                        format="%16.8e", ncols=self.cellDim)
 
@@ -240,23 +240,23 @@
                         value=self.matLabel, format='"%s"')
 
     # Input files
-    self.data.addScalar(vtype="double", name="_dt", value=self.dt,
+    self.data.addScalar(vtype="PylithScalar", name="_dt", value=self.dt,
                         format="%16.8e")
-    self.data.addArray(vtype="double", name="_fieldTIncr",
+    self.data.addArray(vtype="PylithScalar", name="_fieldTIncr",
                        values=self.fieldTIncr,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_fieldT",
+    self.data.addArray(vtype="PylithScalar", name="_fieldT",
                        values=self.fieldT,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_fieldTmdt",
+    self.data.addArray(vtype="PylithScalar", name="_fieldTmdt",
                        values=self.fieldTmdt,
                        format="%16.8e", ncols=self.spaceDim)
 
     # Calculated values
-    self.data.addArray(vtype="double", name="_valsResidual",
+    self.data.addArray(vtype="PylithScalar", name="_valsResidual",
                        values=self.valsResidual,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_valsJacobian",
+    self.data.addArray(vtype="PylithScalar", name="_valsJacobian",
                        values=self.valsJacobian,
                        format="%16.8e", ncols=self.spaceDim)
     return

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/IntegratorData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_feassemble_integratordata_hh)
 #define pylith_feassemble_integratordata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace feassemble {
      class IntegratorData;
@@ -43,23 +45,23 @@
   /// @name Mesh information
   //@{
   int spaceDim; ///< Number of dimensions in vertex coordinates
-  double* gravityVec; ///< Constant gravity vector (for now)
+  PylithScalar* gravityVec; ///< Constant gravity vector (for now)
   int cellDim; ///< Number of dimensions associated with cell
   int numVertices; ///< Number of vertices
   int numCells; ///< Number of cells
-  double* vertices; ///< Coordinates of vertices
+  PylithScalar* vertices; ///< Coordinates of vertices
   int* cells; ///< Indices of vertices in cells
-  double* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
+  PylithScalar* verticesRef; ///< Coordinates of vertices in ref cell (dual basis)
   //@}
 
   /// @name Quadrature information
   //@{
   int numBasis; ///< Number of vertices in cell
   int numQuadPts; ///< Number of quadrature points
-  double* quadPts; ///< Coordinates of quad pts in ref cell
-  double* quadWts; ///< Weights of quadrature points
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDerivRef; ///< Derivatives of basis fns at quad pts
+  PylithScalar* quadPts; ///< Coordinates of quad pts in ref cell
+  PylithScalar* quadWts; ///< Weights of quadrature points
+  PylithScalar* basis; ///< Basis fns at quadrature points
+  PylithScalar* basisDerivRef; ///< Derivatives of basis fns at quad pts
   //@}
 
   /// @name Material information
@@ -72,16 +74,16 @@
 
   /// @name Input fields
   //@{
-  double dt; ///< Time step
-  double* fieldTIncr; ///< Input field increment for time t to time t+dt.
-  double* fieldT; ///< Input field at time t.
-  double* fieldTmdt; ///< Input field at time t-dt.
+  PylithScalar dt; ///< Time step
+  PylithScalar* fieldTIncr; ///< Input field increment for time t to time t+dt.
+  PylithScalar* fieldT; ///< Input field at time t.
+  PylithScalar* fieldTmdt; ///< Input field at time t-dt.
   //@}
 
   /// @name Calculated values.
   //@{
-  double* valsResidual; ///< Expected values from residual calculation.
-  double* valsJacobian; ///< Expected values from Jacobian calculation.
+  PylithScalar* valsResidual; ///< Expected values from residual calculation.
+  PylithScalar* valsJacobian; ///< Expected values from Jacobian calculation.
   //@}
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureApp.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureApp.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureApp.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -164,39 +164,39 @@
                         value=self.numQuadPts,
                         format="%d")
     
-    self.data.addArray(vtype="double", name="_vertices", values=self.vertices,
+    self.data.addArray(vtype="PylithScalar", name="_vertices", values=self.vertices,
                        format="%16.8e", ncols=self.spaceDim)
     self.data.addArray(vtype="int", name="_cells", values=self.cells,
                        format="%8d", ncols=self.numVertices)
     
-    self.data.addArray(vtype="double", name="_verticesRef",
+    self.data.addArray(vtype="PylithScalar", name="_verticesRef",
                        values=self.verticesRef,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_quadPtsRef",
+    self.data.addArray(vtype="PylithScalar", name="_quadPtsRef",
                        values=self.quadPtsRef,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_quadWts", values=self.quadWts,
+    self.data.addArray(vtype="PylithScalar", name="_quadWts", values=self.quadWts,
                        format="%16.8e", ncols=self.numQuadPts)
-    self.data.addArray(vtype="double", name="_quadPts",
+    self.data.addArray(vtype="PylithScalar", name="_quadPts",
                        values=self.quadPts,
                        format="%16.8e", ncols=self.spaceDim)
         
-    self.data.addArray(vtype="double", name="_basis",
+    self.data.addArray(vtype="PylithScalar", name="_basis",
                        values=self.basis,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_basisDerivRef",
+    self.data.addArray(vtype="PylithScalar", name="_basisDerivRef",
                        values=self.basisDerivRef,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_basisDeriv",
+    self.data.addArray(vtype="PylithScalar", name="_basisDeriv",
                        values=self.basisDeriv,
                        format="%16.8e", ncols=self.spaceDim)
-    self.data.addArray(vtype="double", name="_jacobian",
+    self.data.addArray(vtype="PylithScalar", name="_jacobian",
                        values=self.jacobian,
                        format="%16.8e", ncols=self.cellDim)
-    self.data.addArray(vtype="double", name="_jacobianDet",
+    self.data.addArray(vtype="PylithScalar", name="_jacobianDet",
                        values=self.jacobianDet,
                        format="%16.8e", ncols=self.numQuadPts)
-    self.data.addArray(vtype="double", name="_jacobianInv",
+    self.data.addArray(vtype="PylithScalar", name="_jacobianInv",
                        values=self.jacobianInv,
                        format="%16.8e", ncols=self.spaceDim)
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_feassemble_quadraturedata_hh)
 #define pylith_feassemble_quadraturedata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace feassemble {
      class QuadratureData;
@@ -47,20 +49,20 @@
   int numBasis; ///< Number of vertices in cell
   int numQuadPts; ///< Number of quadrature points
 
-  double* vertices; ///< Pointer to coordinates of vertices
+  PylithScalar* vertices; ///< Pointer to coordinates of vertices
   int* cells; ///< Pointer to indices of vertices in cells
 
-  double* verticesRef; ///< Coordinates of vertices in ref cell
-  double* quadPtsRef; ///< Coordinates of quad pts in ref cell
-  double* quadWts; ///< Weights of quadrature points
-  double* quadPts; ///< Coordinates of quad pts in cell
+  PylithScalar* verticesRef; ///< Coordinates of vertices in ref cell
+  PylithScalar* quadPtsRef; ///< Coordinates of quad pts in ref cell
+  PylithScalar* quadWts; ///< Weights of quadrature points
+  PylithScalar* quadPts; ///< Coordinates of quad pts in cell
 
-  double* basis; ///< Basis fns at quadrature points
-  double* basisDerivRef; ///< Derivatices of basis fns at quad pts (cell)
-  double* basisDeriv; ///< Derivatices of basis fns at quad pts (global)
-  double* jacobian; ///< Jacobian at quadrature points
-  double* jacobianDet; ///< Determinant of quadrature points
-  double* jacobianInv; ///< Inverse of Jacobian at quadruature points
+  PylithScalar* basis; ///< Basis fns at quadrature points
+  PylithScalar* basisDerivRef; ///< Derivatices of basis fns at quad pts (cell)
+  PylithScalar* basisDeriv; ///< Derivatices of basis fns at quad pts (global)
+  PylithScalar* jacobian; ///< Jacobian at quadrature points
+  PylithScalar* jacobianDet; ///< Determinant of quadrature points
+  PylithScalar* jacobianInv; ///< Inverse of Jacobian at quadruature points
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1DLinear::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData1DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
 };
@@ -42,47 +42,47 @@
        0,       1,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_quadPtsRef[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_quadPts[] = {
   8.75000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_basisDeriv[] = {
  -4.44444444e-01,
   4.44444444e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_jacobian[] = {
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_jacobianDet[] = {
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DLinear::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DLinear::_jacobianInv[] = {
   8.88888889e-01,
 };
 
@@ -94,18 +94,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1DLinear::~QuadratureData1DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1DQuadratic::_numQuadPts = 2;
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_vertices[] = {
  -2.50000000e-01,
   2.00000000e+00,
   8.75000000e-01,
@@ -43,27 +43,27 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_quadPtsRef[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_quadPts[] = {
   2.25480947e-01,
   1.52451905e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -72,7 +72,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -81,7 +81,7 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_basisDeriv[] = {
  -9.57644684e-01,
  -6.87557948e-02,
   1.02640048e+00,
@@ -90,16 +90,16 @@
  -1.02640048e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_jacobian[] = {
   1.12500000e+00,
   1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_jacobianDet[] = {
   1.12500000e+00,  1.12500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1DQuadratic::_jacobianInv[] = {
   8.88888889e-01,
   8.88888889e-01,
 };
@@ -112,18 +112,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1DQuadratic::~QuadratureData1DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1Din2DLinear::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_vertices[] = {
  -2.00000000e-01, -5.00000000e-01,
   7.00000000e-01,  3.00000000e-01,
 };
@@ -42,48 +42,48 @@
        0,       1,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_quadPtsRef[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_quadPts[] = {
   2.50000000e-01, -1.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_basisDeriv[] = {
  -1.11111111e+00, -1.25000000e+00,
   1.11111111e+00,  1.25000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_jacobian[] = {
   4.50000000e-01,
   4.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_jacobianDet[] = {
   6.02079729e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DLinear::_jacobianInv[] = {
   2.22222222e+00,  2.50000000e+00,
 };
 
@@ -95,18 +95,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din2DLinear::~QuadratureData1Din2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1Din2DQuadratic::_numQuadPts = 2;
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_vertices[] = {
  -2.00000000e-01, -5.00000000e-01,
   7.00000000e-01,  3.00000000e-01,
   2.50000000e-01, -1.00000000e-01,
@@ -43,27 +43,27 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPtsRef[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_quadPts[] = {
  -9.80762114e-03, -3.30940108e-01,
   5.09807621e-01,  1.30940108e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -72,7 +72,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -81,7 +81,7 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_basisDeriv[] = {
  -2.39411171e+00, -2.69337567e+00,
  -1.71889487e-01, -1.93375673e-01,
   2.56600120e+00,  2.88675135e+00,
@@ -90,18 +90,18 @@
  -2.56600120e+00, -2.88675135e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobian[] = {
   4.50000000e-01,
   4.00000000e-01,
   4.50000000e-01,
   4.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianDet[] = {
   6.02079729e-01,  6.02079729e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din2DQuadratic::_jacobianInv[] = {
   2.22222222e+00,  2.50000000e+00,
   2.22222222e+00,  2.50000000e+00,
 };
@@ -114,18 +114,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din2DQuadratic::~QuadratureData1Din2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1Din3DLinear::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_vertices[] = {
   1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
  -5.00000000e-01,  2.00000000e+00,  3.00000000e+00,
 };
@@ -42,49 +42,49 @@
        0,       1,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_quadPtsRef[] = {
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_quadPts[] = {
   2.50000000e-01,  2.50000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_basis[] = {
   5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_basisDerivRef[] = {
  -5.00000000e-01,
   5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_basisDeriv[] = {
   6.66666667e-01, -2.85714286e-01, -2.00000000e-01,
  -6.66666667e-01,  2.85714286e-01,  2.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_jacobian[] = {
  -7.50000000e-01,
   1.75000000e+00,
   2.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_jacobianDet[] = {
   3.14245127e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DLinear::_jacobianInv[] = {
  -1.33333333e+00,  5.71428571e-01,  4.00000000e-01,
 };
 
@@ -96,18 +96,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din3DLinear::~QuadratureData1Din3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData1Din3DQuadratic::_numQuadPts = 2;
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_vertices[] = {
   1.00000000e+00, -1.50000000e+00, -2.00000000e+00,
  -5.00000000e-01,  2.00000000e+00,  3.00000000e+00,
   2.50000000e-01,  2.50000000e-01,  5.00000000e-01,
@@ -43,27 +43,27 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_verticesRef[] = {
  -1.00000000e+00,
   1.00000000e+00,
   0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPtsRef[] = {
  -5.77350269e-01,
   5.77350269e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_quadWts[] = {
   1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_quadPts[] = {
   6.83012702e-01, -7.60362971e-01, -9.43375673e-01,
  -1.83012702e-01,  1.26036297e+00,  1.94337567e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_basis[] = {
   4.55341801e-01,
  -1.22008468e-01,
   6.66666667e-01,
@@ -72,7 +72,7 @@
   6.66666667e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDerivRef[] = {
  -1.07735027e+00,
  -7.73502692e-02,
   1.15470054e+00,
@@ -81,7 +81,7 @@
  -1.15470054e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_basisDeriv[] = {
   1.43646703e+00, -6.15628725e-01, -4.30940108e-01,
   1.03133692e-01, -4.42001538e-02, -3.09401077e-02,
  -1.53960072e+00,  6.59828879e-01,  4.61880215e-01,
@@ -90,7 +90,7 @@
   1.53960072e+00, -6.59828879e-01, -4.61880215e-01,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobian[] = {
  -7.50000000e-01,
   1.75000000e+00,
   2.50000000e+00,
@@ -99,11 +99,11 @@
   2.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianDet[] = {
   3.14245127e+00,  3.14245127e+00,
 };
 
-const double pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData1Din3DQuadratic::_jacobianInv[] = {
  -1.33333333e+00,  5.71428571e-01,  4.00000000e-01,
  -1.33333333e+00,  5.71428571e-01,  4.00000000e-01,
 };
@@ -116,18 +116,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData1Din3DQuadratic::~QuadratureData1Din3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData1Din3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2DLinear::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData2DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_vertices[] = {
   2.00000000e-01, -4.00000000e-01,
   3.00000000e-01,  5.00000000e-01,
  -1.00000000e+00, -2.00000000e-01,
@@ -43,50 +43,50 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_quadPtsRef[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
  -1.66666667e-01, -3.33333333e-02,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_basisDeriv[] = {
   6.36363636e-01, -1.18181818e+00,
   1.81818182e-01,  1.09090909e+00,
  -8.18181818e-01,  9.09090909e-02,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_jacobian[] = {
   5.00000000e-02, -6.00000000e-01,
   4.50000000e-01,  1.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_jacobianDet[] = {
   2.75000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DLinear::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DLinear::_jacobianInv[] = {
   3.63636364e-01,  2.18181818e+00,
  -1.63636364e+00,  1.81818182e-01,
 };
@@ -99,18 +99,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2DLinear::~QuadratureData2DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2DQuadratic::_numQuadPts = 6;
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_vertices[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00,  2.00000000e-01,
  -1.50000000e+00,  5.00000000e-01,
@@ -46,7 +46,7 @@
        0,       1,       2,       3,       4,       5,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -55,7 +55,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_quadPtsRef[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -64,11 +64,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
  -8.12500000e-01, -6.62500000e-01,
   6.87500000e-01,  2.37500000e-01,
  -1.18750000e+00,  4.62500000e-01,
@@ -77,7 +77,7 @@
  -6.25000000e-02,  6.87500000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -98,7 +98,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -137,7 +137,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
  -1.66666667e-01, -1.38888889e+00,
  -2.08333333e-01, -6.94444444e-02,
   1.66666667e-01, -2.77777778e-01,
@@ -176,7 +176,7 @@
  -6.25000000e-01, -1.87500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_jacobian[] = {
   1.00000000e+00, -2.50000000e-01,
   6.00000000e-01,  7.50000000e-01,
   1.00000000e+00, -2.50000000e-01,
@@ -191,11 +191,11 @@
   6.00000000e-01,  7.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
   9.00000000e-01,  9.00000000e-01,  9.00000000e-01,  9.00000000e-01,  9.00000000e-01,  9.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
   8.33333333e-01,  2.77777778e-01,
  -6.66666667e-01,  1.11111111e+00,
   8.33333333e-01,  2.77777778e-01,
@@ -218,18 +218,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2DQuadratic::~QuadratureData2DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2Din3DLinearXY::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_vertices[] = {
   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
@@ -43,51 +43,51 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPtsRef[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPts[] = {
  -3.33333333e-01,  0.00000000e+00,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDeriv[] = {
   1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobian[] = {
  -5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianDet[] = {
   2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXY::_jacobianInv[] = {
  -2.00000000e+00,  0.00000000e+00, -0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
 };
@@ -100,18 +100,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXY::~QuadratureData2Din3DLinearXY(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2Din3DLinearXYZ::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_vertices[] = {
   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
@@ -43,51 +43,51 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPtsRef[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPts[] = {
  -3.33333333e-01,  0.00000000e+00,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDeriv[] = {
   1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobian[] = {
  -5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianDet[] = {
   2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXYZ::_jacobianInv[] = {
  -2.00000000e+00,  0.00000000e+00, -0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
 };
@@ -100,18 +100,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXYZ::~QuadratureData2Din3DLinearXYZ(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2Din3DLinearXZ::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_vertices[] = {
   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
@@ -43,51 +43,51 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPtsRef[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPts[] = {
  -3.33333333e-01,  0.00000000e+00,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDeriv[] = {
   1.00000000e+00,  0.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobian[] = {
  -5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianDet[] = {
   2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearXZ::_jacobianInv[] = {
  -2.00000000e+00,  0.00000000e+00, -0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
 };
@@ -100,18 +100,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearXZ::~QuadratureData2Din3DLinearXZ(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2Din3DLinearYZ::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_vertices[] = {
   0.00000000e+00,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
@@ -43,51 +43,51 @@
        0,       1,       2,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPtsRef[] = {
  -3.33333333e-01, -3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadWts[] = {
   2.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPts[] = {
   0.00000000e+00,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_basis[] = {
   3.33333333e-01,  3.33333333e-01,
   3.33333333e-01,};
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDeriv[] = {
   0.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   0.00000000e+00,  1.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobian[] = {
   0.00000000e+00,  0.00000000e+00,
   5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianDet[] = {
   2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DLinearYZ::_jacobianInv[] = {
   0.00000000e+00,  2.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  2.00000000e+00,
 };
@@ -100,18 +100,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DLinearYZ::~QuadratureData2Din3DLinearYZ(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData2Din3DQuadratic::_numQuadPts = 6;
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_vertices[] = {
   2.00000000e+00, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  3.00000000e+00,  0.00000000e+00,
  -5.00000000e-01,  0.00000000e+00,  2.00000000e+00,
@@ -46,7 +46,7 @@
        0,       1,       2,       3,       4,       5,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00,
@@ -55,7 +55,7 @@
   0.00000000e+00, -1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPtsRef[] = {
  -7.50000000e-01, -7.50000000e-01,
   7.50000000e-01, -7.50000000e-01,
  -7.50000000e-01,  7.50000000e-01,
@@ -64,11 +64,11 @@
   2.50000000e-01,  2.50000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPts[] = {
   1.50000000e+00,  0.00000000e+00, -1.25000000e-01,
   3.75000000e-01,  2.62500000e+00,  2.50000000e-01,
  -3.75000000e-01,  3.75000000e-01,  1.75000000e+00,
@@ -77,7 +77,7 @@
  -5.00000000e-01,  2.00000000e+00,  1.37500000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_basis[] = {
   3.75000000e-01, -9.37500000e-02,
  -9.37500000e-02,  6.25000000e-02,
   3.75000000e-01,  3.75000000e-01,
@@ -98,7 +98,7 @@
  -6.25000000e-01, -6.25000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDerivRef[] = {
  -1.00000000e+00, -1.00000000e+00,
  -2.50000000e-01,  0.00000000e+00,
   0.00000000e+00, -2.50000000e-01,
@@ -137,7 +137,7 @@
  -1.75000000e+00, -1.25000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDeriv[] = {
   7.50000000e-01, -2.50000000e-01, -7.05882353e-01,
  -3.12500000e-02, -1.56250000e-01,  2.94117647e-02,
   2.18750000e-01,  9.37500000e-02, -2.05882353e-01,
@@ -176,7 +176,7 @@
   8.75000000e-01, -6.25000000e-01, -8.23529412e-01,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobian[] = {
  -7.50000000e-01, -1.25000000e+00,
   1.75000000e+00,  2.50000000e-01,
   2.50000000e-01,  1.25000000e+00,
@@ -197,11 +197,11 @@
   2.50000000e-01,  1.25000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDet[] = {
   2.98433410e+00,  2.98433410e+00,  2.98433410e+00,  2.98433410e+00,  2.98433410e+00,  2.98433410e+00,
 };
 
-const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianInv[] = {
   1.25000000e-01,  6.25000000e-01, -1.17647059e-01,
  -8.75000000e-01, -3.75000000e-01,  8.23529412e-01,
   1.25000000e-01,  6.25000000e-01, -1.17647059e-01,
@@ -224,18 +224,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData2Din3DQuadratic::~QuadratureData2Din3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData3DLinear::_numQuadPts = 1;
 
-const double pylith::feassemble::QuadratureData3DLinear::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_vertices[] = {
  -5.00000000e-01, -1.00000000e+00, -5.00000000e-01,
   2.00000000e+00, -5.00000000e-01, -4.00000000e-01,
   1.00000000e+00, -1.00000000e-01, -3.00000000e-01,
@@ -44,54 +44,54 @@
        0,       1,       2,       3,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00, -1.00000000e+00,  1.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_quadPtsRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_quadWts[] = {
   1.33333333e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_quadPts[] = {
   5.75000000e-01, -2.75000000e-01,  2.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_basis[] = {
   2.50000000e-01,  2.50000000e-01,  2.50000000e-01,
   2.50000000e-01,};
 
-const double pylith::feassemble::QuadratureData3DLinear::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_basisDerivRef[] = {
  -5.00000000e-01, -5.00000000e-01, -5.00000000e-01,
   5.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00,  5.00000000e-01,  0.00000000e+00,
   0.00000000e+00,  0.00000000e+00,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_basisDeriv[] = {
  -2.66418835e-01, -6.75340768e-01,  3.71747212e-02,
   6.04089219e-01, -1.14312268e+00,  6.13382900e-01,
  -3.40768278e-01,  1.92688971e+00, -1.11524164e+00,
   3.09789343e-03, -1.08426270e-01,  4.64684015e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_jacobian[] = {
   1.25000000e+00,  7.50000000e-01,  1.50000000e-01,
   2.50000000e-01,  4.50000000e-01,  7.50000000e-01,
   5.00000000e-02,  1.00000000e-01,  1.25000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_jacobianDet[] = {
   4.03500000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DLinear::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DLinear::_jacobianInv[] = {
   1.20817844e+00, -2.28624535e+00,  1.22676580e+00,
  -6.81536555e-01,  3.85377943e+00, -2.23048327e+00,
   6.19578686e-03, -2.16852540e-01,  9.29368030e-01,
@@ -105,18 +105,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData3DLinear::~QuadratureData3DLinear(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -33,7 +33,7 @@
 
 const int pylith::feassemble::QuadratureData3DQuadratic::_numQuadPts = 4;
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_vertices[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_vertices[] = {
  -5.00000000e-01, -2.00000000e+00, -1.00000000e+00,
   2.00000000e+00, -2.00000000e+00, -5.00000000e-01,
   1.00000000e+00,  1.00000000e+00,  0.00000000e+00,
@@ -50,7 +50,7 @@
        0,       1,       2,       3,       4,       5,       6,       7,       8,       9,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_verticesRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_verticesRef[] = {
  -1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
   1.00000000e+00, -1.00000000e+00, -1.00000000e+00,
  -1.00000000e+00,  1.00000000e+00, -1.00000000e+00,
@@ -63,25 +63,25 @@
  -1.00000000e+00,  0.00000000e+00,  0.00000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_quadPtsRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_quadPtsRef[] = {
  -8.00000000e-01, -8.00000000e-01, -8.00000000e-01,
   5.00000000e-01, -8.00000000e-01, -8.00000000e-01,
  -8.00000000e-01,  5.00000000e-01, -8.00000000e-01,
  -8.00000000e-01, -8.00000000e-01,  5.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_quadWts[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_quadWts[] = {
   3.33333333e-01,  3.33333333e-01,  3.33333333e-01,  3.33333333e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_quadPts[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_quadPts[] = {
  -3.00000000e-02, -1.45000000e+00, -5.50000000e-01,
   1.59500000e+00, -1.45000000e+00, -2.25000000e-01,
   9.45000000e-01,  5.00000000e-01,  1.00000000e-01,
   4.25000000e-01,  1.75000000e-01,  1.40000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_basis[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_basis[] = {
   2.80000000e-01, -8.00000000e-02, -8.00000000e-02,
  -8.00000000e-02,  4.00000000e-02,  2.80000000e-01,
   2.80000000e-01,  2.80000000e-01,  4.00000000e-02,
@@ -97,7 +97,7 @@
   2.00000000e-02,  1.50000000e-01,  3.00000000e-01,
   3.00000000e-01,};
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_basisDerivRef[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_basisDerivRef[] = {
  -9.00000000e-01, -9.00000000e-01, -9.00000000e-01,
  -3.00000000e-01,  0.00000000e+00,  0.00000000e+00,
   0.00000000e+00, -3.00000000e-01,  0.00000000e+00,
@@ -140,7 +140,7 @@
   0.00000000e+00,  1.50000000e+00,  2.00000000e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_basisDeriv[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_basisDeriv[] = {
  -6.58857980e-01, -1.68667643e-01, -3.05710102e-01,
  -2.28404100e-01,  1.33528551e-01, -5.79795022e-02,
  -4.39238653e-02, -2.51244510e-01,  2.19619327e-01,
@@ -183,7 +183,7 @@
   1.84480234e-01,  1.21522694e+00, -9.22401171e-01,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobian[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_jacobian[] = {
   1.25000000e+00,  7.50000000e-01,  3.50000000e-01,
   0.00000000e+00,  1.50000000e+00,  1.25000000e+00,
   2.50000000e-01,  5.00000000e-01,  1.50000000e+00,
@@ -198,11 +198,11 @@
   2.50000000e-01,  5.00000000e-01,  1.50000000e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianDet[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_jacobianDet[] = {
   2.13437500e+00,  2.13437500e+00,  2.13437500e+00,  2.13437500e+00,
 };
 
-const double pylith::feassemble::QuadratureData3DQuadratic::_jacobianInv[] = {
+const PylithScalar pylith::feassemble::QuadratureData3DQuadratic::_jacobianInv[] = {
   7.61346999e-01, -4.45095168e-01,  1.93265007e-01,
   1.46412884e-01,  8.37481698e-01, -7.32064422e-01,
  -1.75695461e-01, -2.04978038e-01,  8.78477306e-01,
@@ -225,18 +225,18 @@
   cellDim = _cellDim;
   numBasis = _numBasis;
   numQuadPts = _numQuadPts;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
-  verticesRef = const_cast<double*>(_verticesRef);
-  quadPtsRef = const_cast<double*>(_quadPtsRef);
-  quadWts = const_cast<double*>(_quadWts);
-  quadPts = const_cast<double*>(_quadPts);
-  basis = const_cast<double*>(_basis);
-  basisDerivRef = const_cast<double*>(_basisDerivRef);
-  basisDeriv = const_cast<double*>(_basisDeriv);
-  jacobian = const_cast<double*>(_jacobian);
-  jacobianDet = const_cast<double*>(_jacobianDet);
-  jacobianInv = const_cast<double*>(_jacobianInv);
+  verticesRef = const_cast<PylithScalar*>(_verticesRef);
+  quadPtsRef = const_cast<PylithScalar*>(_quadPtsRef);
+  quadWts = const_cast<PylithScalar*>(_quadWts);
+  quadPts = const_cast<PylithScalar*>(_quadPts);
+  basis = const_cast<PylithScalar*>(_basis);
+  basisDerivRef = const_cast<PylithScalar*>(_basisDerivRef);
+  basisDeriv = const_cast<PylithScalar*>(_basisDeriv);
+  jacobian = const_cast<PylithScalar*>(_jacobian);
+  jacobianDet = const_cast<PylithScalar*>(_jacobianDet);
+  jacobianInv = const_cast<PylithScalar*>(_jacobianInv);
 } // constructor
 
 pylith::feassemble::QuadratureData3DQuadratic::~QuadratureData3DQuadratic(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DQuadratic.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,29 +55,29 @@
 
   static const int _numQuadPts;
 
-  static const double _vertices[];
+  static const PylithScalar _vertices[];
 
   static const int _cells[];
 
-  static const double _verticesRef[];
+  static const PylithScalar _verticesRef[];
 
-  static const double _quadPtsRef[];
+  static const PylithScalar _quadPtsRef[];
 
-  static const double _quadWts[];
+  static const PylithScalar _quadWts[];
 
-  static const double _quadPts[];
+  static const PylithScalar _quadPts[];
 
-  static const double _basis[];
+  static const PylithScalar _basis[];
 
-  static const double _basisDerivRef[];
+  static const PylithScalar _basisDerivRef[];
 
-  static const double _basisDeriv[];
+  static const PylithScalar _basisDeriv[];
 
-  static const double _jacobian[];
+  static const PylithScalar _jacobian[];
 
-  static const double _jacobianDet[];
+  static const PylithScalar _jacobianDet[];
 
-  static const double _jacobianInv[];
+  static const PylithScalar _jacobianInv[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestFrictionModel.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -34,7 +34,7 @@
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/feassemble/GeometryLine2D.hh" // USES GeometryLine2D
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
 #include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
@@ -72,7 +72,7 @@
 void
 pylith::friction::TestFrictionModel::testTimeStep(void) 
 { // testTimeStep
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   StaticFriction friction;
   friction.timeStep(dt);
   
@@ -132,7 +132,7 @@
 void
 pylith::friction::TestFrictionModel::testInitialize(void)
 { // testInitialize
-  const double propertiesE[] = { 0.6, 1000000, 0.4, 1000000 };
+  const PylithScalar propertiesE[] = { 0.6, 1000000, 0.4, 1000000 };
   const int numProperties = 2;
 
   topology::Mesh mesh;
@@ -150,7 +150,7 @@
     vertices->begin();
   const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   // Test fieldsPropsStateVars with mesh
   const int fieldsFiberDim = numProperties;
@@ -164,7 +164,7 @@
        ++v_iter) {
     CPPUNIT_ASSERT_EQUAL(fieldsFiberDim, 
 			 fieldsSection->getFiberDimension(*v_iter));
-    const double* fieldsVertex = fieldsSection->restrictPoint(*v_iter);
+    const PylithScalar* fieldsVertex = fieldsSection->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(fieldsVertex);
     for (int i = 0; i < numProperties; ++i, ++index)
       if (0 != propertiesE[index])
@@ -185,7 +185,7 @@
 void
 pylith::friction::TestFrictionModel::testGetField(void)
 { // testGetField
-  const double fieldE[] = { 0.6, 0.4 };
+  const PylithScalar fieldE[] = { 0.6, 0.4 };
   const int fiberDim = 1;
 
   topology::Mesh mesh;
@@ -206,10 +206,10 @@
     vertices->begin();
   const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   int index = 0;
-  double_array fieldVertex(fiberDim);
+  scalar_array fieldVertex(fiberDim);
   const ALE::Obj<RealSection>& fieldSection = field.section();
   CPPUNIT_ASSERT(!fieldSection.isNull());
   for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
@@ -230,9 +230,9 @@
 void
 pylith::friction::TestFrictionModel::testRetrievePropsStateVars(void)
 { // testRetrievePropsStateVars
-  const double propertiesE[] = { 0.4, 1000000 };
+  const PylithScalar propertiesE[] = { 0.4, 1000000 };
   const size_t numProperties = 2;
-  const double* stateVarsE = 0;
+  const PylithScalar* stateVarsE = 0;
   const size_t numStateVars = 0;
   const int vertex = 2;
 
@@ -244,9 +244,9 @@
 
   friction.retrievePropsStateVars(vertex);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
-  const double_array& fieldsVertex = friction._propsStateVarsVertex;
+  const scalar_array& fieldsVertex = friction._propsStateVarsVertex;
   CPPUNIT_ASSERT_EQUAL(numProperties + numStateVars, fieldsVertex.size());
 
   // Check properties array.
@@ -277,12 +277,12 @@
 void
 pylith::friction::TestFrictionModel::testCalcFriction(void)
 { // testCalcFriction
-  const double slip = 1.2;
-  const double slipRate = -2.3;
-  const double normalTraction = -2.4;
-  const double frictionCoef = 0.45;
-  const double cohesion = 1000000;
-  const double frictionE = -normalTraction*frictionCoef + cohesion;
+  const PylithScalar slip = 1.2;
+  const PylithScalar slipRate = -2.3;
+  const PylithScalar normalTraction = -2.4;
+  const PylithScalar frictionCoef = 0.45;
+  const PylithScalar cohesion = 1000000;
+  const PylithScalar frictionE = -normalTraction*frictionCoef + cohesion;
   const int vertex = 2;
 
   topology::Mesh mesh;
@@ -293,9 +293,9 @@
 
   friction.timeStep(data.dt);
   friction.retrievePropsStateVars(vertex);
-  const double frictionV = friction.calcFriction(slip, slipRate, normalTraction);
+  const PylithScalar frictionV = friction.calcFriction(slip, slipRate, normalTraction);
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   if (0.0 != frictionE)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, frictionV/frictionE, tolerance);
   else
@@ -314,10 +314,10 @@
     StaticFrictionData data;
     _initialize(&mesh, &fault, &friction, &data);
     
-    const double slip = 1.2;
-    const double slipRate = -2.3;
-    const double normalTraction = -2.4;
-    const double cohesion = 1000000;
+    const PylithScalar slip = 1.2;
+    const PylithScalar slipRate = -2.3;
+    const PylithScalar normalTraction = -2.4;
+    const PylithScalar cohesion = 1000000;
     const int vertex = 2;
     
     friction.timeStep(data.dt);
@@ -345,19 +345,19 @@
     friction.dbProperties(&db);
     fault.frictionModel(&friction);
     
-    const double upDir[] = { 0.0, 0.0, 1.0 };
+    const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
     fault.initialize(mesh, upDir);
     const int vertex = 2;
 
-    const double slip = 0.25;
-    const double slipRate = 0.64;
-    const double normalTraction = -2.3;
-    const double cohesion = 1000000;
-    const double dt = 0.01;
+    const PylithScalar slip = 0.25;
+    const PylithScalar slipRate = 0.64;
+    const PylithScalar normalTraction = -2.3;
+    const PylithScalar cohesion = 1000000;
+    const PylithScalar dt = 0.01;
 
     const int numStateVars = 2;
-    const double stateVars[2] = { 0.5, 0.1 };
-    const double stateVarsUpdatedE[2] = { 0.65, 0.5 };
+    const PylithScalar stateVars[2] = { 0.5, 0.1 };
+    const PylithScalar stateVarsUpdatedE[2] = { 0.65, 0.5 };
     
 
     // Set state variables to given values
@@ -369,13 +369,13 @@
     friction.timeStep(dt);
     friction.updateStateVars(slip, slipRate, normalTraction, vertex);
     
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     CPPUNIT_ASSERT(0 != friction._fieldsPropsStateVars);
     const ALE::Obj<SubRealUniformSection>& fieldsSection = 
       friction._fieldsPropsStateVars->section();
     CPPUNIT_ASSERT_EQUAL(friction._fieldsPropsStateVars->fiberDim(),
 			 fieldsSection->getFiberDimension(vertex));
-    const double* fieldsVertex = fieldsSection->restrictPoint(vertex);
+    const PylithScalar* fieldsVertex = fieldsSection->restrictPoint(vertex);
     CPPUNIT_ASSERT(fieldsVertex);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsUpdatedE[0],
 				 fieldsVertex[friction._propsFiberDim+0], 
@@ -425,10 +425,10 @@
 
   // Test _dbToProperties()
   const int numLocs = _data->numLocs;
-  double_array dbValues(numDBProperties);
+  scalar_array dbValues(numDBProperties);
 
   const int propertiesSize = _data->numPropsVertex;
-  double_array properties(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < numDBProperties; ++i)
@@ -436,8 +436,8 @@
 
     _friction->_dbToProperties(&properties[0], dbValues);
     
-    const double* const propertiesE = &_data->properties[iLoc*propertiesSize];
-    const double tolerance = 1.0e-06;
+    const PylithScalar* const propertiesE = &_data->properties[iLoc*propertiesSize];
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -460,19 +460,19 @@
   
   const int numLocs = _data->numLocs;
   const int propertiesSize = _data->numPropsVertex;
-  double_array propertiesNondim(propertiesSize);
-  double_array properties(propertiesSize);
+  scalar_array propertiesNondim(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < propertiesSize; ++i)
       properties[i] = _data->properties[iLoc*propertiesSize+i];
     _friction->_nondimProperties(&properties[0], properties.size());
     
-    const double* const propertiesNondimE =
+    const PylithScalar* const propertiesNondimE =
       &_data->propertiesNondim[iLoc*propertiesSize];
     CPPUNIT_ASSERT(0 != propertiesNondimE);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -495,18 +495,18 @@
   
   const int numLocs = _data->numLocs;
   const int propertiesSize = _data->numPropsVertex;
-  double_array properties(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < propertiesSize; ++i)
       properties[i] = _data->propertiesNondim[iLoc*propertiesSize+i];
     _friction->_dimProperties(&properties[0], properties.size());
     
-    const double* const propertiesE =
+    const PylithScalar* const propertiesE =
       &_data->properties[iLoc*propertiesSize];
     CPPUNIT_ASSERT(0 != propertiesE);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -539,10 +539,10 @@
 
   // Test _dbToStateVars()
   const int numLocs = _data->numLocs;
-  double_array dbValues(numDBStateVars);
+  scalar_array dbValues(numDBStateVars);
 
   const int stateVarsSize = _data->numVarsVertex;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < numDBStateVars; ++i)
@@ -550,11 +550,11 @@
 
     _friction->_dbToStateVars(&stateVars[0], dbValues);
     
-    const double* const stateVarsE = 
+    const PylithScalar* const stateVarsE = 
       (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
 		    (0 == stateVarsSize && 0 == stateVarsE) );
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -577,19 +577,19 @@
   
   const int numLocs = _data->numLocs;
   const int stateVarsSize = _data->numVarsVertex;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < stateVarsSize; ++i)
       stateVars[i] = _data->dbStateVars[iLoc*stateVarsSize+i];
     _friction->_nondimStateVars(&stateVars[0], stateVars.size());
     
-    const double* const stateVarsNondimE =
+    const PylithScalar* const stateVarsNondimE =
       (stateVarsSize > 0) ? &_data->stateVarsNondim[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsNondimE) ||
 		    (0 == stateVarsSize && 0 == stateVarsNondimE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -612,19 +612,19 @@
   
   const int numLocs = _data->numLocs;
   const int stateVarsSize = _data->numVarsVertex;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < stateVarsSize; ++i)
       stateVars[i] = _data->stateVarsNondim[iLoc*stateVarsSize+i];
     _friction->_dimStateVars(&stateVars[0], stateVars.size());
     
-    const double* const stateVarsE =
+    const PylithScalar* const stateVarsE =
       (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
 		    (0 == stateVarsSize && 0 == stateVarsE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -649,33 +649,33 @@
   const int numPropsVertex = _data->numPropsVertex;
   const int numVarsVertex = _data->numVarsVertex;
   
-  double_array properties(numPropsVertex);
-  double_array stateVars(numVarsVertex);
+  scalar_array properties(numPropsVertex);
+  scalar_array stateVars(numVarsVertex);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < numPropsVertex; ++i)
       properties[i] = _data->properties[iLoc*numPropsVertex+i];
     for (int i=0; i < numVarsVertex; ++i)
       stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
-    const double slip = _data->slip[iLoc];
-    const double slipRate = _data->slipRate[iLoc];
-    const double normalTraction = _data->normalTraction[iLoc];
+    const PylithScalar slip = _data->slip[iLoc];
+    const PylithScalar slipRate = _data->slipRate[iLoc];
+    const PylithScalar normalTraction = _data->normalTraction[iLoc];
 
     _friction->timeStep(_data->dt);
-    const double friction = _friction->_calcFriction(
+    const PylithScalar friction = _friction->_calcFriction(
 					slip, slipRate, normalTraction,
 					&properties[0], properties.size(),
 					&stateVars[0], stateVars.size());
 
 #if !defined(NO_FAULT_OPENING)
-    const double frictionE = _data->friction[iLoc];
+    const PylithScalar frictionE = _data->friction[iLoc];
 #else
     // If fault is in tension, let test pass.
     const double frictionE = (normalTraction < 0.0) ?
       _data->friction[iLoc] : friction;
 #endif
     
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
 
     if (0.0 != frictionE)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, friction/frictionE, tolerance);
@@ -698,13 +698,13 @@
   const int numPropsVertex = _data->numPropsVertex;
   const int numVarsVertex = _data->numVarsVertex;
   
-  double_array properties(numPropsVertex);
-  double_array stateVars(numVarsVertex);
+  scalar_array properties(numPropsVertex);
+  scalar_array stateVars(numVarsVertex);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
-    const double slip = _data->slip[iLoc];
-    const double slipRate = _data->slipRate[iLoc];
-    const double normalTraction = _data->normalTraction[iLoc];
+    const PylithScalar slip = _data->slip[iLoc];
+    const PylithScalar slipRate = _data->slipRate[iLoc];
+    const PylithScalar normalTraction = _data->normalTraction[iLoc];
     for (int i=0; i < numPropsVertex; ++i)
       properties[i] = _data->properties[iLoc*numPropsVertex+i];
     for (int i=0; i < numVarsVertex; ++i)
@@ -715,12 +715,12 @@
 				&stateVars[0], stateVars.size(),
 				&properties[0], properties.size());
     
-    const double* stateVarsE = 
+    const PylithScalar* stateVarsE = 
       (numVarsVertex > 0) ? &_data->stateVarsUpdated[iLoc*numVarsVertex] : 0;
     CPPUNIT_ASSERT( (0 < numVarsVertex && 0 != stateVarsE) ||
 		    (0 == numVarsVertex && 0 == stateVarsE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < numVarsVertex; ++i) {
 #if 0 // DEBUGGING
       std::cout << "valE: " << stateVarsE[i] 
@@ -784,10 +784,10 @@
   const int numCorners = 2;
   const int numQuadPts = 2;
   const int spaceDim = 2;
-  const double basis[] = { 0.75, 0.25, 0.25, 0.75 };
-  const double basisDeriv[] = { -0.5, 0.5, -0.5, 0.5 };
-  const double quadPtsRef[] = { -0.5, 0.5 };
-  const double quadWts[] = { 1.0, 1.0  };
+  const PylithScalar basis[] = { 0.75, 0.25, 0.25, 0.75 };
+  const PylithScalar basisDeriv[] = { -0.5, 0.5, -0.5, 0.5 };
+  const PylithScalar quadPtsRef[] = { -0.5, 0.5 };
+  const PylithScalar quadWts[] = { 1.0, 1.0  };
   quadrature.initialize(basis, numQuadPts, numCorners,
 			basisDeriv, numQuadPts, numCorners, cellDim,
 			quadPtsRef, numQuadPts, cellDim,
@@ -818,7 +818,7 @@
   friction->normalizer(normalizer);
   fault->frictionModel(friction);
   
-  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
   fault->initialize(*mesh, upDir);
 } // _initialize
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,6 +38,20 @@
 } // setUp
 
 // ----------------------------------------------------------------------
+// Test floor for minimum slip rate.
+void
+pylith::friction::TestRateStateAgeing::testMinSlipRate(void)
+{ // testMinSlipRate
+  RateStateAgeing model;
+
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0e-12), model._minSlipRate); // default
+
+  const PylithScalar value = 1.0e-20;
+  model.minSlipRate(value);
+  CPPUNIT_ASSERT_EQUAL(value, model._minSlipRate);
+} // testMinSlipRate
+  
+// ----------------------------------------------------------------------
 // Test properties metadata.
 void
 pylith::friction::TestRateStateAgeing::testPropertiesMetadata(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/TestRateStateAgeing.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -43,6 +43,7 @@
   // CPPUNIT TEST SUITE /////////////////////////////////////////////////
   CPPUNIT_TEST_SUITE( TestRateStateAgeing );
 
+  CPPUNIT_TEST( testMinSlipRate );
   CPPUNIT_TEST( testPropertiesMetadata );
   CPPUNIT_TEST( testStateVarsMetadata );
   CPPUNIT_TEST( testDBToProperties );
@@ -63,6 +64,9 @@
   /// Setup testing data.
   void setUp(void);
 
+  /// Test floor for minimum slip rate.
+  void testMinSlipRate(void);
+  
   /// Test properties metadata.
   void testPropertiesMetadata(void);
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/FrictionModelData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/FrictionModelData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/FrictionModelData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_friction_frictionmodeldata_hh)
 #define pylith_friction_frictionmodeldata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace friction {
      class FrictionModelData;
@@ -55,25 +57,25 @@
   char** dbPropertyValues; ///< Names of db values for properties.
   char** dbStateVarValues; ///< Names of db values for state variables.
 
-  double dt; ///< Time step
-  double* dbProperties; ///< Database values for properties at locations.
-  double* dbStateVars; ///< Database values for state variables at locations.
-  double* properties; ///< Properties at locations.
-  double* stateVars; ///< State variables at locations.
-  double* propertiesNondim; ///< Nondimensional properties at locations.
-  double* stateVarsNondim; ///< Nondimensional state variables at locations.
+  PylithScalar dt; ///< Time step
+  PylithScalar* dbProperties; ///< Database values for properties at locations.
+  PylithScalar* dbStateVars; ///< Database values for state variables at locations.
+  PylithScalar* properties; ///< Properties at locations.
+  PylithScalar* stateVars; ///< State variables at locations.
+  PylithScalar* propertiesNondim; ///< Nondimensional properties at locations.
+  PylithScalar* stateVarsNondim; ///< Nondimensional state variables at locations.
 
-  double* friction; ///< Friction at locations.
-  double* slip; ///< Slip at locations.
-  double* slipRate; ///< Slip rate at locations.
-  double* normalTraction; ///< Normal traction at locations.
+  PylithScalar* friction; ///< Friction at locations.
+  PylithScalar* slip; ///< Slip at locations.
+  PylithScalar* slipRate; ///< Slip rate at locations.
+  PylithScalar* normalTraction; ///< Normal traction at locations.
 
-  double* stateVarsUpdated; ///< Updated state variables at location.
+  PylithScalar* stateVarsUpdated; ///< Updated state variables at location.
 
-  double lengthScale; ///< Length scale for nondimensionalization.
-  double timeScale; ///< Time scale for nondimensionalization.
-  double pressureScale; ///< Pressure scale for nondimensionalization.
-  double densityScale; ///< Density scale for nondimensionalization.
+  PylithScalar lengthScale; ///< Length scale for nondimensionalization.
+  PylithScalar timeScale; ///< Time scale for nondimensionalization.
+  PylithScalar pressureScale; ///< Pressure scale for nondimensionalization.
+  PylithScalar densityScale; ///< Density scale for nondimensionalization.
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,15 +32,15 @@
 
 const int pylith::friction::RateStateAgeingData::_numVarsVertex = 1;
 
-const double pylith::friction::RateStateAgeingData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::friction::RateStateAgeingData::_lengthScale =   1.00000000e+03;
 
-const double pylith::friction::RateStateAgeingData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::friction::RateStateAgeingData::_timeScale =   1.00000000e+00;
 
-const double pylith::friction::RateStateAgeingData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::friction::RateStateAgeingData::_pressureScale =   2.25000000e+10;
 
-const double pylith::friction::RateStateAgeingData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::friction::RateStateAgeingData::_densityScale =   1.00000000e+03;
 
-const double pylith::friction::RateStateAgeingData::_dt = 0.01;
+const PylithScalar pylith::friction::RateStateAgeingData::_dt = 0.01;
 
 const int pylith::friction::RateStateAgeingData::_numPropertyValues[] = {
   1,
@@ -68,7 +68,7 @@
   "state-variable",
 };
 
-const double pylith::friction::RateStateAgeingData::_dbProperties[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_dbProperties[] = {
   0.6,
   0.000001,
   0.0370,
@@ -83,12 +83,12 @@
   1000000,
 };
 
-const double pylith::friction::RateStateAgeingData::_dbStateVars[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_dbStateVars[] = {
   92.7,
   93.7,
 };
 
-const double pylith::friction::RateStateAgeingData::_properties[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_properties[] = {
   0.6,
   0.000001,
   0.0370,
@@ -103,12 +103,12 @@
   1000000,
 };
 
-const double pylith::friction::RateStateAgeingData::_stateVars[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_stateVars[] = {
   92.7,
   93.7,
 };
 
-const double pylith::friction::RateStateAgeingData::_propertiesNondim[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_propertiesNondim[] = {
   0.6,
   0.000000001,
   0.0000370,
@@ -123,32 +123,32 @@
   0.000044444444,
 };
 
-const double pylith::friction::RateStateAgeingData::_stateVarsNondim[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_stateVarsNondim[] = {
   92.7,
   93.7,
 };
 
-const double pylith::friction::RateStateAgeingData::_friction[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_friction[] = {
   1000001.285949009547604,
   1000001.164378652801948,
 };
 
-const double pylith::friction::RateStateAgeingData::_slip[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_slip[] = {
   0.12,
   0.22,
 };
 
-const double pylith::friction::RateStateAgeingData::_slipRate[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_slipRate[] = {
   0.0011,
   0.0021,
 };
 
-const double pylith::friction::RateStateAgeingData::_normalTraction[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_normalTraction[] = {
   -2.2,
   -2.3,
 };
 
-const double pylith::friction::RateStateAgeingData::_stateVarsUpdated[] = {
+const PylithScalar pylith::friction::RateStateAgeingData::_stateVarsUpdated[] = {
   92.682443150471812,
   93.668141160483529,
 };
@@ -170,18 +170,18 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
   dt = _dt;
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  friction = const_cast<double*>(_friction);
-  slip = const_cast<double*>(_slip);
-  slipRate = const_cast<double*>(_slipRate);
-  normalTraction = const_cast<double*>(_normalTraction);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::friction::RateStateAgeingData::~RateStateAgeingData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/RateStateAgeingData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,15 +54,15 @@
 
   static const int _numVarsVertex;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
   static const int _numPropertyValues[];
 
@@ -72,27 +72,27 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _friction[];
+  static const PylithScalar _friction[];
 
-  static const double _slip[];
+  static const PylithScalar _slip[];
 
-  static const double _slipRate[];
+  static const PylithScalar _slipRate[];
 
-  static const double _normalTraction[];
+  static const PylithScalar _normalTraction[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,15 +32,15 @@
 
 const int pylith::friction::SlipWeakeningData::_numVarsVertex = 2;
 
-const double pylith::friction::SlipWeakeningData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::friction::SlipWeakeningData::_lengthScale =   1.00000000e+03;
 
-const double pylith::friction::SlipWeakeningData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::friction::SlipWeakeningData::_timeScale =   1.00000000e+00;
 
-const double pylith::friction::SlipWeakeningData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::friction::SlipWeakeningData::_pressureScale =   2.25000000e+10;
 
-const double pylith::friction::SlipWeakeningData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::friction::SlipWeakeningData::_densityScale =   1.00000000e+03;
 
-const double pylith::friction::SlipWeakeningData::_dt = 0.01;
+const PylithScalar pylith::friction::SlipWeakeningData::_dt = 0.01;
 
 const int pylith::friction::SlipWeakeningData::_numPropertyValues[] = {
   1,
@@ -66,7 +66,7 @@
   "previous-slip",
 };
 
-const double pylith::friction::SlipWeakeningData::_dbProperties[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_dbProperties[] = {
   0.6,
   0.5,
   0.8,
@@ -77,14 +77,14 @@
   1000000,
 };
 
-const double pylith::friction::SlipWeakeningData::_dbStateVars[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_dbStateVars[] = {
   0.4,
   0.2,
   0.5,
   0.1,
 };
 
-const double pylith::friction::SlipWeakeningData::_properties[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_properties[] = {
   0.6,
   0.5,
   0.8,
@@ -95,14 +95,14 @@
   1000000,
 };
 
-const double pylith::friction::SlipWeakeningData::_stateVars[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_stateVars[] = {
   0.4,
   0.2,
   0.5,
   0.1,
 };
 
-const double pylith::friction::SlipWeakeningData::_propertiesNondim[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_propertiesNondim[] = {
   0.6,
   0.5,
   0.0008,
@@ -113,34 +113,34 @@
   0.000044444444,
 };
 
-const double pylith::friction::SlipWeakeningData::_stateVarsNondim[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_stateVarsNondim[] = {
   0.0004,
   0.0002,
   0.0005,
   0.0001,
 };
 
-const double pylith::friction::SlipWeakeningData::_friction[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_friction[] = {
   1000001.21,
   1000001.15,
 };
 
-const double pylith::friction::SlipWeakeningData::_slip[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_slip[] = {
   0.12,
   0.25,
 };
 
-const double pylith::friction::SlipWeakeningData::_slipRate[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_slipRate[] = {
   0.74,
   0.64,
 };
 
-const double pylith::friction::SlipWeakeningData::_normalTraction[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_normalTraction[] = {
   -2.2,
   -2.3,
 };
 
-const double pylith::friction::SlipWeakeningData::_stateVarsUpdated[] = {
+const PylithScalar pylith::friction::SlipWeakeningData::_stateVarsUpdated[] = {
   0.48,
   0.4,
   0.65,
@@ -164,18 +164,18 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
   dt = _dt;
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  friction = const_cast<double*>(_friction);
-  slip = const_cast<double*>(_slip);
-  slipRate = const_cast<double*>(_slipRate);
-  normalTraction = const_cast<double*>(_normalTraction);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::friction::SlipWeakeningData::~SlipWeakeningData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/SlipWeakeningData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,15 +54,15 @@
 
   static const int _numVarsVertex;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
   static const int _numPropertyValues[];
 
@@ -72,27 +72,27 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _friction[];
+  static const PylithScalar _friction[];
 
-  static const double _slip[];
+  static const PylithScalar _slip[];
 
-  static const double _slipRate[];
+  static const PylithScalar _slipRate[];
 
-  static const double _normalTraction[];
+  static const PylithScalar _normalTraction[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,15 +32,15 @@
 
 const int pylith::friction::StaticFrictionData::_numVarsVertex = 0;
 
-const double pylith::friction::StaticFrictionData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::friction::StaticFrictionData::_lengthScale =   1.00000000e+03;
 
-const double pylith::friction::StaticFrictionData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::friction::StaticFrictionData::_timeScale =   1.00000000e+00;
 
-const double pylith::friction::StaticFrictionData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::friction::StaticFrictionData::_pressureScale =   2.25000000e+10;
 
-const double pylith::friction::StaticFrictionData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::friction::StaticFrictionData::_densityScale =   1.00000000e+03;
 
-const double pylith::friction::StaticFrictionData::_dt = 0.01;
+const PylithScalar pylith::friction::StaticFrictionData::_dt = 0.01;
 
 const int pylith::friction::StaticFrictionData::_numPropertyValues[] = {
 1,
@@ -56,54 +56,54 @@
 
 const char** pylith::friction::StaticFrictionData::_dbStateVarValues = 0;
 
-const double pylith::friction::StaticFrictionData::_dbProperties[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_dbProperties[] = {
   0.6,
   1000000,
   0.6,
   1000000,
 };
 
-const double* pylith::friction::StaticFrictionData::_dbStateVars = 0;
+const PylithScalar* pylith::friction::StaticFrictionData::_dbStateVars = 0;
 
-const double pylith::friction::StaticFrictionData::_properties[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_properties[] = {
   0.6,
   1000000,
   0.6,
   1000000,
 };
 
-const double* pylith::friction::StaticFrictionData::_stateVars = 0;
+const PylithScalar* pylith::friction::StaticFrictionData::_stateVars = 0;
 
-const double pylith::friction::StaticFrictionData::_propertiesNondim[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_propertiesNondim[] = {
    0.6,
    0.000044444444,
    0.6,
    0.000044444444,
 };
 
-const double* pylith::friction::StaticFrictionData::_stateVarsNondim = 0;
+const PylithScalar* pylith::friction::StaticFrictionData::_stateVarsNondim = 0;
 
-const double pylith::friction::StaticFrictionData::_friction[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_friction[] = {
   1000001.32,
   0.0,
 };
 
-const double pylith::friction::StaticFrictionData::_slip[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_slip[] = {
   0.12,
   0.25,
 };
 
-const double pylith::friction::StaticFrictionData::_slipRate[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_slipRate[] = {
   0.74,
   0.64,
 };
 
-const double pylith::friction::StaticFrictionData::_normalTraction[] = {
+const PylithScalar pylith::friction::StaticFrictionData::_normalTraction[] = {
   -2.2,
   0.8,
 };
 
-const double* pylith::friction::StaticFrictionData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::friction::StaticFrictionData::_stateVarsUpdated = 0;
 
 pylith::friction::StaticFrictionData::StaticFrictionData(void)
 { // constructor
@@ -122,18 +122,18 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
   dt = _dt;
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  friction = const_cast<double*>(_friction);
-  slip = const_cast<double*>(_slip);
-  slipRate = const_cast<double*>(_slipRate);
-  normalTraction = const_cast<double*>(_normalTraction);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::friction::StaticFrictionData::~StaticFrictionData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/StaticFrictionData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,15 +54,15 @@
 
   static const int _numVarsVertex;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
   static const int _numPropertyValues[];
 
@@ -72,27 +72,27 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _friction[];
+  static const PylithScalar _friction[];
 
-  static const double _slip[];
+  static const PylithScalar _slip[];
 
-  static const double _slipRate[];
+  static const PylithScalar _slipRate[];
 
-  static const double _normalTraction[];
+  static const PylithScalar _normalTraction[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,15 +32,15 @@
 
 const int pylith::friction::TimeWeakeningData::_numVarsVertex = 1;
 
-const double pylith::friction::TimeWeakeningData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::friction::TimeWeakeningData::_lengthScale =   1.00000000e+03;
 
-const double pylith::friction::TimeWeakeningData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::friction::TimeWeakeningData::_timeScale =   1.00000000e+00;
 
-const double pylith::friction::TimeWeakeningData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::friction::TimeWeakeningData::_pressureScale =   2.25000000e+10;
 
-const double pylith::friction::TimeWeakeningData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::friction::TimeWeakeningData::_densityScale =   1.00000000e+03;
 
-const double pylith::friction::TimeWeakeningData::_dt = 0.01;
+const PylithScalar pylith::friction::TimeWeakeningData::_dt = 0.01;
 
 const int pylith::friction::TimeWeakeningData::_numPropertyValues[] = {
   1,
@@ -64,7 +64,7 @@
   "elapsed-time",
 };
 
-const double pylith::friction::TimeWeakeningData::_dbProperties[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_dbProperties[] = {
   0.6,
   0.5,
   0.8,
@@ -75,12 +75,12 @@
   1000000,
 };
 
-const double pylith::friction::TimeWeakeningData::_dbStateVars[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_dbStateVars[] = {
   0.4,
   0.5,
 };
 
-const double pylith::friction::TimeWeakeningData::_properties[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_properties[] = {
   0.6,
   0.5,
   0.8,
@@ -91,12 +91,12 @@
   1000000,
 };
 
-const double pylith::friction::TimeWeakeningData::_stateVars[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_stateVars[] = {
   0.4,
   0.5,
 };
 
-const double pylith::friction::TimeWeakeningData::_propertiesNondim[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_propertiesNondim[] = {
   0.6,
   0.5,
   0.8,
@@ -107,32 +107,32 @@
   0.000044444444,
 };
 
-const double pylith::friction::TimeWeakeningData::_stateVarsNondim[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_stateVarsNondim[] = {
   0.4,
   0.5,
 };
 
-const double pylith::friction::TimeWeakeningData::_friction[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_friction[] = {
   1000001.21,
   1000001.15,
 };
 
-const double pylith::friction::TimeWeakeningData::_slip[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_slip[] = {
   0.12,
   0.25,
 };
 
-const double pylith::friction::TimeWeakeningData::_slipRate[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_slipRate[] = {
   0.74,
   0.64,
 };
 
-const double pylith::friction::TimeWeakeningData::_normalTraction[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_normalTraction[] = {
   -2.2,
   -2.3,
 };
 
-const double pylith::friction::TimeWeakeningData::_stateVarsUpdated[] = {
+const PylithScalar pylith::friction::TimeWeakeningData::_stateVarsUpdated[] = {
   0.41,
   0.51,
 };
@@ -154,18 +154,18 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
   dt = _dt;
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  friction = const_cast<double*>(_friction);
-  slip = const_cast<double*>(_slip);
-  slipRate = const_cast<double*>(_slipRate);
-  normalTraction = const_cast<double*>(_normalTraction);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  friction = const_cast<PylithScalar*>(_friction);
+  slip = const_cast<PylithScalar*>(_slip);
+  slipRate = const_cast<PylithScalar*>(_slipRate);
+  normalTraction = const_cast<PylithScalar*>(_normalTraction);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::friction::TimeWeakeningData::~TimeWeakeningData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/friction/data/TimeWeakeningData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,15 +54,15 @@
 
   static const int _numVarsVertex;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dt;
+  static const PylithScalar _dt;
 
   static const int _numPropertyValues[];
 
@@ -72,27 +72,27 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _friction[];
+  static const PylithScalar _friction[];
 
-  static const double _slip[];
+  static const PylithScalar _slip[];
 
-  static const double _slipRate[];
+  static const PylithScalar _slipRate[];
 
-  static const double _normalTraction[];
+  static const PylithScalar _normalTraction[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,12 +51,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -143,7 +143,7 @@
 
   delete _dataElastic; _dataElastic = new DruckerPrager3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // test_calcStressTimeDep
@@ -158,7 +158,7 @@
 
   delete _dataElastic; _dataElastic = new DruckerPrager3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // test_calcElasticConstsTimeDep
@@ -173,7 +173,7 @@
 
   delete _dataElastic; _dataElastic = new DruckerPrager3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,15 +35,15 @@
       public :
 	Linear(void) {};
 	~Linear(void) {};
-	double effStressFunc(const double x) {
+	PylithScalar effStressFunc(const PylithScalar x) {
 	  return x - 10.0;
 	};
-	double effStressDerivFunc(const double x) {
+	PylithScalar effStressDerivFunc(const PylithScalar x) {
 	  return 1.0;
 	};
-	double effStressFuncDerivFunc(double* f,
-				      double* df,
-				      const double x) {
+	PylithScalar effStressFuncDerivFunc(PylithScalar* f,
+				      PylithScalar* df,
+				      const PylithScalar x) {
 	  *f = effStressFunc(x);
 	  *df = effStressDerivFunc(x);
 	};
@@ -60,15 +60,15 @@
       public :
 	Quadratic(void) {};
 	~Quadratic(void) {};
-	double effStressFunc(const double x) {
+	PylithScalar effStressFunc(const PylithScalar x) {
 	  return 1.0e+5 - 1.0/9.0e+3 * pow(x + 2.0e+4, 2);
 	};
-	double effStressDerivFunc(const double x) {
+	PylithScalar effStressDerivFunc(const PylithScalar x) {
 	  return -2*1.0/9.0e+3*(x+2.0e+4);
 	};
-	double effStressFuncDerivFunc(double* f,
-				      double* df,
-				      const double x) {
+	PylithScalar effStressFuncDerivFunc(PylithScalar* f,
+				      PylithScalar* df,
+				      const PylithScalar x) {
 	  *f = effStressFunc(x);
 	  *df = effStressDerivFunc(x);
 	};
@@ -85,15 +85,15 @@
       public :
 	Cubic(void) {};
 	~Cubic(void) {};
-	double effStressFunc(const double x) {
+	PylithScalar effStressFunc(const PylithScalar x) {
 	  return pow(x - 4.0, 3) - 8.0;
 	};
-	double effStressDerivFunc(const double x) {
+	PylithScalar effStressDerivFunc(const PylithScalar x) {
 	  return 3.0*pow(x - 4.0, 2);
 	};
-	double effStressFuncDerivFunc(double* f,
-				      double* df,
-				      const double x) {
+	PylithScalar effStressFuncDerivFunc(PylithScalar* f,
+				      PylithScalar* df,
+				      const PylithScalar x) {
 	  *f = effStressFunc(x);
 	  *df = effStressDerivFunc(x);
 	};
@@ -107,16 +107,16 @@
 void
 pylith::materials::TestEffectiveStress::testCalculateLinear(void)
 { // testCalculateLinear
-  const double valueE = 10.0;
+  const PylithScalar valueE = 10.0;
   
   _EffectiveStress::Linear material;
 
   const int ntests = 4;
-  const double guesses[ntests] = { 0.0, 6.0, 14.0, 20.0 };
-  const double scale = 1.0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar guesses[ntests] = { 0.0, 6.0, 14.0, 20.0 };
+  const PylithScalar scale = 1.0;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < ntests; ++i) {
-    const double value =
+    const PylithScalar value =
       EffectiveStress::calculate<_EffectiveStress::Linear>(guesses[i], scale,
 							   &material);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, value/valueE, tolerance);
@@ -128,16 +128,16 @@
 void
 pylith::materials::TestEffectiveStress::testCalculateQuadratic(void)
 { // testCalculateQuadratic
-  const double valueE = 1.0e+04;
+  const PylithScalar valueE = 1.0e+04;
   
   _EffectiveStress::Quadratic material;
 
   const int ntests = 4;
-  const double guesses[ntests] = { 1.0, 1.0e-1, 2.0e-2, 1.0e-2 };
-  const double scale = 1.0e-2;
-  const double tolerance = 1.0e-06;
+  const PylithScalar guesses[ntests] = { 1.0, 1.0e-1, 2.0e-2, 1.0e-2 };
+  const PylithScalar scale = 1.0e-2;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < ntests; ++i) {
-    const double value =
+    const PylithScalar value =
       EffectiveStress::calculate<_EffectiveStress::Quadratic>(guesses[i], scale,
 							   &material);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, value/valueE, tolerance);
@@ -149,16 +149,16 @@
 void
 pylith::materials::TestEffectiveStress::testCalculateCubic(void)
 { // testCalculateCubic
-  const double valueE = 6.0;
+  const PylithScalar valueE = 6.0;
   
   _EffectiveStress::Cubic material;
 
   const int ntests = 4;
-  const double guesses[ntests] = { 2.0, 4.0, 6.0, 8.0 };
-  const double scale = 1.0;
-  const double tolerance = 1.0e-06;
+  const PylithScalar guesses[ntests] = { 2.0, 4.0, 6.0, 8.0 };
+  const PylithScalar scale = 1.0;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < ntests; ++i) {
-    const double value =
+    const PylithScalar value =
       EffectiveStress::calculate<_EffectiveStress::Cubic>(guesses[i], scale,
 							   &material);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, value/valueE, tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestEffectiveStress.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,6 +27,8 @@
 #if !defined(pylith_materials_testeffectivestress_hh)
 #define pylith_materials_testeffectivestress_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 #include <cppunit/extensions/HelperMacros.h>
 
 /// Namespace for pylith package

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // ----------------------------------------------------------------------
@@ -51,8 +51,8 @@
 
   topology::Mesh mesh;
 
-  const double dt = _matElastic->stableTimeStepImplicit(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+  const PylithScalar dt = _matElastic->stableTimeStepImplicit(mesh);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), dt/pylith::PYLITH_MAXSCALAR);
 } // testStableTimeStepImplicit
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticMaterial.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticMaterial.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
 #include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
 #include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
@@ -99,7 +99,7 @@
     sieveMesh->getLabelStratum("material-id", materialId);
   SieveMesh::point_type cell = *cells->begin();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int tensorSize = material._tensorSize;
   const int numQuadPts = data.numLocs;
 
@@ -110,9 +110,9 @@
   CPPUNIT_ASSERT(!stressSection.isNull());
   int fiberDim = numQuadPts * tensorSize;
   CPPUNIT_ASSERT_EQUAL(fiberDim, stressSection->getFiberDimension(cell));
-  const double* initialStress = stressSection->restrictPoint(cell);
+  const PylithScalar* initialStress = stressSection->restrictPoint(cell);
   CPPUNIT_ASSERT(0 != initialStress);
-  const double* initialStressE = data.initialStress;
+  const PylithScalar* initialStressE = data.initialStress;
   CPPUNIT_ASSERT(0 != initialStressE);
   for (int i=0; i < fiberDim; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStress[i]/initialStressE[i],
@@ -125,9 +125,9 @@
   CPPUNIT_ASSERT(!strainSection.isNull());
   fiberDim = numQuadPts * tensorSize;
   CPPUNIT_ASSERT_EQUAL(fiberDim, strainSection->getFiberDimension(cell));
-  const double* initialStrain = strainSection->restrictPoint(cell);
+  const PylithScalar* initialStrain = strainSection->restrictPoint(cell);
   CPPUNIT_ASSERT(0 != initialStrain);
-  const double* initialStrainE = data.initialStrain;
+  const PylithScalar* initialStrainE = data.initialStrain;
   CPPUNIT_ASSERT(0 != initialStrainE);
   for (int i=0; i < fiberDim; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStrain[i]/initialStrainE[i],
@@ -191,43 +191,43 @@
 
   material.retrievePropsAndVars(cell);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int tensorSize = material._tensorSize;
   const int numQuadPts = data.numLocs;
   const int numVarsQuadPt = data.numVarsQuadPt;
 
   // Test cell arrays
-  const double* propertiesE = data.properties;
+  const PylithScalar* propertiesE = data.properties;
   CPPUNIT_ASSERT(0 != propertiesE);
-  const double_array& properties = material._propertiesCell;
+  const scalar_array& properties = material._propertiesCell;
   size_t size = data.numLocs*data.numPropsQuadPt;
   CPPUNIT_ASSERT_EQUAL(size, properties.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, properties[i]/propertiesE[i],
 				 tolerance);
 
-  const double* stateVarsE = data.stateVars;
+  const PylithScalar* stateVarsE = data.stateVars;
   CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
 		  (0 == numVarsQuadPt && 0 == stateVarsE) );
-  const double_array& stateVars = material._stateVarsCell;
+  const scalar_array& stateVars = material._stateVarsCell;
   size = data.numLocs*numVarsQuadPt;
   CPPUNIT_ASSERT_EQUAL(size, stateVars.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i],
 				 tolerance);
 
-  const double* initialStressE = data.initialStress;
+  const PylithScalar* initialStressE = data.initialStress;
   CPPUNIT_ASSERT(0 != initialStressE);
-  const double_array& initialStress = material._initialStressCell;
+  const scalar_array& initialStress = material._initialStressCell;
   size = data.numLocs*tensorSize;
   CPPUNIT_ASSERT_EQUAL(size, initialStress.size());
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStress[i]/initialStressE[i],
 				 tolerance);
 
-  const double* initialStrainE = data.initialStrain;
+  const PylithScalar* initialStrainE = data.initialStrain;
   CPPUNIT_ASSERT(0 != initialStrainE);
-  const double_array& initialStrain = material._initialStrainCell;
+  const scalar_array& initialStrain = material._initialStrainCell;
   size = data.numLocs*tensorSize;
   CPPUNIT_ASSERT_EQUAL(size, initialStrain.size());
   for (size_t i=0; i < size; ++i)
@@ -254,16 +254,16 @@
   SieveMesh::point_type cell = *cells->begin();
 
   material.retrievePropsAndVars(cell);
-  const double_array& density = material.calcDensity();
+  const scalar_array& density = material.calcDensity();
 
   const int tensorSize = material._tensorSize;
   const int numQuadPts = data.numLocs;
 
-  const double* densityE = data.density;
+  const PylithScalar* densityE = data.density;
   CPPUNIT_ASSERT(0 != densityE);
   const size_t size = numQuadPts;
   CPPUNIT_ASSERT_EQUAL(size, density.size());
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[i]/densityE[i], tolerance);
 } // testCalcDensity
@@ -290,16 +290,16 @@
   const int numQuadPts = data.numLocs;
 
   // Setup total strain
-  double_array strain(data.strain, numQuadPts*tensorSize);
+  scalar_array strain(data.strain, numQuadPts*tensorSize);
 
   material.retrievePropsAndVars(cell);
-  const double_array& stress = material.calcStress(strain);
+  const scalar_array& stress = material.calcStress(strain);
 
-  const double* stressE = data.stress;
+  const PylithScalar* stressE = data.stress;
   CPPUNIT_ASSERT(0 != stressE);
   const size_t size = numQuadPts * tensorSize;
   CPPUNIT_ASSERT_EQUAL(size, stress.size());
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i], tolerance);
 } // testCalcStress
@@ -326,10 +326,10 @@
   const int numQuadPts = data.numLocs;
 
   // Setup total strain
-  double_array strain(data.strain, numQuadPts*tensorSize);
+  scalar_array strain(data.strain, numQuadPts*tensorSize);
 
   material.retrievePropsAndVars(cell);
-  const double_array& elasticConsts = material.calcDerivElastic(strain);
+  const scalar_array& elasticConsts = material.calcDerivElastic(strain);
 
   int numElasticConsts = 0;
   switch (data.dimension)
@@ -347,11 +347,11 @@
       assert(0);
     } // switch
 
-  const double* elasticConstsE = data.elasticConsts;
+  const PylithScalar* elasticConstsE = data.elasticConsts;
   CPPUNIT_ASSERT(0 != elasticConstsE);
   const size_t size = numQuadPts * numElasticConsts;
   CPPUNIT_ASSERT_EQUAL(size, elasticConsts.size());
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (size_t i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i],
 				 tolerance);
@@ -385,10 +385,10 @@
   SieveMesh::point_type cell = *cells->begin();
 
   material.retrievePropsAndVars(cell);
-  const double dt = material.stableTimeStepImplicit(mesh);
+  const PylithScalar dt = material.stableTimeStepImplicit(mesh);
 
-  const double tolerance = 1.0e-06;
-  const double dtE = data.dtStableImplicit;
+  const PylithScalar tolerance = 1.0e-06;
+  const PylithScalar dtE = data.dtStableImplicit;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, dt/dtE, tolerance);
 } // testStableTimeStepImplicit
 
@@ -425,23 +425,23 @@
   const int numPropsQuadPt = data->numPropsQuadPt;
   const int numVarsQuadPt = data->numVarsQuadPt;
   
-  double density = 0;
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
+  PylithScalar density = 0;
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
-	   numPropsQuadPt*sizeof(double));
+	   numPropsQuadPt*sizeof(PylithScalar));
     memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
-	   numVarsQuadPt*sizeof(double));
+	   numVarsQuadPt*sizeof(PylithScalar));
 
     _matElastic->_calcDensity(&density, 
 			      &properties[0], properties.size(),
 			      &stateVars[0], stateVars.size());
     
-    const double densityE = data->density[iLoc];
+    const PylithScalar densityE = data->density[iLoc];
     
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density/densityE, tolerance);
   } // for
 } // _testCalcDensity
@@ -462,24 +462,24 @@
   const int numVarsQuadPt = data->numVarsQuadPt;
   const int tensorSize = _matElastic->_tensorSize;
   
-  double_array stress(tensorSize);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  scalar_array stress(tensorSize);
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
+  scalar_array strain(tensorSize);
+  scalar_array initialStress(tensorSize);
+  scalar_array initialStrain(tensorSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
-	   properties.size()*sizeof(double));
+	   properties.size()*sizeof(PylithScalar));
     memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
-	   stateVars.size()*sizeof(double));
+	   stateVars.size()*sizeof(PylithScalar));
     memcpy(&strain[0], &data->strain[iLoc*tensorSize],
-	   strain.size()*sizeof(double));
+	   strain.size()*sizeof(PylithScalar));
     memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
-	   initialStress.size()*sizeof(double));
+	   initialStress.size()*sizeof(PylithScalar));
     memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
-	   initialStrain.size()*sizeof(double));
+	   initialStrain.size()*sizeof(PylithScalar));
 
     _matElastic->_calcStress(&stress[0], stress.size(),
 			     &properties[0], properties.size(),
@@ -489,10 +489,10 @@
 			     &initialStrain[0], initialStrain.size(),
 			     computeStateVars);
 
-    const double* stressE = &data->stress[iLoc*tensorSize];
+    const PylithScalar* stressE = &data->stress[iLoc*tensorSize];
     CPPUNIT_ASSERT(0 != stressE);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (8 == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-04;
     for (int i=0; i < tensorSize; ++i)
       if (fabs(stressE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i], 
@@ -533,24 +533,24 @@
   const int numPropsQuadPt = data->numPropsQuadPt;
   const int numVarsQuadPt = data->numVarsQuadPt;
   
-  double_array elasticConsts(numConsts);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  scalar_array elasticConsts(numConsts);
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
+  scalar_array strain(tensorSize);
+  scalar_array initialStress(tensorSize);
+  scalar_array initialStrain(tensorSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
-	   numPropsQuadPt*sizeof(double));
+	   numPropsQuadPt*sizeof(PylithScalar));
     memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
-	   numVarsQuadPt*sizeof(double));
+	   numVarsQuadPt*sizeof(PylithScalar));
     memcpy(&strain[0], &data->strain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
 
     _matElastic->_calcElasticConsts(&elasticConsts[0], elasticConsts.size(),
 				    &properties[0], properties.size(),
@@ -559,10 +559,10 @@
 				    &initialStress[0], initialStress.size(),
 				    &initialStrain[0], initialStrain.size());
 
-    const double* elasticConstsE = &data->elasticConsts[iLoc*numConsts];
+    const PylithScalar* elasticConstsE = &data->elasticConsts[iLoc*numConsts];
     CPPUNIT_ASSERT(0 != elasticConstsE);
     
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (int i=0; i < numConsts; ++i)
       if (fabs(elasticConstsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i], 
@@ -589,23 +589,23 @@
   const int numVarsQuadPt = data->numVarsQuadPt;
   const int tensorSize = _matElastic->_tensorSize;
   
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
+  scalar_array strain(tensorSize);
+  scalar_array initialStress(tensorSize);
+  scalar_array initialStrain(tensorSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
-	   numPropsQuadPt*sizeof(double));
+	   numPropsQuadPt*sizeof(PylithScalar));
     memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
-	   numVarsQuadPt*sizeof(double));
+	   numVarsQuadPt*sizeof(PylithScalar));
     memcpy(&strain[0], &data->strain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
 
     _matElastic->_updateStateVars(&stateVars[0], stateVars.size(),
 				  &properties[0], properties.size(),
@@ -613,12 +613,12 @@
 				  &initialStress[0], initialStress.size(),
 				  &initialStrain[0], initialStrain.size());
     
-    const double* stateVarsE = 
+    const PylithScalar* stateVarsE = 
       (numVarsQuadPt > 0) ? &data->stateVarsUpdated[iLoc*numVarsQuadPt] : 0;
     CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
 		    (0 == numVarsQuadPt && 0 == stateVarsE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = (sizeof(double) == sizeof(PylithScalar)) ? 1.0e-06 : 1.0e-05;
     for (int i=0; i < numVarsQuadPt; ++i)
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i], 
@@ -638,13 +638,13 @@
   CPPUNIT_ASSERT(0 != _dataElastic);
   const ElasticMaterialData* data = _dataElastic;
 
-  const double dt =
+  const PylithScalar dt =
     _matElastic->_stableTimeStepImplicit(data->properties, data->numPropsQuadPt,
 					 data->stateVars, data->numVarsQuadPt);
 
-  const double dtE = data->dtStableImplicit;
+  const PylithScalar dtE = data->dtStableImplicit;
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, dt/dtE, tolerance);
 } // _testStableTimeStepImplicit
 
@@ -694,8 +694,8 @@
   const int numCorners = 3;
   const int numQuadPts = 2;
   const int spaceDim = 1;
-  const double basis[] = { 0.455, -0.122, 0.667, -0.122, 0.455, 0.667 };
-  const double basisDeriv[] = { 
+  const PylithScalar basis[] = { 0.455, -0.122, 0.667, -0.122, 0.455, 0.667 };
+  const PylithScalar basisDeriv[] = { 
     -1.07735027e+00,
     -7.73502692e-02,
     1.15470054e+00,
@@ -703,8 +703,8 @@
     1.07735027e+00,
     -1.15470054e+00,
   };
-  const double quadPtsRef[] = { -0.577350269, 0.577350269 };
-  const double quadWts[] = { 1.0, 1.0  };
+  const PylithScalar quadPtsRef[] = { -0.577350269, 0.577350269 };
+  const PylithScalar quadWts[] = { 1.0, 1.0  };
   quadrature.initialize(basis, numQuadPts, numCorners,
 			basisDeriv, numQuadPts, numCorners, cellDim,
 			quadPtsRef, numQuadPts, cellDim,

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // ----------------------------------------------------------------------
@@ -51,8 +51,8 @@
 
   topology::Mesh mesh;
 
-  const double dt = _matElastic->stableTimeStepImplicit(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+  const PylithScalar dt = _matElastic->stableTimeStepImplicit(mesh);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), dt/pylith::PYLITH_MAXSCALAR);
 } // testStableTimeStepImplicit
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStress.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticPlaneStress.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "pylith/materials/ElasticPlaneStress.hh" // USES ElasticPlaneStress
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // ----------------------------------------------------------------------
@@ -51,8 +51,8 @@
 
   topology::Mesh mesh;
 
-  const double dt = _matElastic->stableTimeStepImplicit(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+  const PylithScalar dt = _matElastic->stableTimeStepImplicit(mesh);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), dt/pylith::PYLITH_MAXSCALAR);
 } // testStableTimeStepImplicit
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStrain1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStrain1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // ----------------------------------------------------------------------
@@ -51,8 +51,8 @@
 
   topology::Mesh mesh;
 
-  const double dt = _matElastic->stableTimeStepImplicit(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+  const PylithScalar dt = _matElastic->stableTimeStepImplicit(mesh);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), dt/pylith::PYLITH_MAXSCALAR);
 } // testStableTimeStepImplicit
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStress1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStress1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestElasticStress1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -24,7 +24,7 @@
 
 #include "pylith/materials/ElasticStress1D.hh" // USES ElasticStress1D
 
-#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/utils/constdefs.h" // USES MAXSCALAR
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
 // ----------------------------------------------------------------------
@@ -51,8 +51,8 @@
 
   topology::Mesh mesh;
 
-  const double dt = _matElastic->stableTimeStepImplicit(mesh);
-  CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+  const PylithScalar dt = _matElastic->stableTimeStepImplicit(mesh);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), dt/pylith::PYLITH_MAXSCALAR);
 } // testStableTimeStepImplicit
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,12 +52,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -144,7 +144,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // testCalcStressTimeDep
@@ -159,7 +159,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // testElasticConstsTimeDep
@@ -174,7 +174,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,12 +52,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -144,7 +144,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // testCalcStressTimeDep
@@ -159,7 +159,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // testElasticConstsTimeDep
@@ -174,7 +174,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellQpQsIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellQpQsIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestGenMaxwellQpQsIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -52,12 +52,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -143,32 +143,32 @@
   const int numVarsQuadPt = _dataElastic->numVarsQuadPt;
   const int tensorSize = material.tensorSize();
   
-  double_array stress(tensorSize);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  scalar_array stress(tensorSize);
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
+  scalar_array strain(tensorSize);
+  scalar_array initialStress(tensorSize);
+  scalar_array initialStrain(tensorSize);
   
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &_dataElastic->properties[iLoc*numPropsQuadPt],
-	   numPropsQuadPt*sizeof(double));
+	   numPropsQuadPt*sizeof(PylithScalar));
     memcpy(&stateVars[0], &_dataElastic->stateVars[iLoc*numVarsQuadPt],
-	   numVarsQuadPt*sizeof(double));
+	   numVarsQuadPt*sizeof(PylithScalar));
     memcpy(&strain[0], &_dataElastic->strain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStress[0], &_dataElastic->initialStress[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStrain[0], &_dataElastic->initialStrain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
 
-    const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+    const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
     const int numMaxwellModels = 3;
 
-    const double meanStrain = (strain[0] + strain[1] + strain[2]) / 3.0;
+    const PylithScalar meanStrain = (strain[0] + strain[1] + strain[2]) / 3.0;
     
     // Compute expected state variables
-    double_array stateVarsE(numVarsQuadPt);
+    scalar_array stateVarsE(numVarsQuadPt);
     const int s_totalStrain = GenMaxwellQpQsIsotropic3D::s_totalStrain;
     const int s_viscousDevStrain = 
       GenMaxwellQpQsIsotropic3D::s_viscousDevStrain;
@@ -197,7 +197,7 @@
 			      &initialStress[0], initialStress.size(),
 			      &initialStrain[0], initialStrain.size());
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < numVarsQuadPt; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i], tolerance);
   } // for
@@ -213,7 +213,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellQpQsIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // testCalcStressTimeDep
@@ -228,7 +228,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellQpQsIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // testElasticConstsTimeDep
@@ -248,7 +248,7 @@
 
   delete _dataElastic; _dataElastic = new GenMaxwellQpQsIsotropic3DTimeDepData();
 
-  const double dt = 2.0e+5;
+  const PylithScalar dt = 2.0e+5;
   material.timeStep(dt);
 
   const bool computeStateVars = true;
@@ -258,27 +258,27 @@
   const int numVarsQuadPt = _dataElastic->numVarsQuadPt;
   const int tensorSize = material.tensorSize();
   
-  double_array stress(tensorSize);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  scalar_array stress(tensorSize);
+  scalar_array properties(numPropsQuadPt);
+  scalar_array stateVars(numVarsQuadPt);
+  scalar_array strain(tensorSize);
+  scalar_array initialStress(tensorSize);
+  scalar_array initialStrain(tensorSize);
   
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     memcpy(&properties[0], &_dataElastic->properties[iLoc*numPropsQuadPt],
-	   numPropsQuadPt*sizeof(double));
+	   numPropsQuadPt*sizeof(PylithScalar));
     memcpy(&stateVars[0], &_dataElastic->stateVars[iLoc*numVarsQuadPt],
-	   numVarsQuadPt*sizeof(double));
+	   numVarsQuadPt*sizeof(PylithScalar));
     memcpy(&strain[0], &_dataElastic->strain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStress[0], &_dataElastic->initialStress[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
     memcpy(&initialStrain[0], &_dataElastic->initialStrain[iLoc*tensorSize],
-	   tensorSize*sizeof(double));
+	   tensorSize*sizeof(PylithScalar));
 
     // Compute expected state variables
-    double_array stateVarsE(numVarsQuadPt);
+    scalar_array stateVarsE(numVarsQuadPt);
     const int numMaxwellModels = 3;
     const int s_totalStrain = GenMaxwellQpQsIsotropic3D::s_totalStrain;
     const int s_viscousDevStrain = 
@@ -296,10 +296,10 @@
       stateVarsE[s_totalStrain+i] = strain[i];
     
     // State variable 'viscous_strain'
-    double_array maxwellTime(numMaxwellModels);
-    double_array maxwellTimeBulk(numMaxwellModels);
-    double_array dq(numMaxwellModels);
-    double_array dqBulk(numMaxwellModels);
+    scalar_array maxwellTime(numMaxwellModels);
+    scalar_array maxwellTimeBulk(numMaxwellModels);
+    scalar_array dq(numMaxwellModels);
+    scalar_array dqBulk(numMaxwellModels);
     for (int i=0; i < numMaxwellModels; ++i) {
       maxwellTime[i] = properties[p_maxwellTimeShear+i];
       dq[i] = maxwellTime[i] * (1.0 - exp(-dt/maxwellTime[i]))/dt;
@@ -308,20 +308,20 @@
       maxwellTimeBulk[i] = properties[p_maxwellTimeBulk+i];
       dqBulk[i] = maxwellTimeBulk[i] * (1.0 - exp(-dt/maxwellTimeBulk[i]))/dt;
     } // for
-    double_array strainT(tensorSize);
+    scalar_array strainT(tensorSize);
     for (int i=0; i < tensorSize; ++i)
       strainT[i] = stateVars[s_totalStrain+i];
-    const double meanStrainT = 
+    const PylithScalar meanStrainT = 
       (stateVars[s_totalStrain+0] + 
        stateVars[s_totalStrain+1] + 
        stateVars[s_totalStrain+2]) / 3.0;
-    const double meanStrainTpdt = (strain[0] + strain[1] + strain[2]) / 3.0;
+    const PylithScalar meanStrainTpdt = (strain[0] + strain[1] + strain[2]) / 3.0;
 
-    double devStrainTpdt = 0.0;
-    double devStrainT = 0.0;
-    double deltaStrain = 0.0;
-    double visStrain = 0.0;
-    const double diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
+    PylithScalar devStrainTpdt = 0.0;
+    PylithScalar devStrainT = 0.0;
+    PylithScalar deltaStrain = 0.0;
+    PylithScalar visStrain = 0.0;
+    const PylithScalar diag[] = { 1.0, 1.0, 1.0, 0.0, 0.0, 0.0 };
     
     for (int iComp=0; iComp < tensorSize; ++iComp) {
       devStrainTpdt = strain[iComp] - diag[iComp]*meanStrainTpdt;
@@ -335,8 +335,8 @@
       } // for
     } // for
 
-    double volStrainTpdt = meanStrainTpdt;
-    double volStrainT = meanStrainT;
+    PylithScalar volStrainTpdt = meanStrainTpdt;
+    PylithScalar volStrainT = meanStrainT;
     deltaStrain = volStrainTpdt - volStrainT;
 
     for (int iModel=0; iModel < numMaxwellModels; ++iModel) {
@@ -352,7 +352,7 @@
 			      &initialStress[0], initialStress.size(),
 			      &initialStrain[0], initialStrain.size());
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < numVarsQuadPt; ++i)
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i], tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "data/MaterialData.hh" // USES MaterialData
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/topology/Field.hh" // USES Field
@@ -79,7 +79,7 @@
 void
 pylith::materials::TestMaterial::testTimeStep(void) 
 { // testTimeStep
-  const double dt = 2.0;
+  const PylithScalar dt = 2.0;
   ElasticIsotropic3D material;
   material.timeStep(dt);
   
@@ -189,8 +189,8 @@
   const int numCorners = 3;
   const int numQuadPts = 2;
   const int spaceDim = 1;
-  const double basis[] = { 0.455, -0.122, 0.667, -0.122, 0.455, 0.667 };
-  const double basisDeriv[] = { 
+  const PylithScalar basis[] = { 0.455, -0.122, 0.667, -0.122, 0.455, 0.667 };
+  const PylithScalar basisDeriv[] = { 
     -1.07735027e+00,
     -7.73502692e-02,
     1.15470054e+00,
@@ -198,8 +198,8 @@
     1.07735027e+00,
     -1.15470054e+00,
   };
-  const double quadPtsRef[] = { -0.577350269, 0.577350269 };
-  const double quadWts[] = { 1.0, 1.0  };
+  const PylithScalar quadPtsRef[] = { -0.577350269, 0.577350269 };
+  const PylithScalar quadWts[] = { 1.0, 1.0  };
   quadrature.initialize(basis, numQuadPts, numCorners,
 			basisDeriv, numQuadPts, numCorners, cellDim,
 			quadPtsRef, numQuadPts, cellDim,
@@ -235,27 +235,27 @@
   material.normalizer(normalizer);
   material.initialize(mesh, &quadrature);
 
-  const double densityA = 2500.0;
-  const double vsA = 3000.0;
-  const double vpA = vsA*sqrt(3.0);
-  const double muA = vsA*vsA*densityA;
-  const double lambdaA = vpA*vpA*densityA - 2.0*muA;
-  const double densityB = 2000.0;
-  const double vsB = 1200.0;
-  const double vpB = vsB*sqrt(3.0);
-  const double muB = vsB*vsB*densityB;
-  const double lambdaB = vpB*vpB*densityB - 2.0*muB;
-  const double densityE[] = { densityA, densityB };
-  const double muE[] = { muA, muB };
-  const double lambdaE[] = { lambdaA, lambdaB };
+  const PylithScalar densityA = 2500.0;
+  const PylithScalar vsA = 3000.0;
+  const PylithScalar vpA = vsA*sqrt(3.0);
+  const PylithScalar muA = vsA*vsA*densityA;
+  const PylithScalar lambdaA = vpA*vpA*densityA - 2.0*muA;
+  const PylithScalar densityB = 2000.0;
+  const PylithScalar vsB = 1200.0;
+  const PylithScalar vpB = vsB*sqrt(3.0);
+  const PylithScalar muB = vsB*vsB*densityB;
+  const PylithScalar lambdaB = vpB*vpB*densityB - 2.0*muB;
+  const PylithScalar densityE[] = { densityA, densityB };
+  const PylithScalar muE[] = { muA, muB };
+  const PylithScalar lambdaE[] = { lambdaA, lambdaB };
 
   SieveMesh::point_type cell = *cells->begin();
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
 
   CPPUNIT_ASSERT(0 != material._properties);
   const Obj<RealSection>& propertiesSection = material._properties->section();
   CPPUNIT_ASSERT(!propertiesSection.isNull());
-  const double* propertiesCell = propertiesSection->restrictPoint(cell);
+  const PylithScalar* propertiesCell = propertiesSection->restrictPoint(cell);
   CPPUNIT_ASSERT(0 != propertiesCell);
 
   const int p_density = 0;
@@ -355,10 +355,10 @@
 
   // Test _dbToProperties()
   const int numLocs = _data->numLocs;
-  double_array dbValues(numDBProperties);
+  scalar_array dbValues(numDBProperties);
 
   const int propertiesSize = _data->numPropsQuadPt;
-  double_array properties(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < numDBProperties; ++i)
@@ -366,8 +366,8 @@
 
     _material->_dbToProperties(&properties[0], dbValues);
     
-    const double* const propertiesE = &_data->properties[iLoc*propertiesSize];
-    const double tolerance = 1.0e-06;
+    const PylithScalar* const propertiesE = &_data->properties[iLoc*propertiesSize];
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -390,20 +390,20 @@
   
   const int numLocs = _data->numLocs;
   const int propertiesSize = _data->numPropsQuadPt;
-  double_array propertiesNondim(propertiesSize);
-  double_array properties(propertiesSize);
+  scalar_array propertiesNondim(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
     memcpy(&properties[0], &_data->properties[iLoc*propertiesSize],
-	   propertiesSize*sizeof(double));
+	   propertiesSize*sizeof(PylithScalar));
     _material->_nondimProperties(&properties[0], properties.size());
     
-    const double* const propertiesNondimE =
+    const PylithScalar* const propertiesNondimE =
       &_data->propertiesNondim[iLoc*propertiesSize];
     CPPUNIT_ASSERT(0 != propertiesNondimE);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -426,19 +426,19 @@
   
   const int numLocs = _data->numLocs;
   const int propertiesSize = _data->numPropsQuadPt;
-  double_array properties(propertiesSize);
+  scalar_array properties(propertiesSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
     memcpy(&properties[0], &_data->propertiesNondim[iLoc*propertiesSize], 
-	   propertiesSize*sizeof(double));
+	   propertiesSize*sizeof(PylithScalar));
     _material->_dimProperties(&properties[0], properties.size());
     
-    const double* const propertiesE =
+    const PylithScalar* const propertiesE =
       &_data->properties[iLoc*propertiesSize];
     CPPUNIT_ASSERT(0 != propertiesE);
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < propertiesSize; ++i) {
       if (fabs(propertiesE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -471,10 +471,10 @@
 
   // Test _dbToStateVars()
   const int numLocs = _data->numLocs;
-  double_array dbValues(numDBStateVars);
+  scalar_array dbValues(numDBStateVars);
 
   const int stateVarsSize = _data->numVarsQuadPt;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
     for (int i=0; i < numDBStateVars; ++i)
@@ -482,11 +482,11 @@
 
     _material->_dbToStateVars(&stateVars[0], dbValues);
     
-    const double* const stateVarsE = 
+    const PylithScalar* const stateVarsE = 
       (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
 		    (0 == stateVarsSize && 0 == stateVarsE) );
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -509,20 +509,20 @@
   
   const int numLocs = _data->numLocs;
   const int stateVarsSize = _data->numVarsQuadPt;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
     memcpy(&stateVars[0], &_data->stateVars[iLoc*stateVarsSize],
-	   stateVarsSize*sizeof(double));
+	   stateVarsSize*sizeof(PylithScalar));
     _material->_nondimStateVars(&stateVars[0], stateVars.size());
     
-    const double* const stateVarsNondimE =
+    const PylithScalar* const stateVarsNondimE =
       (stateVarsSize > 0) ? &_data->stateVarsNondim[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsNondimE) ||
 		    (0 == stateVarsSize && 0 == stateVarsNondimE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsNondimE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
@@ -545,20 +545,20 @@
   
   const int numLocs = _data->numLocs;
   const int stateVarsSize = _data->numVarsQuadPt;
-  double_array stateVars(stateVarsSize);
+  scalar_array stateVars(stateVarsSize);
 
   for (int iLoc=0; iLoc < numLocs; ++iLoc) {
 
     memcpy(&stateVars[0], &_data->stateVarsNondim[iLoc*stateVarsSize],
-	   stateVarsSize*sizeof(double));
+	   stateVarsSize*sizeof(PylithScalar));
     _material->_dimStateVars(&stateVars[0], stateVars.size());
     
-    const double* const stateVarsE =
+    const PylithScalar* const stateVarsE =
       (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
     CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
 		    (0 == stateVarsSize && 0 == stateVarsE) );
 
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < stateVarsSize; ++i) {
       if (fabs(stateVarsE[i]) > tolerance)
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellIsotropic3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellIsotropic3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,12 +51,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -144,7 +144,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // test_calcStressTimeDep
@@ -159,7 +159,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // test_calcElasticConstsTimeDep
@@ -174,7 +174,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellIsotropic3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellPlaneStrain.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaxwellPlaneStrain.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,12 +51,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(false, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -144,7 +144,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // test_calcStressTimeDep
@@ -159,7 +159,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // test_calcElasticConstsTimeDep
@@ -174,7 +174,7 @@
 
   delete _dataElastic; _dataElastic = new MaxwellPlaneStrainTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMetadata.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMetadata.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMetadata.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -21,7 +21,7 @@
 #include "TestMetadata.hh" // Implementation of class methods
 
 #include "pylith/materials/Metadata.hh" // USES Metadata
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include <cstring> // USES strcmp()
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestPowerLaw3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestPowerLaw3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestPowerLaw3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -51,12 +51,12 @@
 
   CPPUNIT_ASSERT_EQUAL(false, material._needNewJacobian);
 
-  const double dt1 = 1.0;
+  const PylithScalar dt1 = 1.0;
   material.timeStep(dt1);
   CPPUNIT_ASSERT_EQUAL(dt1, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
 
-  const double dt2 = 2.0;
+  const PylithScalar dt2 = 2.0;
   material.timeStep(dt2);
   CPPUNIT_ASSERT_EQUAL(dt2, material.Material::timeStep());
   CPPUNIT_ASSERT_EQUAL(true, material.needNewJacobian());
@@ -143,7 +143,7 @@
 
   delete _dataElastic; _dataElastic = new PowerLaw3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcStress();
 } // test_calcStressTimeDep
@@ -158,7 +158,7 @@
 
   delete _dataElastic; _dataElastic = new PowerLaw3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_calcElasticConsts();
 } // test_calcElasticConstsTimeDep
@@ -173,7 +173,7 @@
 
   delete _dataElastic; _dataElastic = new PowerLaw3DTimeDepData();
 
-  double dt = 2.0e+5;
+  PylithScalar dt = 2.0e+5;
   _matElastic->timeStep(dt);
   test_updateStateVars();
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::DruckerPrager3DElasticData::_numVarsQuadPt = 6;
 
-const double pylith::materials::DruckerPrager3DElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::DruckerPrager3DElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::DruckerPrager3DElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::DruckerPrager3DElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::DruckerPrager3DElasticData::_dtStableImplicit =   1.00000000e+10;
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_dtStableImplicit =   1.00000000e+10;
 
 const int pylith::materials::DruckerPrager3DElasticData::_numPropertyValues[] = {
 1,
@@ -78,7 +78,7 @@
 "plastic-strain-xz",
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -93,7 +93,7 @@
   4.36332313e-01,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -108,7 +108,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_properties[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -123,7 +123,7 @@
   1.89338478e-01,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_stateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -138,7 +138,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -153,7 +153,7 @@
   1.89338478e-01,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_stateVarsNondim[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -168,12 +168,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_density[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_strain[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -188,7 +188,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_stress[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_stress[] = {
  -2.24790000e+07,
  -2.24780000e+07,
  -2.24770000e+07,
@@ -203,7 +203,7 @@
  -1.09600000e+06,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -278,7 +278,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -293,7 +293,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -308,7 +308,7 @@
   6.60000000e-04,
 };
 
-const double pylith::materials::DruckerPrager3DElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::DruckerPrager3DElasticData::_stateVarsUpdated[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -342,19 +342,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::DruckerPrager3DElasticData::~DruckerPrager3DElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::DruckerPrager3DTimeDepData::_numVarsQuadPt = 6;
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::DruckerPrager3DTimeDepData::_numPropertyValues[] = {
 1,
@@ -78,7 +78,7 @@
 "plastic-strain-xz",
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -93,7 +93,7 @@
   4.36332313e-01,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -108,7 +108,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -123,7 +123,7 @@
   1.89338478e-01,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_stateVars[] = {
   4.10000000e-05,
   4.20000000e-05,
   4.30000000e-05,
@@ -138,7 +138,7 @@
   1.60000000e-05,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -153,7 +153,7 @@
   1.89338478e-01,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_stateVarsNondim[] = {
   4.10000000e-05,
   4.20000000e-05,
   4.30000000e-05,
@@ -168,12 +168,12 @@
   1.60000000e-05,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_density[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -188,7 +188,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_stress[] = {
   5.55066469e+05,
   5.54377286e+05,
   5.53688104e+05,
@@ -203,7 +203,7 @@
  -3.01017164e+05,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_elasticConsts[] = {
   2.69552119e+10,
   2.61171422e+10,
   2.52103070e+10,
@@ -278,7 +278,7 @@
   2.06328375e+08,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -293,7 +293,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_initialStrain[] = {
   3.60000000e-05,
   3.50000000e-05,
   3.40000000e-05,
@@ -308,7 +308,7 @@
   6.40000000e-05,
 };
 
-const double pylith::materials::DruckerPrager3DTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::DruckerPrager3DTimeDepData::_stateVarsUpdated[] = {
   6.92302201e-05,
   8.02677575e-05,
   9.13052948e-05,
@@ -342,19 +342,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::DruckerPrager3DTimeDepData::~DruckerPrager3DTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/DruckerPrager3DTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::ElasticIsotropic3DData::_numVarsQuadPt = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticIsotropic3DData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticIsotropic3DData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticIsotropic3DData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticIsotropic3DData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::ElasticIsotropic3DData::_numPropertyValues[] = {
 1,
@@ -63,7 +63,7 @@
 
 const char** pylith::materials::ElasticIsotropic3DData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_dbProperties[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -72,9 +72,9 @@
   2.07846097e+03,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_dbStateVars = 0;
+const PylithScalar* pylith::materials::ElasticIsotropic3DData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_properties[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,9 +83,9 @@
   2.88000000e+09,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_stateVars = 0;
+const PylithScalar* pylith::materials::ElasticIsotropic3DData::_stateVars = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -94,14 +94,14 @@
   1.28000000e-01,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_stateVarsNondim = 0;
+const PylithScalar* pylith::materials::ElasticIsotropic3DData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_density[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_strain[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -116,7 +116,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_stress[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_stress[] = {
  -2.24790000e+07,
  -2.24780000e+07,
  -2.24770000e+07,
@@ -131,7 +131,7 @@
  -1.09600000e+06,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_elasticConsts[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -206,7 +206,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_initialStress[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -221,7 +221,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::ElasticIsotropic3DData::_initialStrain[] = {
+const PylithScalar pylith::materials::ElasticIsotropic3DData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -236,7 +236,7 @@
   6.60000000e-04,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::ElasticIsotropic3DData::_stateVarsUpdated = 0;
 
 pylith::materials::ElasticIsotropic3DData::ElasticIsotropic3DData(void)
 { // constructor
@@ -257,19 +257,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticIsotropic3DData::~ElasticIsotropic3DData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialApp.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialApp.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialApp.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -166,59 +166,59 @@
     self.data.addArray(vtype="char*", name="_dbStateVarValues",
                        values=self.dbStateVarValues,
 		       format="\"%s\"", ncols=1)
-    self.data.addArray(vtype="double", name="_dbProperties",
+    self.data.addArray(vtype="PylithScalar", name="_dbProperties",
                        values=self.dbProperties,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_dbStateVars",
+    self.data.addArray(vtype="PylithScalar", name="_dbStateVars",
                        values=self.dbStateVars,
 		       format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_properties",
+    self.data.addArray(vtype="PylithScalar", name="_properties",
                        values=self.properties,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_stateVars",
+    self.data.addArray(vtype="PylithScalar", name="_stateVars",
                        values=self.stateVars,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_propertiesNondim",
+    self.data.addArray(vtype="PylithScalar", name="_propertiesNondim",
                        values=self.propertiesNondim,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_stateVarsNondim",
+    self.data.addArray(vtype="PylithScalar", name="_stateVarsNondim",
                        values=self.stateVarsNondim,
                        format="%16.8e", ncols=1)
-    self.data.addScalar(vtype="double", name="_lengthScale",
+    self.data.addScalar(vtype="PylithScalar", name="_lengthScale",
                         value=self.lengthScale,
                         format="%16.8e")
-    self.data.addScalar(vtype="double", name="_timeScale",
+    self.data.addScalar(vtype="PylithScalar", name="_timeScale",
                         value=self.timeScale,
                         format="%16.8e")
-    self.data.addScalar(vtype="double", name="_pressureScale",
+    self.data.addScalar(vtype="PylithScalar", name="_pressureScale",
                         value=self.pressureScale,
                         format="%16.8e")
-    self.data.addScalar(vtype="double", name="_densityScale",
+    self.data.addScalar(vtype="PylithScalar", name="_densityScale",
                         value=self.densityScale,
                         format="%16.8e")
 
-    self.data.addScalar(vtype="double", name="_dtStableImplicit",
+    self.data.addScalar(vtype="PylithScalar", name="_dtStableImplicit",
                         value=self.dtStableImplicit,
                         format="%16.8e")
-    self.data.addArray(vtype="double", name="_density",
+    self.data.addArray(vtype="PylithScalar", name="_density",
                        values=self.density,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_strain",
+    self.data.addArray(vtype="PylithScalar", name="_strain",
                        values=self.strain,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_stress",
+    self.data.addArray(vtype="PylithScalar", name="_stress",
                        values=self.stress,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_elasticConsts",
+    self.data.addArray(vtype="PylithScalar", name="_elasticConsts",
                        values=self.elasticConsts,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_initialStress",
+    self.data.addArray(vtype="PylithScalar", name="_initialStress",
                        values=self.initialStress,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_initialStrain",
+    self.data.addArray(vtype="PylithScalar", name="_initialStrain",
                        values=self.initialStrain,
                        format="%16.8e", ncols=1)
-    self.data.addArray(vtype="double", name="_stateVarsUpdated",
+    self.data.addArray(vtype="PylithScalar", name="_stateVarsUpdated",
                        values=self.stateVarsUpdated,
                        format="%16.8e", ncols=1)
       

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticMaterialData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -42,16 +42,16 @@
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public:
 
-  double dtStableImplicit; ///< Stable time step for implicit time stepping.
-  double* density; ///< Density at location.
-  double* strain; ///< Strain at location.
-  double* stress; ///< Stress at location.
-  double* elasticConsts; ///< Elastic constants at location.
+  PylithScalar dtStableImplicit; ///< Stable time step for implicit time stepping.
+  PylithScalar* density; ///< Density at location.
+  PylithScalar* strain; ///< Strain at location.
+  PylithScalar* stress; ///< Stress at location.
+  PylithScalar* elasticConsts; ///< Elastic constants at location.
 
-  double* initialStress; ///< Initial stress at location.
-  double* initialStrain; ///< Initial strain at location.
+  PylithScalar* initialStress; ///< Initial stress at location.
+  PylithScalar* initialStrain; ///< Initial strain at location.
 
-  double* stateVarsUpdated; ///< Updated state variables at location.
+  PylithScalar* stateVarsUpdated; ///< Updated state variables at location.
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::ElasticPlaneStrainData::_numVarsQuadPt = 0;
 
-const double pylith::materials::ElasticPlaneStrainData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticPlaneStrainData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticPlaneStrainData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticPlaneStrainData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticPlaneStrainData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::ElasticPlaneStrainData::_numPropertyValues[] = {
 1,
@@ -63,7 +63,7 @@
 
 const char** pylith::materials::ElasticPlaneStrainData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticPlaneStrainData::_dbProperties[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -72,9 +72,9 @@
   2.07846097e+03,
 };
 
-const double* pylith::materials::ElasticPlaneStrainData::_dbStateVars = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStrainData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticPlaneStrainData::_properties[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,9 +83,9 @@
   2.88000000e+09,
 };
 
-const double* pylith::materials::ElasticPlaneStrainData::_stateVars = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStrainData::_stateVars = 0;
 
-const double pylith::materials::ElasticPlaneStrainData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -94,14 +94,14 @@
   1.28000000e-01,
 };
 
-const double* pylith::materials::ElasticPlaneStrainData::_stateVarsNondim = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStrainData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticPlaneStrainData::_density[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::ElasticPlaneStrainData::_strain[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -110,7 +110,7 @@
   4.30000000e-04,
 };
 
-const double pylith::materials::ElasticPlaneStrainData::_stress[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_stress[] = {
  -1.79790000e+07,
  -1.79780000e+07,
  -8.97700000e+06,
@@ -119,7 +119,7 @@
  -1.09900000e+06,
 };
 
-const double pylith::materials::ElasticPlaneStrainData::_elasticConsts[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   0.00000000e+00,
@@ -140,7 +140,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::ElasticPlaneStrainData::_initialStress[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -149,7 +149,7 @@
   5.30000000e+04,
 };
 
-const double pylith::materials::ElasticPlaneStrainData::_initialStrain[] = {
+const PylithScalar pylith::materials::ElasticPlaneStrainData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -158,7 +158,7 @@
   6.30000000e-04,
 };
 
-const double* pylith::materials::ElasticPlaneStrainData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStrainData::_stateVarsUpdated = 0;
 
 pylith::materials::ElasticPlaneStrainData::ElasticPlaneStrainData(void)
 { // constructor
@@ -179,19 +179,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticPlaneStrainData::~ElasticPlaneStrainData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStrainData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::ElasticPlaneStressData::_numVarsQuadPt = 0;
 
-const double pylith::materials::ElasticPlaneStressData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticPlaneStressData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticPlaneStressData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::ElasticPlaneStressData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticPlaneStressData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::ElasticPlaneStressData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticPlaneStressData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticPlaneStressData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticPlaneStressData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::ElasticPlaneStressData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::ElasticPlaneStressData::_numPropertyValues[] = {
 1,
@@ -63,7 +63,7 @@
 
 const char** pylith::materials::ElasticPlaneStressData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticPlaneStressData::_dbProperties[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -72,9 +72,9 @@
   2.07846097e+03,
 };
 
-const double* pylith::materials::ElasticPlaneStressData::_dbStateVars = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStressData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticPlaneStressData::_properties[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,9 +83,9 @@
   2.88000000e+09,
 };
 
-const double* pylith::materials::ElasticPlaneStressData::_stateVars = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStressData::_stateVars = 0;
 
-const double pylith::materials::ElasticPlaneStressData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -94,14 +94,14 @@
   1.28000000e-01,
 };
 
-const double* pylith::materials::ElasticPlaneStressData::_stateVarsNondim = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStressData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticPlaneStressData::_density[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::ElasticPlaneStressData::_strain[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -110,7 +110,7 @@
   4.30000000e-04,
 };
 
-const double pylith::materials::ElasticPlaneStressData::_stress[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_stress[] = {
  -1.49790000e+07,
  -1.49780000e+07,
  -8.97700000e+06,
@@ -119,7 +119,7 @@
  -1.09900000e+06,
 };
 
-const double pylith::materials::ElasticPlaneStressData::_elasticConsts[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_elasticConsts[] = {
   6.00000000e+10,
   1.50000000e+10,
   0.00000000e+00,
@@ -140,7 +140,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::ElasticPlaneStressData::_initialStress[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -149,7 +149,7 @@
   5.30000000e+04,
 };
 
-const double pylith::materials::ElasticPlaneStressData::_initialStrain[] = {
+const PylithScalar pylith::materials::ElasticPlaneStressData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -158,7 +158,7 @@
   6.30000000e-04,
 };
 
-const double* pylith::materials::ElasticPlaneStressData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::ElasticPlaneStressData::_stateVarsUpdated = 0;
 
 pylith::materials::ElasticPlaneStressData::ElasticPlaneStressData(void)
 { // constructor
@@ -179,19 +179,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticPlaneStressData::~ElasticPlaneStressData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticPlaneStressData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::ElasticStrain1DData::_numVarsQuadPt = 0;
 
-const double pylith::materials::ElasticStrain1DData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticStrain1DData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticStrain1DData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::ElasticStrain1DData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticStrain1DData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::ElasticStrain1DData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticStrain1DData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticStrain1DData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticStrain1DData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::ElasticStrain1DData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::ElasticStrain1DData::_numPropertyValues[] = {
 1,
@@ -63,7 +63,7 @@
 
 const char** pylith::materials::ElasticStrain1DData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticStrain1DData::_dbProperties[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -72,9 +72,9 @@
   2.07846097e+03,
 };
 
-const double* pylith::materials::ElasticStrain1DData::_dbStateVars = 0;
+const PylithScalar* pylith::materials::ElasticStrain1DData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticStrain1DData::_properties[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,9 +83,9 @@
   2.88000000e+09,
 };
 
-const double* pylith::materials::ElasticStrain1DData::_stateVars = 0;
+const PylithScalar* pylith::materials::ElasticStrain1DData::_stateVars = 0;
 
-const double pylith::materials::ElasticStrain1DData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -94,39 +94,39 @@
   1.28000000e-01,
 };
 
-const double* pylith::materials::ElasticStrain1DData::_stateVarsNondim = 0;
+const PylithScalar* pylith::materials::ElasticStrain1DData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticStrain1DData::_density[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::ElasticStrain1DData::_strain[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_strain[] = {
   1.10000000e-04,
   4.10000000e-04,
 };
 
-const double pylith::materials::ElasticStrain1DData::_stress[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_stress[] = {
  -1.34790000e+07,
  -1.67700000e+06,
 };
 
-const double pylith::materials::ElasticStrain1DData::_elasticConsts[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_elasticConsts[] = {
   6.75000000e+10,
   8.64000000e+09,
 };
 
-const double pylith::materials::ElasticStrain1DData::_initialStress[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_initialStress[] = {
   2.10000000e+04,
   5.10000000e+04,
 };
 
-const double pylith::materials::ElasticStrain1DData::_initialStrain[] = {
+const PylithScalar pylith::materials::ElasticStrain1DData::_initialStrain[] = {
   3.10000000e-04,
   6.10000000e-04,
 };
 
-const double* pylith::materials::ElasticStrain1DData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::ElasticStrain1DData::_stateVarsUpdated = 0;
 
 pylith::materials::ElasticStrain1DData::ElasticStrain1DData(void)
 { // constructor
@@ -147,19 +147,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticStrain1DData::~ElasticStrain1DData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStrain1DData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::ElasticStress1DData::_numVarsQuadPt = 0;
 
-const double pylith::materials::ElasticStress1DData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticStress1DData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticStress1DData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::ElasticStress1DData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticStress1DData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::ElasticStress1DData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticStress1DData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::ElasticStress1DData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::ElasticStress1DData::_dtStableImplicit =   1.00000000e+30;
+const PylithScalar pylith::materials::ElasticStress1DData::_dtStableImplicit =   1.00000000e+30;
 
 const int pylith::materials::ElasticStress1DData::_numPropertyValues[] = {
 1,
@@ -63,7 +63,7 @@
 
 const char** pylith::materials::ElasticStress1DData::_dbStateVarValues = 0;
 
-const double pylith::materials::ElasticStress1DData::_dbProperties[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -72,9 +72,9 @@
   2.07846097e+03,
 };
 
-const double* pylith::materials::ElasticStress1DData::_dbStateVars = 0;
+const PylithScalar* pylith::materials::ElasticStress1DData::_dbStateVars = 0;
 
-const double pylith::materials::ElasticStress1DData::_properties[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -83,9 +83,9 @@
   2.88000000e+09,
 };
 
-const double* pylith::materials::ElasticStress1DData::_stateVars = 0;
+const PylithScalar* pylith::materials::ElasticStress1DData::_stateVars = 0;
 
-const double pylith::materials::ElasticStress1DData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -94,39 +94,39 @@
   1.28000000e-01,
 };
 
-const double* pylith::materials::ElasticStress1DData::_stateVarsNondim = 0;
+const PylithScalar* pylith::materials::ElasticStress1DData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticStress1DData::_density[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::ElasticStress1DData::_strain[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_strain[] = {
   1.10000000e-04,
   4.10000000e-04,
 };
 
-const double pylith::materials::ElasticStress1DData::_stress[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_stress[] = {
  -1.12290000e+07,
  -1.38900000e+06,
 };
 
-const double pylith::materials::ElasticStress1DData::_elasticConsts[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_elasticConsts[] = {
   5.62500000e+10,
   7.20000000e+09,
 };
 
-const double pylith::materials::ElasticStress1DData::_initialStress[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_initialStress[] = {
   2.10000000e+04,
   5.10000000e+04,
 };
 
-const double pylith::materials::ElasticStress1DData::_initialStrain[] = {
+const PylithScalar pylith::materials::ElasticStress1DData::_initialStrain[] = {
   3.10000000e-04,
   6.10000000e-04,
 };
 
-const double* pylith::materials::ElasticStress1DData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::ElasticStress1DData::_stateVarsUpdated = 0;
 
 pylith::materials::ElasticStress1DData::ElasticStress1DData(void)
 { // constructor
@@ -147,19 +147,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::ElasticStress1DData::~ElasticStress1DData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/ElasticStress1DData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char** _dbStateVarValues;
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double* _dbStateVars;
+  static const PylithScalar* _dbStateVars;
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double* _stateVars;
+  static const PylithScalar* _stateVars;
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double* _stateVarsNondim;
+  static const PylithScalar* _stateVarsNondim;
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numVarsQuadPt = 24;
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::GenMaxwellIsotropic3DElasticData::_numPropertyValues[] = {
 1,
@@ -105,7 +105,7 @@
 "viscous-strain-3-xz",
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -126,7 +126,7 @@
   1.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -177,7 +177,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -198,7 +198,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -249,7 +249,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -270,7 +270,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsNondim[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -321,12 +321,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_strain[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -341,7 +341,7 @@
   6.70000000e-04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_stress[] = {
   1.62660000e+07,
   2.11720000e+07,
   2.60780000e+07,
@@ -356,7 +356,7 @@
   3.53504000e+06,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -431,7 +431,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -446,7 +446,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_initialStrain[] = {
   3.10000000e-05,
   3.20000000e-05,
   3.30000000e-05,
@@ -461,7 +461,7 @@
   6.60000000e-05,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DElasticData::_stateVarsUpdated[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -531,19 +531,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellIsotropic3DElasticData::~GenMaxwellIsotropic3DElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellIsotropic3DTimeDepData::_numVarsQuadPt = 24;
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::GenMaxwellIsotropic3DTimeDepData::_numPropertyValues[] = {
 1,
@@ -105,7 +105,7 @@
 "viscous-strain-3-xz",
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -126,7 +126,7 @@
   1.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -177,7 +177,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -198,7 +198,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVars[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -249,7 +249,7 @@
   6.70000000e-04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -270,7 +270,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVarsNondim[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -321,12 +321,12 @@
   6.70000000e-04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_strain[] = {
   1.20000000e-04,
   2.30000000e-04,
   3.40000000e-04,
@@ -341,7 +341,7 @@
   6.80000000e-04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stress[] = {
   1.73628741e+07,
   2.22970000e+07,
   2.72311259e+07,
@@ -356,7 +356,7 @@
   3.82063657e+06,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_elasticConsts[] = {
   6.74761292e+10,
   2.25119367e+10,
   2.25119367e+10,
@@ -431,7 +431,7 @@
   5.75992605e+09,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -446,7 +446,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_initialStrain[] = {
   3.10000000e-05,
   3.20000000e-05,
   3.30000000e-05,
@@ -461,7 +461,7 @@
   6.60000000e-05,
 };
 
-const double pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::GenMaxwellIsotropic3DTimeDepData::_stateVarsUpdated[] = {
   1.20000000e-04,
   2.30000000e-04,
   3.40000000e-04,
@@ -531,19 +531,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellIsotropic3DTimeDepData::~GenMaxwellIsotropic3DTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellIsotropic3DTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellPlaneStrainElasticData::_numVarsQuadPt = 16;
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::GenMaxwellPlaneStrainElasticData::_numPropertyValues[] = {
 1,
@@ -98,7 +98,7 @@
 "viscous-strain-3-xy",
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -119,7 +119,7 @@
   1.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_dbStateVars[] = {
   1.50000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -154,7 +154,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -175,7 +175,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVars[] = {
   1.50000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -210,7 +210,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -231,7 +231,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVarsNondim[] = {
   6.66666667e-07,
   0.00000000e+00,
   0.00000000e+00,
@@ -266,12 +266,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.40000000e-04,
@@ -280,7 +280,7 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_stress[] = {
   7.33350000e+06,
   7.73950000e+06,
   4.79400000e+06,
@@ -289,7 +289,7 @@
   2.21976000e+06,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   0.00000000e+00,
@@ -310,7 +310,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.40000000e+04,
@@ -319,7 +319,7 @@
   5.40000000e+04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_initialStrain[] = {
   3.10000000e-05,
   3.20000000e-05,
   3.40000000e-05,
@@ -328,7 +328,7 @@
   6.40000000e-05,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainElasticData::_stateVarsUpdated[] = {
   1.50000000e+04,
   1.10000000e-04,
   1.20000000e-04,
@@ -382,19 +382,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellPlaneStrainElasticData::~GenMaxwellPlaneStrainElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellPlaneStrainTimeDepData::_numVarsQuadPt = 16;
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::GenMaxwellPlaneStrainTimeDepData::_numPropertyValues[] = {
 1,
@@ -98,7 +98,7 @@
 "viscous-strain-3-xy",
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -119,7 +119,7 @@
   1.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_dbStateVars[] = {
   2.00000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -154,7 +154,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -175,7 +175,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVars[] = {
   2.00000000e+04,
   1.10000000e-04,
   1.20000000e-04,
@@ -210,7 +210,7 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -231,7 +231,7 @@
   1.73611111e+11,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVarsNondim[] = {
   8.88888889e-07,
   1.10000000e-04,
   1.20000000e-04,
@@ -266,12 +266,12 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_strain[] = {
   1.20000000e-04,
   1.30000000e-04,
   1.50000000e-04,
@@ -280,7 +280,7 @@
   4.50000000e-04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stress[] = {
   8.26999455e+06,
   8.72927873e+06,
   6.46662036e+06,
@@ -289,7 +289,7 @@
   2.49387045e+06,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_elasticConsts[] = {
   6.74761273e+10,
   2.25119358e+10,
   0.00000000e+00,
@@ -310,7 +310,7 @@
   5.75992628e+09,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.40000000e+04,
@@ -319,7 +319,7 @@
   5.40000000e+04,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_initialStrain[] = {
   3.60000000e-05,
   3.50000000e-05,
   3.30000000e-05,
@@ -328,7 +328,7 @@
   6.60000000e-05,
 };
 
-const double pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::GenMaxwellPlaneStrainTimeDepData::_stateVarsUpdated[] = {
   2.00000000e+04,
   1.20000000e-04,
   1.30000000e-04,
@@ -382,19 +382,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellPlaneStrainTimeDepData::~GenMaxwellPlaneStrainTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellPlaneStrainTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_numVarsQuadPt = 27;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+05;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+05;
 
 const int pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_numPropertyValues[] = {
 1,
@@ -143,7 +143,7 @@
 "viscous-mean-strain-3",
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -176,7 +176,7 @@
   2.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -233,7 +233,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   3.75000000e+10,
@@ -266,7 +266,7 @@
   4.16666667e+10,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -323,7 +323,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.66666667e+00,
@@ -356,7 +356,7 @@
   4.16666667e+10,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVarsNondim[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -413,12 +413,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_strain[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -433,7 +433,7 @@
   6.70000000e-04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stress[] = {
  -1.57290000e+07,
  -1.12280000e+07,
  -6.72700000e+06,
@@ -448,7 +448,7 @@
   1.13600000e+05,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -523,7 +523,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -538,7 +538,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -553,7 +553,7 @@
   6.60000000e-04,
 };
 
-const double* pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::_stateVarsUpdated = 0;
 
 pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::GenMaxwellQpQsIsotropic3DElasticData(void)
 { // constructor
@@ -574,19 +574,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellQpQsIsotropic3DElasticData::~GenMaxwellQpQsIsotropic3DElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_numVarsQuadPt = 27;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+05;
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+05;
 
 const int pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_numPropertyValues[] = {
 1,
@@ -143,7 +143,7 @@
 "viscous-mean-strain-3",
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -176,7 +176,7 @@
   1.00000000e+20,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -233,7 +233,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   3.75000000e+10,
@@ -266,7 +266,7 @@
   1.04166667e+11,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVars[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -323,7 +323,7 @@
   2.30000000e-04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.66666667e+00,
@@ -356,7 +356,7 @@
   1.04166667e+11,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVarsNondim[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -413,12 +413,12 @@
   2.30000000e-04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_density[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_strain[] = {
   1.10000000e-04,
   2.20000000e-04,
   3.30000000e-04,
@@ -433,7 +433,7 @@
   6.70000000e-04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stress[] = {
   1.52472941e+07,
   3.08460297e+07,
   4.64447653e+07,
@@ -448,7 +448,7 @@
   1.31748132e+07,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_elasticConsts[] = {
   6.73240927e+10,
   2.24764147e+10,
   2.24764147e+10,
@@ -523,7 +523,7 @@
   5.75963179e+09,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -538,7 +538,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_initialStrain[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -553,7 +553,7 @@
   0.00000000e+00,
 };
 
-const double* pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVarsUpdated = 0;
+const PylithScalar* pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::_stateVarsUpdated = 0;
 
 pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::GenMaxwellQpQsIsotropic3DTimeDepData(void)
 { // constructor
@@ -574,19 +574,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::GenMaxwellQpQsIsotropic3DTimeDepData::~GenMaxwellQpQsIsotropic3DTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/GenMaxwellQpQsIsotropic3DTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double* _stateVarsUpdated;
+  static const PylithScalar* _stateVarsUpdated;
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaterialData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaterialData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaterialData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_materials_materialdata_hh)
 #define pylith_materials_materialdata_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace materials {
      class MaterialData;
@@ -57,17 +59,17 @@
   char** dbPropertyValues; ///< Names of db values for properties.
   char** dbStateVarValues; ///< Names of db values for state variables.
 
-  double* dbProperties; ///< Database values for properties at locations.
-  double* dbStateVars; ///< Database values for state variables at locations.
-  double* properties; ///< Properties at locations.
-  double* stateVars; ///< State variables at locations.
-  double* propertiesNondim; ///< Nondimensional properties at locations.
-  double* stateVarsNondim; ///< Nondimensional state variables at locations.
+  PylithScalar* dbProperties; ///< Database values for properties at locations.
+  PylithScalar* dbStateVars; ///< Database values for state variables at locations.
+  PylithScalar* properties; ///< Properties at locations.
+  PylithScalar* stateVars; ///< State variables at locations.
+  PylithScalar* propertiesNondim; ///< Nondimensional properties at locations.
+  PylithScalar* stateVarsNondim; ///< Nondimensional state variables at locations.
 
-  double lengthScale; ///< Length scale for nondimensionalization.
-  double timeScale; ///< Time scale for nondimensionalization.
-  double pressureScale; ///< Pressure scale for nondimensionalization.
-  double densityScale; ///< Density scale for nondimensionalization.
+  PylithScalar lengthScale; ///< Length scale for nondimensionalization.
+  PylithScalar timeScale; ///< Time scale for nondimensionalization.
+  PylithScalar pressureScale; ///< Pressure scale for nondimensionalization.
+  PylithScalar densityScale; ///< Density scale for nondimensionalization.
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::MaxwellIsotropic3DElasticData::_numVarsQuadPt = 12;
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::MaxwellIsotropic3DElasticData::_numPropertyValues[] = {
 1,
@@ -81,7 +81,7 @@
 "viscous-strain-xz",
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -92,7 +92,7 @@
   1.00000000e+18,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -119,7 +119,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_properties[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -130,7 +130,7 @@
   3.47222222e+08,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_stateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -157,7 +157,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -168,7 +168,7 @@
   3.47222222e+08,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_stateVarsNondim[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -195,12 +195,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_density[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_strain[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -215,7 +215,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_stress[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_stress[] = {
   9.51600000e+06,
   9.92200000e+06,
   1.03280000e+07,
@@ -230,7 +230,7 @@
   2.32544000e+06,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -305,7 +305,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -320,7 +320,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_initialStrain[] = {
   3.10000000e-05,
   3.20000000e-05,
   3.30000000e-05,
@@ -335,7 +335,7 @@
   6.60000000e-05,
 };
 
-const double pylith::materials::MaxwellIsotropic3DElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DElasticData::_stateVarsUpdated[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -381,19 +381,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::MaxwellIsotropic3DElasticData::~MaxwellIsotropic3DElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::MaxwellIsotropic3DTimeDepData::_numVarsQuadPt = 12;
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::MaxwellIsotropic3DTimeDepData::_numPropertyValues[] = {
 1,
@@ -81,7 +81,7 @@
 "viscous-strain-xz",
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -92,7 +92,7 @@
   1.00000000e+19,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -107,7 +107,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -118,7 +118,7 @@
   3.47222222e+09,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVars[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -145,7 +145,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -156,7 +156,7 @@
   3.47222222e+09,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVarsNondim[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -183,12 +183,12 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_density[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_strain[] = {
   1.20000000e-04,
   1.30000000e-04,
   1.40000000e-04,
@@ -203,7 +203,7 @@
   4.70000000e-04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_stress[] = {
   1.02155205e+07,
   1.07095000e+07,
   1.12034795e+07,
@@ -218,7 +218,7 @@
   2.39440573e+06,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_elasticConsts[] = {
   6.74326019e+10,
   2.25336999e+10,
   2.25336999e+10,
@@ -293,7 +293,7 @@
   5.75983408e+09,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -308,7 +308,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_initialStrain[] = {
   3.60000000e-05,
   3.50000000e-05,
   3.40000000e-05,
@@ -323,7 +323,7 @@
   6.40000000e-05,
 };
 
-const double pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::MaxwellIsotropic3DTimeDepData::_stateVarsUpdated[] = {
   1.20000000e-04,
   1.30000000e-04,
   1.40000000e-04,
@@ -369,19 +369,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::MaxwellIsotropic3DTimeDepData::~MaxwellIsotropic3DTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellIsotropic3DTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::MaxwellPlaneStrainElasticData::_numVarsQuadPt = 8;
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::MaxwellPlaneStrainElasticData::_numPropertyValues[] = {
 1,
@@ -78,7 +78,7 @@
 "viscous-strain-xy",
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -89,7 +89,7 @@
   1.00000000e+18,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_dbStateVars[] = {
   1.50000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -108,7 +108,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_properties[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -119,7 +119,7 @@
   3.47222222e+08,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_stateVars[] = {
   1.50000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -138,7 +138,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -149,7 +149,7 @@
   3.47222222e+08,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsNondim[] = {
   6.66666667e-07,
   0.00000000e+00,
   0.00000000e+00,
@@ -168,12 +168,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_density[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_strain[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.40000000e-04,
@@ -182,7 +182,7 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_stress[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_stress[] = {
   7.33350000e+06,
   7.73950000e+06,
   4.79400000e+06,
@@ -191,7 +191,7 @@
   2.21976000e+06,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   0.00000000e+00,
@@ -212,7 +212,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.40000000e+04,
@@ -221,7 +221,7 @@
   5.40000000e+04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_initialStrain[] = {
   3.10000000e-05,
   3.20000000e-05,
   3.40000000e-05,
@@ -230,7 +230,7 @@
   6.40000000e-05,
 };
 
-const double pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainElasticData::_stateVarsUpdated[] = {
   1.50000000e+04,
   1.10000000e-04,
   1.20000000e-04,
@@ -268,19 +268,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::MaxwellPlaneStrainElasticData::~MaxwellPlaneStrainElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numVarsQuadPt = 8;
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dtStableImplicit =   8.88888889e+06;
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_dtStableImplicit =   8.88888889e+06;
 
 const int pylith::materials::MaxwellPlaneStrainTimeDepData::_numPropertyValues[] = {
 1,
@@ -78,7 +78,7 @@
 "viscous-strain-xy",
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -89,7 +89,7 @@
   1.00000000e+19,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_dbStateVars[] = {
   2.00000000e+04,
   0.00000000e+00,
   0.00000000e+00,
@@ -108,7 +108,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -119,7 +119,7 @@
   3.47222222e+09,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVars[] = {
   2.00000000e+04,
   1.10000000e-04,
   1.20000000e-04,
@@ -138,7 +138,7 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -149,7 +149,7 @@
   3.47222222e+09,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsNondim[] = {
   8.88888889e-07,
   1.10000000e-04,
   1.20000000e-04,
@@ -168,12 +168,12 @@
   4.40000000e-04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_density[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_strain[] = {
   1.20000000e-04,
   1.30000000e-04,
   1.50000000e-04,
@@ -182,7 +182,7 @@
   4.50000000e-04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_stress[] = {
   7.82142817e+06,
   8.31540772e+06,
   5.25970271e+06,
@@ -191,7 +191,7 @@
   2.26569236e+06,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_elasticConsts[] = {
   6.74326010e+10,
   2.25336994e+10,
   0.00000000e+00,
@@ -212,7 +212,7 @@
   5.75983408e+09,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.40000000e+04,
@@ -221,7 +221,7 @@
   5.40000000e+04,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_initialStrain[] = {
   3.60000000e-05,
   3.50000000e-05,
   3.30000000e-05,
@@ -230,7 +230,7 @@
   6.60000000e-05,
 };
 
-const double pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::MaxwellPlaneStrainTimeDepData::_stateVarsUpdated[] = {
   2.00000000e+04,
   1.20000000e-04,
   1.30000000e-04,
@@ -268,19 +268,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::MaxwellPlaneStrainTimeDepData::~MaxwellPlaneStrainTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/MaxwellPlaneStrainTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::PowerLaw3DElasticData::_numVarsQuadPt = 12;
 
-const double pylith::materials::PowerLaw3DElasticData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::PowerLaw3DElasticData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::PowerLaw3DElasticData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::PowerLaw3DElasticData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::PowerLaw3DElasticData::_dtStableImplicit =   4.44444444e+06;
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_dtStableImplicit =   4.44444444e+06;
 
 const int pylith::materials::PowerLaw3DElasticData::_numPropertyValues[] = {
 1,
@@ -85,7 +85,7 @@
 "stress-xz",
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_dbProperties[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -100,7 +100,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_dbStateVars[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -127,7 +127,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_properties[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -142,7 +142,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_stateVars[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_stateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -169,7 +169,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -184,7 +184,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_stateVarsNondim[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -211,12 +211,12 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_density[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_strain[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -231,7 +231,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_stress[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_stress[] = {
  -2.24790000e+07,
  -2.24780000e+07,
  -2.24770000e+07,
@@ -246,7 +246,7 @@
  -1.09600000e+06,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_elasticConsts[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_elasticConsts[] = {
   6.75000000e+10,
   2.25000000e+10,
   2.25000000e+10,
@@ -321,7 +321,7 @@
   5.76000000e+09,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_initialStress[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -336,7 +336,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_initialStrain[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_initialStrain[] = {
   3.10000000e-04,
   3.20000000e-04,
   3.30000000e-04,
@@ -351,7 +351,7 @@
   6.60000000e-04,
 };
 
-const double pylith::materials::PowerLaw3DElasticData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::PowerLaw3DElasticData::_stateVarsUpdated[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -397,19 +397,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::PowerLaw3DElasticData::~PowerLaw3DElasticData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DElasticData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -37,15 +37,15 @@
 
 const int pylith::materials::PowerLaw3DTimeDepData::_numVarsQuadPt = 12;
 
-const double pylith::materials::PowerLaw3DTimeDepData::_lengthScale =   1.00000000e+03;
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_lengthScale =   1.00000000e+03;
 
-const double pylith::materials::PowerLaw3DTimeDepData::_timeScale =   1.00000000e+00;
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::PowerLaw3DTimeDepData::_pressureScale =   2.25000000e+10;
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::PowerLaw3DTimeDepData::_densityScale =   1.00000000e+03;
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_densityScale =   1.00000000e+03;
 
-const double pylith::materials::PowerLaw3DTimeDepData::_dtStableImplicit =   4.44444444e+06;
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_dtStableImplicit =   4.44444444e+06;
 
 const int pylith::materials::PowerLaw3DTimeDepData::_numPropertyValues[] = {
 1,
@@ -85,7 +85,7 @@
 "stress-xz",
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_dbProperties[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_dbProperties[] = {
   2.50000000e+03,
   3.00000000e+03,
   5.19615242e+03,
@@ -100,7 +100,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_dbStateVars[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_dbStateVars[] = {
   0.00000000e+00,
   0.00000000e+00,
   0.00000000e+00,
@@ -115,7 +115,7 @@
   0.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_properties[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_properties[] = {
   2.50000000e+03,
   2.25000000e+10,
   2.25000000e+10,
@@ -130,7 +130,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_stateVars[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_stateVars[] = {
   4.10000000e-05,
   4.20000000e-05,
   4.30000000e-05,
@@ -157,7 +157,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_propertiesNondim[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_propertiesNondim[] = {
   2.50000000e+00,
   1.00000000e+00,
   1.00000000e+00,
@@ -172,7 +172,7 @@
   3.00000000e+00,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_stateVarsNondim[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_stateVarsNondim[] = {
   4.10000000e-05,
   4.20000000e-05,
   4.30000000e-05,
@@ -199,12 +199,12 @@
   2.48888889e-06,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_density[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_density[] = {
   2.50000000e+03,
   2.00000000e+03,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_strain[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_strain[] = {
   1.10000000e-04,
   1.20000000e-04,
   1.30000000e-04,
@@ -219,7 +219,7 @@
   4.60000000e-04,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_stress[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_stress[] = {
   7.24875767e+06,
   7.69874295e+06,
   8.14872824e+06,
@@ -234,7 +234,7 @@
   2.24480000e+06,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_elasticConsts[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_elasticConsts[] = {
   6.74326518e+10,
   2.25336747e+10,
   2.25336747e+10,
@@ -309,7 +309,7 @@
   5.75999985e+09,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_initialStress[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_initialStress[] = {
   2.10000000e+04,
   2.20000000e+04,
   2.30000000e+04,
@@ -324,7 +324,7 @@
   5.60000000e+04,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_initialStrain[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_initialStrain[] = {
   3.60000000e-05,
   3.50000000e-05,
   3.40000000e-05,
@@ -339,7 +339,7 @@
   6.40000000e-05,
 };
 
-const double pylith::materials::PowerLaw3DTimeDepData::_stateVarsUpdated[] = {
+const PylithScalar pylith::materials::PowerLaw3DTimeDepData::_stateVarsUpdated[] = {
   4.08831629e-05,
   4.19057121e-05,
   4.29282614e-05,
@@ -385,19 +385,19 @@
   numStateVarValues = const_cast<int*>(_numStateVarValues);
   dbPropertyValues = const_cast<char**>(_dbPropertyValues);
   dbStateVarValues = const_cast<char**>(_dbStateVarValues);
-  dbProperties = const_cast<double*>(_dbProperties);
-  dbStateVars = const_cast<double*>(_dbStateVars);
-  properties = const_cast<double*>(_properties);
-  stateVars = const_cast<double*>(_stateVars);
-  propertiesNondim = const_cast<double*>(_propertiesNondim);
-  stateVarsNondim = const_cast<double*>(_stateVarsNondim);
-  density = const_cast<double*>(_density);
-  strain = const_cast<double*>(_strain);
-  stress = const_cast<double*>(_stress);
-  elasticConsts = const_cast<double*>(_elasticConsts);
-  initialStress = const_cast<double*>(_initialStress);
-  initialStrain = const_cast<double*>(_initialStrain);
-  stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+  dbProperties = const_cast<PylithScalar*>(_dbProperties);
+  dbStateVars = const_cast<PylithScalar*>(_dbStateVars);
+  properties = const_cast<PylithScalar*>(_properties);
+  stateVars = const_cast<PylithScalar*>(_stateVars);
+  propertiesNondim = const_cast<PylithScalar*>(_propertiesNondim);
+  stateVarsNondim = const_cast<PylithScalar*>(_stateVarsNondim);
+  density = const_cast<PylithScalar*>(_density);
+  strain = const_cast<PylithScalar*>(_strain);
+  stress = const_cast<PylithScalar*>(_stress);
+  elasticConsts = const_cast<PylithScalar*>(_elasticConsts);
+  initialStress = const_cast<PylithScalar*>(_initialStress);
+  initialStrain = const_cast<PylithScalar*>(_initialStrain);
+  stateVarsUpdated = const_cast<PylithScalar*>(_stateVarsUpdated);
 } // constructor
 
 pylith::materials::PowerLaw3DTimeDepData::~PowerLaw3DTimeDepData(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/data/PowerLaw3DTimeDepData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,15 +59,15 @@
 
   static const int _numVarsQuadPt;
 
-  static const double _lengthScale;
+  static const PylithScalar _lengthScale;
 
-  static const double _timeScale;
+  static const PylithScalar _timeScale;
 
-  static const double _pressureScale;
+  static const PylithScalar _pressureScale;
 
-  static const double _densityScale;
+  static const PylithScalar _densityScale;
 
-  static const double _dtStableImplicit;
+  static const PylithScalar _dtStableImplicit;
 
   static const int _numPropertyValues[];
 
@@ -77,31 +77,31 @@
 
   static const char* _dbStateVarValues[];
 
-  static const double _dbProperties[];
+  static const PylithScalar _dbProperties[];
 
-  static const double _dbStateVars[];
+  static const PylithScalar _dbStateVars[];
 
-  static const double _properties[];
+  static const PylithScalar _properties[];
 
-  static const double _stateVars[];
+  static const PylithScalar _stateVars[];
 
-  static const double _propertiesNondim[];
+  static const PylithScalar _propertiesNondim[];
 
-  static const double _stateVarsNondim[];
+  static const PylithScalar _stateVarsNondim[];
 
-  static const double _density[];
+  static const PylithScalar _density[];
 
-  static const double _strain[];
+  static const PylithScalar _strain[];
 
-  static const double _stress[];
+  static const PylithScalar _stress[];
 
-  static const double _elasticConsts[];
+  static const PylithScalar _elasticConsts[];
 
-  static const double _initialStress[];
+  static const PylithScalar _initialStress[];
 
-  static const double _initialStrain[];
+  static const PylithScalar _initialStrain[];
 
-  static const double _stateVarsUpdated[];
+  static const PylithScalar _stateVarsUpdated[];
 
 };
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/Makefile.am	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,6 +46,7 @@
 	TestDataWriterVTKSubMeshCases.cc \
 	TestOutputManager.cc \
 	TestOutputSolnSubset.cc \
+	TestOutputSolnPoints.cc \
 	TestDataWriterVTKFaultMesh.cc \
 	TestDataWriterVTKFaultMeshCases.cc \
 	test_meshio.cc
@@ -72,6 +73,7 @@
 	TestMeshIOLagrit.hh \
 	TestOutputManager.hh \
 	TestOutputSolnSubset.hh \
+	TestOutputSolnPoints.hh \
 	TestVertexFilterVecNorm.hh
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestCellFilterAvg.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestCellFilterAvg.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestCellFilterAvg.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
   const std::string label = "field data";
   const topology::FieldBase::VectorFieldEnum fieldType = 
     topology::FieldBase::MULTI_SCALAR;
-  const double fieldValues[] = {
+  const PylithScalar fieldValues[] = {
     1.1, 1.2,
     2.1, 2.2,
   };
@@ -62,28 +62,28 @@
   const int numBasis = 4;
   const int numQuadPts = 2;
   const int spaceDim = 2;
-  const double basis[] = {
+  const PylithScalar basis[] = {
     1.0, 1.0,
     1.0, 1.0,
     1.0, 1.0,
     1.0, 1.0,
   };
-  const double basisDerivRef[] = {
+  const PylithScalar basisDerivRef[] = {
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
   };
-  const double quadPtsRef[] = {
+  const PylithScalar quadPtsRef[] = {
     1.0, 0.0,
    -1.0, 0.0,};
-  const double quadWts[] = { 1.5, 0.5 };
-  const double minJacobian = 1.0;
+  const PylithScalar quadWts[] = { 1.5, 0.5 };
+  const PylithScalar minJacobian = 1.0;
 
   const topology::FieldBase::VectorFieldEnum fieldTypeE = 
     topology::FieldBase::SCALAR;
   const int fiberDimE = 1;
-  const double fieldValuesE[] = {
+  const PylithScalar fieldValuesE[] = {
     (1.5*1.1 + 0.5*1.2)/2.0,
     (1.5*2.1 + 0.5*2.2)/2.0,
   };
@@ -114,7 +114,7 @@
   for (SieveMesh::label_sequence::iterator c_iter=cells->begin();
        c_iter != cellsEnd;
        ++c_iter, ++ipt) {
-    const double* values = &fieldValues[ipt*fiberDim];
+    const PylithScalar* values = &fieldValues[ipt*fiberDim];
     section->updatePoint(*c_iter, values);
   } // for
 
@@ -140,9 +140,9 @@
        c_iter != cellsEnd;
        ++c_iter, ++ipt) {
     CPPUNIT_ASSERT_EQUAL(fiberDimE, sectionF->getFiberDimension(*c_iter));
-    const double* values = sectionF->restrictPoint(*c_iter);
+    const PylithScalar* values = sectionF->restrictPoint(*c_iter);
     CPPUNIT_ASSERT(0 != values);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < fiberDimE; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
 				   values[i]/fieldValuesE[ipt*fiberDimE+i],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterBCMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterBCMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterBCMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -135,7 +135,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	   v_iter != verticesEnd;
 	   ++v_iter, ++ipt) {
-	const double* values = &_data->vertexFields[i][ipt*fiberDim];
+	const PylithScalar* values = &_data->vertexFields[i][ipt*fiberDim];
 	section->updatePoint(*v_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numVertices, ipt);
@@ -185,7 +185,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator c_iter=cellsBegin;
 	   c_iter != cellsEnd;
 	   ++c_iter, ++icell) {
-	const double* values = &_data->cellFields[i][icell*fiberDim];
+	const PylithScalar* values = &_data->cellFields[i][icell*fiberDim];
 	section->updatePoint(*c_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterFaultMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterFaultMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterFaultMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -130,7 +130,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	   v_iter != verticesEnd;
 	   ++v_iter, ++ipt) {
-	const double* values = &_data->vertexFields[i][ipt*fiberDim];
+	const PylithScalar* values = &_data->vertexFields[i][ipt*fiberDim];
 	section->updatePoint(*v_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numVertices, ipt);
@@ -180,7 +180,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator c_iter=cellsBegin;
 	   c_iter != cellsEnd;
 	   ++c_iter, ++icell) {
-	const double* values = &_data->cellFields[i][icell*fiberDim];
+	const PylithScalar* values = &_data->cellFields[i][icell*fiberDim];
 	section->updatePoint(*c_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -20,6 +20,8 @@
 
 #include "TestDataWriterHDF5.hh" // Implementation of class methods
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 #include <hdf5.h> // USES HDF5 API
 
 #if H5_VERS_MAJOR == 1 && H5_VERS_MINOR >= 8
@@ -90,6 +92,8 @@
       size *= dims[i];
     double* data = (size > 0) ? new double[size] : 0;
     CPPUNIT_ASSERT(size > 0);
+    //const hid_t scalartype = (sizeof(double) == sizeof(PylithScalar)) ? 
+    //  H5T_NATIVE_DOUBLE : H5T_NATIVE_DOUBLE;
     err = H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, 
 		  H5P_DEFAULT, (void*) data);
     CPPUNIT_ASSERT(err >= 0);
@@ -109,9 +113,9 @@
     CPPUNIT_ASSERT_EQUAL(sizeE, size);
     for (int i=0; i < size; ++i)
       if (dataE[i] != 0.0)
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, data[i]/dataE[i], tolerance);
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, double(data[i])/dataE[i], tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(dataE[i], data[i], tolerance);
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(dataE[i], double(data[i]), tolerance);
 
     delete[] dimsE; dimsE = 0;
     delete[] dataE; dataE = 0;

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5BCMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5BCMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5BCMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -73,7 +73,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -106,9 +106,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -144,9 +146,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtBCMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtBCMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtBCMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -71,7 +71,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -104,9 +104,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -142,9 +144,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtFaultMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtFaultMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtFaultMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -74,7 +74,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -107,9 +107,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -145,9 +147,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,6 +22,8 @@
 
 #include "data/DataWriterData.hh" // USES DataWriterData
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 #include "pylith/topology/Mesh.hh" // USES Mesh
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/Fields.hh" // USES Fields
@@ -83,7 +85,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -113,9 +115,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -151,9 +155,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtSubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtSubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5ExtSubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -72,7 +72,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -102,9 +102,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -140,9 +142,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5FaultMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5FaultMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5FaultMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -76,7 +76,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -109,9 +109,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -147,9 +149,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5Mesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5Mesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5Mesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -83,7 +83,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -113,9 +113,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -151,9 +153,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5SubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5SubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterHDF5SubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -74,7 +74,7 @@
 
   writer.filename(_data->timestepFilename);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -104,9 +104,11 @@
 
   writer.filename(_data->vertexFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numVertexFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -142,9 +144,11 @@
 
   writer.filename(_data->cellFilename);
 
+  const PylithScalar timeScale = 4.0;
+  writer.timeScale(timeScale);
+  const PylithScalar t = _data->time / timeScale;
+
   const int nfields = _data->numCellFields;
-
-  const double t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -122,7 +122,7 @@
       for (topology::Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	   v_iter != verticesEnd;
 	   ++v_iter, ++ipt) {
-	const double* values = &_data->vertexFields[i][ipt*fiberDim];
+	const PylithScalar* values = &_data->vertexFields[i][ipt*fiberDim];
 	section->updatePoint(*v_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numVertices, ipt);
@@ -172,7 +172,7 @@
       for (topology::Mesh::SieveMesh::label_sequence::iterator c_iter=cells->begin();
 	   c_iter != cellsEnd;
 	   ++c_iter, ++icell) {
-	const double* values = &_data->cellFields[i][icell*fiberDim];
+	const PylithScalar* values = &_data->cellFields[i][icell*fiberDim];
 	section->updatePoint(*c_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterSubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterSubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterSubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -137,7 +137,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	   v_iter != verticesEnd;
 	   ++v_iter, ++ipt) {
-	const double* values = &_data->vertexFields[i][ipt*fiberDim];
+	const PylithScalar* values = &_data->vertexFields[i][ipt*fiberDim];
 	section->updatePoint(*v_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numVertices, ipt);
@@ -189,7 +189,7 @@
       for (topology::SubMesh::SieveMesh::label_sequence::iterator c_iter=cellsBegin;
 	   c_iter != cellsEnd;
 	   ++c_iter, ++icell) {
-	const double* values = &_data->cellFields[i][icell*fiberDim];
+	const PylithScalar* values = &_data->cellFields[i][icell*fiberDim];
 	section->updatePoint(*c_iter, values);
       } // for
       CPPUNIT_ASSERT_EQUAL(_data->numCells, icell);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -31,7 +31,7 @@
 // Check VTK file against archived file.
 void
 pylith::meshio::TestDataWriterVTK::checkFile(const char* filenameRoot,
-					     const double t,
+					     const PylithScalar t,
 					     const char* timeFormat)
 { // checkFile
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTK.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,6 +27,8 @@
 #if !defined(pylith_meshio_testdatawritervtk_hh)
 #define pylith_meshio_testdatawritervtk_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 /// Namespace for pylith package
 namespace pylith {
   namespace meshio {
@@ -49,7 +51,7 @@
    */
   static
   void checkFile(const char* filename,
-		 const double t,
+		 const PylithScalar t,
 		 const char* timeFormat);
   
 }; // class TestDataWriterVTK

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKBCMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -79,7 +79,7 @@
   CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
   CPPUNIT_ASSERT(false == writer._wroteCellHeader);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -121,7 +121,7 @@
 
   const int nfields = _data->numVertexFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -164,7 +164,7 @@
 
   const int nfields = _data->numCellFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKFaultMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKFaultMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKFaultMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -82,7 +82,7 @@
   CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
   CPPUNIT_ASSERT(false == writer._wroteCellHeader);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -124,7 +124,7 @@
 
   const int nfields = _data->numVertexFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);
@@ -167,7 +167,7 @@
 
   const int nfields = _data->numCellFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_faultMesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -94,7 +94,7 @@
 { // testTimeConstant
   DataWriterVTK<topology::Mesh, MeshField> writer;
 
-  const double value = 4.5;
+  const PylithScalar value = 4.5;
   writer.timeConstant(value);
   CPPUNIT_ASSERT_EQUAL(value, writer._timeConstant);
 } // testTimeConstant
@@ -127,7 +127,7 @@
   CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
   CPPUNIT_ASSERT(false == writer._wroteCellHeader);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -169,7 +169,7 @@
 
   const int nfields = _data->numVertexFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);
@@ -212,7 +212,7 @@
 
   const int nfields = _data->numCellFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_mesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestDataWriterVTKSubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,7 +80,7 @@
   CPPUNIT_ASSERT(false == writer._wroteVertexHeader);
   CPPUNIT_ASSERT(false == writer._wroteCellHeader);
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -122,7 +122,7 @@
 
   const int nfields = _data->numVertexFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);
@@ -165,7 +165,7 @@
 
   const int nfields = _data->numCellFields;
 
-  const double t = _data->time;
+  const PylithScalar t = _data->time;
   const int numTimeSteps = 1;
   if (0 == _data->cellsLabel) {
     writer.open(*_submesh, numTimeSteps);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -22,7 +22,7 @@
 
 #include "pylith/meshio/ExodusII.hh"
 
-#include "pylith/utils/array.hh" // USES int_array, double_array, string_vector
+#include "pylith/utils/array.hh" // USES int_array, scalar_array, string_vector
 
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::meshio::TestExodusII );
@@ -93,11 +93,11 @@
 } // testHasVar
 
 // ----------------------------------------------------------------------
-// Test getVar(double*).
+// Test getVar(PylithScalar*).
 void
 pylith::meshio::TestExodusII::testGetVarDouble(void)
 { // testGetVarDouble
-  const double coordsE[8] = { -1.0, 0.0, 0.0, 1.0,
+  const PylithScalar coordsE[8] = { -1.0, 0.0, 0.0, 1.0,
 			      0.0, -1.0, 1.0, 0.0 };
 
   const int ndims = 2;
@@ -105,12 +105,12 @@
   dims[0] = 2;
   dims[1] = 4;
   const int size = dims[0]*dims[1];
-  double_array coords(size);
+  scalar_array coords(size);
 
   ExodusII exofile("data/twotri3_12.2.exo");
   exofile.getVar(&coords[0], dims, ndims, "coord");
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   for (int i=0; i < size; ++i)
     CPPUNIT_ASSERT_DOUBLES_EQUAL(coordsE[i], coords[i], tolerance);
 } // testGetVarDouble

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestExodusII.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -77,7 +77,7 @@
   /// Test hasVar()
   void testHasVar(void);
 
-  /// Test getVar(double*)
+  /// Test getVar(PylithScalar*)
   void testGetVarDouble(void);
 
   /// Test getVar(int*)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestHDF5.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestHDF5.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestHDF5.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -193,13 +193,13 @@
   const hsize_t dims[ndims] = { 2 };
   h5.createDataset("/", "data", dims, dims, ndims, H5T_NATIVE_INT);
 
-  const double scalarE = 2.5;
+  const PylithScalar scalarE = 2.5;
   h5.writeAttribute("/data", "myscalar", (void*)&scalarE, H5T_NATIVE_DOUBLE);
   h5.close();
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   h5.open("test.h5", H5F_ACC_RDONLY);
-  double scalar = 0;
+  PylithScalar scalar = 0;
   h5.readAttribute("/data", "myscalar", (void*)&scalar, H5T_NATIVE_DOUBLE);
   CPPUNIT_ASSERT_DOUBLES_EQUAL(scalarE, scalar, tolerance);
   h5.close();

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIO.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIO.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIO.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -157,9 +157,9 @@
 	vertices->begin();
       v_iter != vertices->end();
       ++v_iter) {
-    const double* vertexCoords = coordsField->restrictPoint(*v_iter);
+    const PylithScalar* vertexCoords = coordsField->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vertexCoords);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       if (data.vertices[i] < 1.0) {
         CPPUNIT_ASSERT_DOUBLES_EQUAL(data.vertices[i++], vertexCoords[iDim],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputManager.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputManager.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputManager.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -151,7 +151,7 @@
 
   spatialdata::geocoords::CSCart cs;
   const int numTimeSteps = 1;
-  const double t = 1.2;
+  const PylithScalar t = 1.2;
   const char* filenameRoot = "output.vtk";
   const char* timeFormat = "%3.1f";
 
@@ -179,13 +179,13 @@
   const char* label = "field data";
   const topology::FieldBase::VectorFieldEnum fieldType = 
     topology::FieldBase::VECTOR;
-  const double fieldValues[] = {
+  const PylithScalar fieldValues[] = {
     1.1, 1.2,
     2.1, 2.2,
     3.1, 3.2,
     4.1, 4.2
   };
-  const double scale = 2.0;
+  const PylithScalar scale = 2.0;
 
   topology::Mesh mesh;
   MeshIOAscii iohandler;
@@ -210,7 +210,7 @@
   CPPUNIT_ASSERT(!section.isNull());
 
   CPPUNIT_ASSERT_EQUAL(nvertices, int(vertices->size()));
-  double_array values(nvertices*fiberDim);
+  scalar_array values(nvertices*fiberDim);
   for (int i=0; i < nvertices*fiberDim; ++i)
     values[i] = fieldValues[i];
   values /= scale;
@@ -222,7 +222,7 @@
 
   spatialdata::geocoords::CSCart cs;
   const int numTimeSteps = 1;
-  const double t = 1.2;
+  const PylithScalar t = 1.2;
   const char* filenameRoot = "output_vertex.vtk";
   const char* filenameRootF = "output_vertex_filter.vtk";
   const char* timeFormat = "%3.1f";
@@ -267,11 +267,11 @@
   const char* label = "field data";
   const topology::FieldBase::VectorFieldEnum fieldType = 
     topology::FieldBase::MULTI_SCALAR;
-  const double fieldValues[] = {
+  const PylithScalar fieldValues[] = {
     1.1, 1.2,
     2.1, 2.2,
   };
-  const double scale = 4.0;
+  const PylithScalar scale = 4.0;
 
   topology::Mesh mesh;
   MeshIOAscii iohandler;
@@ -296,7 +296,7 @@
   CPPUNIT_ASSERT(!section.isNull());
 
   CPPUNIT_ASSERT_EQUAL(ncells, int(cells->size()));
-  double_array values(ncells*fiberDim);
+  scalar_array values(ncells*fiberDim);
   for (int i=0; i < ncells*fiberDim; ++i)
     values[i] = fieldValues[i];
   values /= scale;
@@ -308,7 +308,7 @@
 
   spatialdata::geocoords::CSCart cs;
   const int numTimeSteps = 1;
-  const double t = 1.2;
+  const PylithScalar t = 1.2;
   const char* filenameRoot = "output_cell.vtk";
   const char* filenameRootF = "output_cell_filter.vtk";
   const char* timeFormat = "%3.1f";
@@ -331,23 +331,23 @@
   const int numBasis = 4;
   const int numQuadPts = 2;
   const int spaceDim = 2;
-  const double basis[] = {
+  const PylithScalar basis[] = {
     1.0, 1.0,
     1.0, 1.0,
     1.0, 1.0,
     1.0, 1.0,
   };
-  const double basisDerivRef[] = {
+  const PylithScalar basisDerivRef[] = {
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
     1.0, 1.0, 1.0, 1.0,
   };
-  const double quadPtsRef[] = {
+  const PylithScalar quadPtsRef[] = {
     1.0, 0.0,
    -1.0, 0.0,};
-  const double quadWts[] = { 1.5, 0.5 };
-  const double minJacobian = 1.0;
+  const PylithScalar quadWts[] = { 1.5, 0.5 };
+  const PylithScalar minJacobian = 1.0;
 
   feassemble::Quadrature<topology::Mesh> quadrature;
   quadrature.initialize(basis, numQuadPts, numBasis, 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.cc (from rev 19130, short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputSolnPoints.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.cc	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,197 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestOutputSolnPoints.hh" // Implementation of class methods
+
+#include "pylith/meshio/OutputSolnPoints.hh"
+
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+
+#include <string.h> // USES strcmp()
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::meshio::TestOutputSolnPoints );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Test constructor
+void
+pylith::meshio::TestOutputSolnPoints::testConstructor(void)
+{ // testConstructor
+  OutputSolnPoints output;
+} // testConstructor
+
+
+// ----------------------------------------------------------------------
+// Test setupInterpolator() for 2D points.
+void
+pylith::meshio::TestOutputSolnPoints::testSetupInterpolator2D(void)
+{ // testSetupInterpolator2D
+  const char* filename = "data/quad4.mesh";
+  const int numPoints = 5;
+  const PylithScalar points[10] = { 
+    0.0, 0.1,
+    0.3, 0.4,
+    0.6, 0.7,
+    1.0, 1.1,
+    1.3, 1.4,
+  };
+  const int nvertices = numPoints;
+  const int verticesE[5] = { 5, 6, 7, 8, 9 };
+  const int ncells = numPoints;
+  const int ncorners = 1;
+  const int cellsE[5] = { 5, 6, 7, 8, 9 };
+  const int spaceDim = 2;
+
+  topology::Mesh mesh;
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(spaceDim);
+  cs.initialize();
+  mesh.coordsys(&cs);
+#if 0
+  MeshIOAscii iohandler;
+  iohandler.filename("data/quad4.mesh");
+  iohandler.read(&mesh);
+#endif
+
+  OutputSolnPoints output;
+  output.setupInterpolator(&mesh, points, numPoints, spaceDim);
+
+  const topology::Mesh& pointsMesh = output.pointsMesh();
+  const ALE::Obj<SieveMesh>& sievePointsMesh = pointsMesh.sieveMesh();
+  CPPUNIT_ASSERT(!sievePointsMesh.isNull());
+
+  pointsMesh.view("POINTS MESH");
+
+  // Check vertices
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sievePointsMesh->depthStratum(0);
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+  CPPUNIT_ASSERT_EQUAL(nvertices, int(vertices->size()));
+  int ipt = 0;
+  for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++ipt)
+    CPPUNIT_ASSERT_EQUAL(verticesE[ipt], *v_iter);
+
+  // Check cells
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sievePointsMesh->heightStratum(0);
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sievePointsMesh->getSieve();
+  assert(!sieve.isNull());
+
+  CPPUNIT_ASSERT_EQUAL(ncells, int(cells->size()));
+
+  ALE::ISieveVisitor::PointRetriever<SieveMesh::sieve_type> pV(sieve->getMaxConeSize());
+  int i = 0;
+  for (SieveMesh::label_sequence::iterator c_iter=cells->begin(); c_iter != cellsEnd; ++c_iter) {
+    sieve->cone(*c_iter, pV);
+    const SieveMesh::point_type* cone = pV.getPoints();
+    CPPUNIT_ASSERT_EQUAL(ncorners, (int) pV.getSize());
+    for(int p = 0; p < pV.getSize(); ++p, ++i) {
+      CPPUNIT_ASSERT_EQUAL(cellsE[i], cone[p]);
+    }
+    pV.clear();
+  } // for
+} // testSetupInterpolator2D
+
+
+// ----------------------------------------------------------------------
+// Test setupInterpolator() for 3D points.
+void
+pylith::meshio::TestOutputSolnPoints::testSetupInterpolator3D(void)
+{ // testSetupInterpolator3D
+  const char* filename = "data/quad4.mesh";
+  const int numPoints = 5;
+  const PylithScalar points[15] = { 
+    0.0, 0.1, 0.2,
+    0.3, 0.4, 0.5,
+    0.6, 0.7, 0.8,
+    1.0, 1.1, 1.2,
+    1.3, 1.4, 1.5,
+  };
+  const int nvertices = numPoints;
+  const int verticesE[5] = { 5, 6, 7, 8, 9 };
+  const int ncells = numPoints;
+  const int ncorners = 1;
+  const int cellsE[5] = { 5, 6, 7, 8, 9 };
+  const int spaceDim = 3;
+
+  topology::Mesh mesh;
+  spatialdata::geocoords::CSCart cs;
+  cs.setSpaceDim(spaceDim);
+  cs.initialize();
+  mesh.coordsys(&cs);
+#if 0
+  MeshIOAscii iohandler;
+  iohandler.filename("data/hex8.mesh");
+  iohandler.read(&mesh);
+#endif
+
+  OutputSolnPoints output;
+  output.setupInterpolator(&mesh, points, numPoints, spaceDim);
+
+  const topology::Mesh& pointsMesh = output.pointsMesh();
+  const ALE::Obj<SieveMesh>& sievePointsMesh = pointsMesh.sieveMesh();
+  CPPUNIT_ASSERT(!sievePointsMesh.isNull());
+
+  // Check vertices
+  const ALE::Obj<SieveMesh::label_sequence>& vertices = 
+    sievePointsMesh->depthStratum(0);
+  const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+  CPPUNIT_ASSERT_EQUAL(nvertices, int(vertices->size()));
+  int ipt = 0;
+  for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++ipt)
+    CPPUNIT_ASSERT_EQUAL(verticesE[ipt], *v_iter);
+
+  // Check cells
+  const ALE::Obj<SieveMesh::label_sequence>& cells = 
+    sievePointsMesh->heightStratum(0);
+  const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+  const ALE::Obj<SieveMesh::sieve_type>& sieve = sievePointsMesh->getSieve();
+  assert(!sieve.isNull());
+
+  CPPUNIT_ASSERT_EQUAL(ncells, int(cells->size()));
+
+  ALE::ISieveVisitor::PointRetriever<SieveMesh::sieve_type> pV(sieve->getMaxConeSize());
+  int i = 0;
+  for (SieveMesh::label_sequence::iterator c_iter=cells->begin(); c_iter != cellsEnd; ++c_iter) {
+    sieve->cone(*c_iter, pV);
+    const SieveMesh::point_type *cone = pV.getPoints();
+    CPPUNIT_ASSERT_EQUAL(ncorners, (int) pV.getSize());
+    for(int p = 0; p < pV.getSize(); ++p, ++i) {
+      CPPUNIT_ASSERT_EQUAL(cellsE[i], cone[p]);
+    }
+    pV.clear();
+  } // for
+} // testSetupInterpolator3D
+
+
+// End of file 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.hh (from rev 19130, short/3D/PyLith/trunk/unittests/libtests/meshio/TestOutputSolnPoints.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.hh	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestOutputSolnPoints.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,68 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard, U.S. Geological Survey
+// Charles A. Williams, GNS Science
+// Matthew G. Knepley, University of Chicago
+//
+// This code was developed as part of the Computational Infrastructure
+// for Geodynamics (http://geodynamics.org).
+//
+// Copyright (c) 2010-2011 University of California, Davis
+//
+// See COPYING for license information.
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/meshio/TestOutputSolnPoints.hh
+ *
+ * @brief C++ TestOutputSolnPoints object
+ *
+ * C++ unit testing for OutputSolnPoints.
+ */
+
+#if !defined(pylith_meshio_testoutputsolnpoints_hh)
+#define pylith_meshio_testoutputsolnpoints_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace meshio {
+    class TestOutputSolnPoints;
+  } // meshio
+} // pylith
+
+/// C++ unit testing for OutputSolnPoints
+class pylith::meshio::TestOutputSolnPoints : public CppUnit::TestFixture
+{ // class TestOutputSolnPoints
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestOutputSolnPoints );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testSetupInterpolator2D );
+  CPPUNIT_TEST( testSetupInterpolator3D );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test constructor
+  void testConstructor(void);
+
+  /// Test setupInterpolator for 2D mesh()
+  void testSetupInterpolator2D(void);
+
+  /// Test setupInterpolator for 3D mesh()
+  void testSetupInterpolator3D(void);
+
+}; // class TestOutputSolnPoints
+
+#endif // pylith_meshio_testoutputsolnpoints_hh
+
+// End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestVertexFilterVecNorm.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestVertexFilterVecNorm.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestVertexFilterVecNorm.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -54,7 +54,7 @@
   const std::string label = "field data";
   const topology::FieldBase::VectorFieldEnum fieldType = 
     topology::FieldBase::VECTOR;
-  const double fieldValues[] = {
+  const PylithScalar fieldValues[] = {
     1.1, 1.2,
     2.1, 2.2,
     3.1, 3.2,
@@ -63,7 +63,7 @@
   const topology::FieldBase::VectorFieldEnum fieldTypeE = 
     topology::FieldBase::SCALAR;
   const int fiberDimE = 1;
-  const double fieldValuesE[] = {
+  const PylithScalar fieldValuesE[] = {
     sqrt(pow(1.1, 2) + pow(1.2, 2)),
     sqrt(pow(2.1, 2) + pow(2.2, 2)),
     sqrt(pow(3.1, 2) + pow(3.2, 2)),
@@ -96,7 +96,7 @@
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != verticesEnd;
        ++v_iter, ++ipt) {
-    const double* values = &fieldValues[ipt*fiberDim];
+    const PylithScalar* values = &fieldValues[ipt*fiberDim];
     section->updatePoint(*v_iter, values);
   } // for
 
@@ -113,9 +113,9 @@
        v_iter != verticesEnd;
        ++v_iter, ++ipt) {
     CPPUNIT_ASSERT_EQUAL(fiberDimE, sectionF->getFiberDimension(*v_iter));
-    const double* values = sectionF->restrictPoint(*v_iter);
+    const PylithScalar* values = sectionF->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != values);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int i=0; i < fiberDimE; ++i)
       CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
 				   values[i]/fieldValuesE[ipt*fiberDimE+i],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -61,7 +61,7 @@
   char* vertexFilename; ///< Name of file for vertex fields.
   char* cellFilename; ///< Name of file for cell fields.
 
-  double time; ///< Time for fields.
+  PylithScalar time; ///< Time for fields.
   char* timeFormat; ///< Format for time stamp.
 
   char* cellsLabel; ///< Name of label for mesh cells (if using subset or boundary).
@@ -72,7 +72,7 @@
   int numVertexFields; ///< Number of vertex fields.
   int numVertices; ///< Number of vertices.
   FieldStruct* vertexFieldsInfo; ///< Array of vertex field information.
-  double* vertexFields[3]; ///< Array of vertex field values.
+  PylithScalar* vertexFields[3]; ///< Array of vertex field values.
   //@}
 
   /// @name Cell field information.
@@ -80,7 +80,7 @@
   int numCellFields; ///< Number of cell fields.
   int numCells; ///< Number of vertices.
   FieldStruct* cellFieldsInfo; ///< Array of cell fields information.
-  double* cellFields[3]; /// Array of cell field values.
+  PylithScalar* cellFields[3]; /// Array of cell field values.
   //@}
 
 }; // DataWriterData

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellFilename = 
   "hex8_bc_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataBCMeshHex8::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +63,10 @@
   7.8, 8.9, 9.0,
   10.2, 11.3, 12.4,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -86,14 +86,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3
 };
@@ -116,17 +116,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshHex8::~DataWriterHDF5DataBCMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataBCMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellFilename = 
   "quad4_bc_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -49,15 +49,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -72,14 +72,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -100,17 +100,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshQuad4::~DataWriterHDF5DataBCMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -56,9 +56,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +67,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataBCMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellFilename = 
   "tet4_bc_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTet4::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -61,10 +61,10 @@
   13.3, 14.4, 15.5,
   16.6, 17.7, 18.8,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -82,14 +82,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -112,17 +112,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshTet4::~DataWriterHDF5DataBCMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataBCMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellFilename = 
   "tri3_bc_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataBCMeshTri3::_timeFormat = 
   "%3.1f";
@@ -53,14 +53,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -74,13 +74,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataBCMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -102,17 +102,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataBCMeshTri3::~DataWriterHDF5DataBCMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataBCMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataBCMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellFilename = 
   "hex8_fault_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_timeFormat = 
   "%3.1f";
@@ -50,16 +50,16 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField0[] = {
   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 double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -75,13 +75,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -102,17 +102,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshHex8::~DataWriterHDF5DataFaultMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellFilename = 
   "quad4_fault_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -50,14 +50,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -71,13 +71,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -98,17 +98,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshQuad4::~DataWriterHDF5DataFaultMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellFilename = 
   "tet4_fault_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_timeFormat = 
   "%3.1f";
@@ -50,15 +50,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,13 +73,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -100,17 +100,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTet4::~DataWriterHDF5DataFaultMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellFilename = 
   "tri3_fault_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_timeFormat = 
   "%3.1f";
@@ -50,14 +50,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -71,13 +71,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataFaultMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -98,17 +98,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataFaultMeshTri3::~DataWriterHDF5DataFaultMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataFaultMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataFaultMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellFilename = 
   "hex8_mat_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMatMeshHex8::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -76,12 +76,12 @@
   31.1, 32.2, 33.3,
   34.4, 35.5, 36.6
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -113,13 +113,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -142,17 +142,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshHex8::~DataWriterHDF5DataMatMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMatMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellFilename = 
   "line2_mat_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMatMeshLine2::_timeFormat = 
   "%3.1f";
@@ -54,13 +54,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField0[] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_vertexField2[] = {
   1.2, 2.3, 
   3.4, 4.5,
   5.6, 6.7,
@@ -77,13 +77,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 1 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField0[] = {
   1.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshLine2::_cellField2[] = {
   1.2,
 };
 
@@ -106,17 +106,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshLine2::~DataWriterHDF5DataMatMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMatMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellFilename = 
   "quad4_mat_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -58,10 +58,10 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -79,13 +79,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -106,17 +106,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshQuad4::~DataWriterHDF5DataMatMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMatMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellFilename = 
   "tet4_mat_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTet4::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -67,10 +67,10 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField1[] = {
+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 double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -93,14 +93,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -124,17 +124,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshTet4::~DataWriterHDF5DataMatMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMatMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellFilename = 
   "tri3_mat_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMatMeshTri3::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -64,10 +64,10 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -87,13 +87,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMatMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -116,17 +116,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMatMeshTri3::~DataWriterHDF5DataMatMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMatMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMatMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshHex8::_cellFilename = 
   "hex8_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMeshHex8::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -72,12 +72,12 @@
   31.8, 32.9, 33.1,
   34.8, 35.9, 36.1,
 };
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -109,15 +109,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField1[] = {
   2.1, 3.2, 4.3
 };
-const double pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshHex8::_cellField2[] = {
   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
@@ -140,17 +140,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshHex8::~DataWriterHDF5DataMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshLine2::_cellFilename = 
   "line2_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMeshLine2::_timeFormat = 
   "%3.1f";
@@ -50,13 +50,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField0[] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,13 +73,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 1 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField0[] = {
   1.1, 2.2, 3.3
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField1[] = {
   2.1, 2.2, 2.3
 };
-const double pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshLine2::_cellField2[] = {
   1.2, 2.3, 3.4
 };
 
@@ -100,17 +100,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshLine2::~DataWriterHDF5DataMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,7 +32,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellFilename = 
   "quad4_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -46,7 +46,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -54,10 +54,10 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -75,14 +75,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField1[] = {
   2.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -102,17 +102,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshQuad4::~DataWriterHDF5DataMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -55,9 +55,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -66,9 +66,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshTet4::_cellFilename = 
   "tet4_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMeshTet4::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +63,10 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField1[] = {
+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 double pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -89,15 +89,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField1[] = {
   2.1, 3.2, 4.3
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTet4::_cellField2[] = {
   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
@@ -120,17 +120,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshTet4::~DataWriterHDF5DataMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterHDF5DataMeshTri3::_cellFilename = 
   "tri3_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataMeshTri3::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -59,10 +59,10 @@
   11.1, 12.2,
   13.3, 14.4
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -81,15 +81,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField1[] = {
   2.1, 2.2, 2.3
 };
-const double pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
   7.8, 8.9, 9.0
@@ -112,17 +112,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataMeshTri3::~DataWriterHDF5DataMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellFilename = 
   "hex8_surf_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataSubMeshHex8::_timeFormat = 
   "%3.1f";
@@ -52,7 +52,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -66,10 +66,10 @@
   7.9, 8.1, 9.2,
   10.3, 11.4, 12.5,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -93,14 +93,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3
 };
@@ -123,17 +123,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshHex8::~DataWriterHDF5DataSubMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataSubMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellFilename = 
   "line2_surf_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataSubMeshLine2::_timeFormat = 
   "%3.1f";
@@ -53,17 +53,17 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField0[] = {
+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 double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -80,13 +80,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshLine2::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -108,17 +108,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshLine2::~DataWriterHDF5DataSubMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataSubMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellFilename = 
   "quad4_surf_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -49,7 +49,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -57,10 +57,10 @@
   9.9, 10.0,
   11.1, 12.2,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -78,14 +78,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -106,17 +106,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshQuad4::~DataWriterHDF5DataSubMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -56,9 +56,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +67,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataSubMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellFilename = 
   "tet4_surf_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTet4::_timeFormat = 
   "%3.1f";
@@ -52,17 +52,17 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField0[] = {
   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 double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -79,14 +79,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -109,17 +109,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshTet4::~DataWriterHDF5DataSubMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataSubMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellFilename = 
   "tri3_surf_cell.h5";
 
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterHDF5DataSubMeshTri3::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -63,10 +63,10 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -86,13 +86,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterHDF5DataSubMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -114,17 +114,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterHDF5DataSubMeshTri3::~DataWriterHDF5DataSubMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterHDF5DataSubMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of HDF5 file for vertex fields.
   static const char* _cellFilename; ///< Name of HDF5 file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterHDF5DataSubMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellFilename = 
   "hex8_bc_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataBCMeshHex8::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +63,10 @@
   7.8, 8.9, 9.0,
   10.2, 11.3, 12.4,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -86,14 +86,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3
 };
@@ -116,17 +116,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshHex8::~DataWriterVTKDataBCMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataBCMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellFilename = 
   "quad4_bc_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataBCMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -49,15 +49,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -72,14 +72,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -100,17 +100,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshQuad4::~DataWriterVTKDataBCMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -56,9 +56,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +67,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataBCMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellFilename = 
   "tet4_bc_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataBCMeshTet4::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -61,10 +61,10 @@
   13.3, 14.4, 15.5,
   16.6, 17.7, 18.8,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -82,14 +82,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -112,17 +112,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshTet4::~DataWriterVTKDataBCMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataBCMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellFilename = 
   "tri3_bc_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataBCMeshTri3::_timeFormat = 
   "%3.1f";
@@ -53,14 +53,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -74,13 +74,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataBCMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -102,17 +102,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataBCMeshTri3::~DataWriterVTKDataBCMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataBCMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataBCMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellFilename = 
   "hex8_fault_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataFaultMeshHex8::_timeFormat = 
   "%3.1f";
@@ -50,16 +50,16 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField0[] = {
   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 double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -75,13 +75,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -102,17 +102,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshHex8::~DataWriterVTKDataFaultMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataFaultMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellFilename = 
   "quad4_fault_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -50,14 +50,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -71,13 +71,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -98,17 +98,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshQuad4::~DataWriterVTKDataFaultMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataFaultMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellFilename = 
   "tet4_fault_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTet4::_timeFormat = 
   "%3.1f";
@@ -50,15 +50,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,13 +73,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -100,17 +100,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshTet4::~DataWriterVTKDataFaultMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataFaultMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellFilename = 
   "tri3_fault_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataFaultMeshTri3::_timeFormat = 
   "%3.1f";
@@ -50,14 +50,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
 };
@@ -71,13 +71,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataFaultMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -98,17 +98,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataFaultMeshTri3::~DataWriterVTKDataFaultMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataFaultMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataFaultMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellFilename = 
   "hex8_mat_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMatMeshHex8::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -76,12 +76,12 @@
   31.1, 32.2, 33.3,
   34.4, 35.5, 36.6
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -113,13 +113,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
 };
 
@@ -142,17 +142,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshHex8::~DataWriterVTKDataMatMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMatMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellFilename = 
   "line2_mat_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMatMeshLine2::_timeFormat = 
   "%3.1f";
@@ -54,13 +54,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField0[] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_vertexField2[] = {
   1.2, 2.3, 
   3.4, 4.5,
   5.6, 6.7,
@@ -77,13 +77,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 1 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField0[] = {
   1.1,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshLine2::_cellField2[] = {
   1.2,
 };
 
@@ -106,17 +106,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshLine2::~DataWriterVTKDataMatMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMatMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellFilename = 
   "quad4_mat_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMatMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -58,10 +58,10 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -79,13 +79,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -106,17 +106,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshQuad4::~DataWriterVTKDataMatMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMatMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellFilename = 
   "tet4_mat_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMatMeshTet4::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -67,10 +67,10 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField1[] = {
+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 double pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -93,14 +93,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -124,17 +124,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshTet4::~DataWriterVTKDataMatMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMatMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 const char* pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellFilename = 
   "tri3_mat_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMatMeshTri3::_timeFormat = 
   "%3.1f";
@@ -54,7 +54,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -64,10 +64,10 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -87,13 +87,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMatMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -116,17 +116,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMatMeshTri3::~DataWriterVTKDataMatMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMatMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -50,7 +50,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -59,9 +59,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -70,9 +70,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMatMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataMeshHex8::_cellFilename = 
   "hex8_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMeshHex8::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -72,12 +72,12 @@
   31.8, 32.9, 33.1,
   34.8, 35.9, 36.1,
 };
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -109,15 +109,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField1[] = {
   2.1, 3.2, 4.3
 };
-const double pylith::meshio::DataWriterVTKDataMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshHex8::_cellField2[] = {
   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
@@ -140,17 +140,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshHex8::~DataWriterVTKDataMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataMeshLine2::_cellFilename = 
   "line2_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMeshLine2::_timeFormat = 
   "%3.1f";
@@ -50,13 +50,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField0[] = {
   1.1, 2.2, 3.3, 4.4, 5.5
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -73,13 +73,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 1 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField0[] = {
   1.1, 2.2, 3.3
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField1[] = {
   2.1, 2.2, 2.3
 };
-const double pylith::meshio::DataWriterVTKDataMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshLine2::_cellField2[] = {
   1.2, 2.3, 3.4
 };
 
@@ -100,17 +100,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshLine2::~DataWriterVTKDataMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -32,7 +32,7 @@
 const char* pylith::meshio::DataWriterVTKDataMeshQuad4::_cellFilename = 
   "quad4_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -46,7 +46,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -54,10 +54,10 @@
   9.9, 10.1,
   11.2, 12.3,
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -75,14 +75,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField1[] = {
   2.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -102,17 +102,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshQuad4::~DataWriterVTKDataMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -46,7 +46,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -55,9 +55,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -66,9 +66,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataMeshTet4::_cellFilename = 
   "tet4_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMeshTet4::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -63,10 +63,10 @@
   28.8, 29.9, 30.0,
   31.1, 32.2, 33.3,
 };
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField1[] = {
+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 double pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -89,15 +89,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9
 };
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField1[] = {
   2.1, 3.2, 4.3
 };
-const double pylith::meshio::DataWriterVTKDataMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTet4::_cellField2[] = {
   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
@@ -120,17 +120,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshTet4::~DataWriterVTKDataMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -36,7 +36,7 @@
 const char* pylith::meshio::DataWriterVTKDataMeshTri3::_cellFilename = 
   "tri3_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataMeshTri3::_timeFormat = 
   "%3.1f";
@@ -50,7 +50,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -59,10 +59,10 @@
   11.1, 12.2,
   13.3, 14.4
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -81,15 +81,15 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField1[] = {
   2.1, 2.2, 2.3
 };
-const double pylith::meshio::DataWriterVTKDataMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
   7.8, 8.9, 9.0
@@ -112,17 +112,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataMeshTri3::~DataWriterVTKDataMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -57,9 +57,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -68,9 +68,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellFilename = 
   "hex8_surf_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataSubMeshHex8::_timeFormat = 
   "%3.1f";
@@ -52,7 +52,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
   7.7, 8.8, 9.9,
@@ -66,10 +66,10 @@
   7.9, 8.1, 9.2,
   10.3, 11.4, 12.5,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField1[] = {
+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 double pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -93,14 +93,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshHex8::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3
 };
@@ -123,17 +123,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshHex8::~DataWriterVTKDataSubMeshHex8(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshHex8.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataSubMeshHex8

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellFilename = 
   "line2_surf_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataSubMeshLine2::_timeFormat = 
   "%3.1f";
@@ -53,17 +53,17 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField0[] = {
+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 double pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -80,13 +80,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshLine2::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -108,17 +108,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshLine2::~DataWriterVTKDataSubMeshLine2(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshLine2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataSubMeshLine2

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -35,7 +35,7 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellFilename = 
   "quad4_surf_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataSubMeshQuad4::_timeFormat = 
   "%3.1f";
@@ -49,7 +49,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -57,10 +57,10 @@
   9.9, 10.0,
   11.1, 12.2,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -78,14 +78,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField0[] = {
   1.1, 2.2,
   3.3, 4.4,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField1[] = {
   2.1, 3.2,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshQuad4::_cellField2[] = {
   1.2, 2.3, 3.4,
   4.5, 5.6, 6.7,
 };
@@ -106,17 +106,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshQuad4::~DataWriterVTKDataSubMeshQuad4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshQuad4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -47,7 +47,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -56,9 +56,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -67,9 +67,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataSubMeshQuad4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -38,7 +38,7 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellFilename = 
   "tet4_surf_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataSubMeshTet4::_timeFormat = 
   "%3.1f";
@@ -52,17 +52,17 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField0[] = {
   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 double pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -79,14 +79,14 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 6 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField0[] = {
   1.1, 2.2, 3.3,
   4.4, 5.5, 6.6,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField1[] = {
   2.1, 3.2
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTet4::_cellField2[] = {
   1.2, 2.3, 3.4, 4.5, 5.6, 6.7,
   7.8, 8.9, 9.0, 10.1, 11.2, 12.3,
 };
@@ -109,17 +109,17 @@
   assert(3 == numVertexFields);
   numVertices = _numVertices;
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   assert(3 == numCellFields);
   numCells = _numCells;
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshTet4::~DataWriterVTKDataSubMeshTet4(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTet4.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataSubMeshTet4

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 const char* pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellFilename = 
   "tri3_surf_cell.vtk";
 
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_time = 1.0;
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_time = 1.0;
 
 const char* pylith::meshio::DataWriterVTKDataSubMeshTri3::_timeFormat = 
   "%3.1f";
@@ -53,7 +53,7 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::OTHER, 2 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField0[] = {
   1.1, 2.2,
   3.3, 4.4,
   5.5, 6.6,
@@ -63,10 +63,10 @@
   13.3, 14.4,
   15.5, 16.6,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField1[] = {
   2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_vertexField2[] = {
   1.2, 2.3,
   3.4, 4.5,
   5.6, 6.7,
@@ -86,13 +86,13 @@
   { "pressure", topology::FieldBase::SCALAR, 1 },
   { "other", topology::FieldBase::TENSOR, 3 },
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField0[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField0[] = {
   1.1, 2.2,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField1[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField1[] = {
   2.1,
 };
-const double pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField2[] = {
+const PylithScalar pylith::meshio::DataWriterVTKDataSubMeshTri3::_cellField2[] = {
   1.2, 2.3, 3.4,
 };
 
@@ -114,17 +114,17 @@
   numVertices = _numVertices;
   assert(3 == numVertexFields);
   vertexFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_vertexFields);
-  vertexFields[0] = const_cast<double*>(_vertexField0);
-  vertexFields[1] = const_cast<double*>(_vertexField1);
-  vertexFields[2] = const_cast<double*>(_vertexField2);
+  vertexFields[0] = const_cast<PylithScalar*>(_vertexField0);
+  vertexFields[1] = const_cast<PylithScalar*>(_vertexField1);
+  vertexFields[2] = const_cast<PylithScalar*>(_vertexField2);
 
   numCellFields = _numCellFields;
   numCells = _numCells;
   assert(3 == numCellFields);
   cellFieldsInfo = const_cast<DataWriterData::FieldStruct*>(_cellFields);
-  cellFields[0] = const_cast<double*>(_cellField0);
-  cellFields[1] = const_cast<double*>(_cellField1);
-  cellFields[2] = const_cast<double*>(_cellField2);
+  cellFields[0] = const_cast<PylithScalar*>(_cellField0);
+  cellFields[1] = const_cast<PylithScalar*>(_cellField1);
+  cellFields[2] = const_cast<PylithScalar*>(_cellField2);
 } // constructor
 
 pylith::meshio::DataWriterVTKDataSubMeshTri3::~DataWriterVTKDataSubMeshTri3(void)

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/DataWriterVTKDataSubMeshTri3.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -49,7 +49,7 @@
   static const char* _vertexFilename; ///< Name of VTK file for vertex fields.
   static const char* _cellFilename; ///< Name of VTK file for cell fields.
 
-  static const double _time; ///< Time for fields.
+  static const PylithScalar _time; ///< Time for fields.
   static const char* _timeFormat; ///< Format for time stamp.
 
   /// @name Vertex field information.
@@ -58,9 +58,9 @@
   static const int _numVertices; ///< Number of vertices.
   static const FieldStruct _vertexFields[]; ///< Array of vertex fields.
 
-  static const double _vertexField0[]; ///< Values for vertex field 0.
-  static const double _vertexField1[]; ///< Values for vertex field 1.
-  static const double _vertexField2[]; ///< Values for vertex field 2.
+  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.
   //@}
 
   /// @name Cell field information.
@@ -69,9 +69,9 @@
   static const int _numCells; ///< Number of cells.
   static const FieldStruct _cellFields[]; ///< Array of cell fields.
 
-  static const double _cellField0[]; ///< Values for cell field 0.
-  static const double _cellField1[]; ///< Values for cell field 1.
-  static const double _cellField2[]; ///< Values for cell field 2.
+  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.
   //@}
 
 }; // DataWriterVTKDataSubMeshTri3

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_meshio_meshdata_hh)
 #define pylith_meshio_meshdata_hh
 
+#include "pylith/utils/types.hh" // USES PylithScalar
+
 namespace pylith {
   namespace meshio {
      class MeshData;
@@ -46,7 +48,7 @@
   int cellDim; ///< Number of dimensions associated with cell
   int numCorners; ///< Number of vertices in cell
 
-  double* vertices; ///< Pointer to coordinates of vertices
+  PylithScalar* vertices; ///< Pointer to coordinates of vertices
   int* cells; ///< Pointer to indices of vertices in cells
   int* materialIds; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData1D::_numCorners = 2;
 
-const double pylith::meshio::MeshData1D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData1D::_vertices[] = {
   -1.2,
    2.1,
    0.3
@@ -71,7 +71,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData1Din2D::_numCorners = 2;
 
-const double pylith::meshio::MeshData1Din2D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData1Din2D::_vertices[] = {
   -3.0, -1.2,
    1.0, -1.0,
    2.6,  3.1,
@@ -71,7 +71,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData1Din3D::_numCorners = 2;
 
-const double pylith::meshio::MeshData1Din3D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData1Din3D::_vertices[] = {
   -3.0, -1.2,  0.3,
    1.0, -1.0,  0.0,
    2.6,  3.1, -0.5,
@@ -71,7 +71,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData1Din3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData2D::_numCorners = 4;
 
-const double pylith::meshio::MeshData2D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData2D::_vertices[] = {
   -1.0,  3.0,
    1.0,  3.3,
   -1.2,  0.9,
@@ -77,7 +77,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData2Din3D::_numCorners = 4;
 
-const double pylith::meshio::MeshData2Din3D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData2Din3D::_vertices[] = {
   -1.0,  3.0,  0.2,
    1.0,  3.3,  0.5,
   -1.2,  0.9,  0.3,
@@ -75,7 +75,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData2Din3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData3D::_numCorners = 8;
 
-const double pylith::meshio::MeshData3D::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData3D::_vertices[] = {
   -3.0, -1.0,  0.2,
   -3.0, -1.0,  1.3,
   -1.0, -1.2,  0.1,
@@ -81,7 +81,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3D.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshData3DIndexOne::_numCorners = 8;
 
-const double pylith::meshio::MeshData3DIndexOne::_vertices[] = {
+const PylithScalar pylith::meshio::MeshData3DIndexOne::_vertices[] = {
   -3.0, -1.0,  0.2,
   -3.0, -1.0,  1.3,
   -1.0, -1.2,  0.1,
@@ -81,7 +81,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshData3DIndexOne.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshDataCubitHex::_numCorners = 8;
 
-const double pylith::meshio::MeshDataCubitHex::_vertices[] = {
+const PylithScalar pylith::meshio::MeshDataCubitHex::_vertices[] = {
   -2.0, -1.0,  1.0,
   -2.0, -1.0, -1.0,
   -2.0,  1.0, -1.0,
@@ -79,7 +79,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitHex.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshDataCubitQuad::_numCorners = 4;
 
-const double pylith::meshio::MeshDataCubitQuad::_vertices[] = {
+const PylithScalar pylith::meshio::MeshDataCubitQuad::_vertices[] = {
    0.0,  0.0,
    1.0,  0.0,
    1.0,  1.0,
@@ -72,7 +72,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitQuad.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshDataCubitTet::_numCorners = 4;
 
-const double pylith::meshio::MeshDataCubitTet::_vertices[] = {
+const PylithScalar pylith::meshio::MeshDataCubitTet::_vertices[] = {
   -2.0,  0.0,  0.0,
    0.0, -1.0,  0.0,
    0.0,  1.0,  0.0,
@@ -72,7 +72,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTet.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshDataCubitTri::_numCorners = 3;
 
-const double pylith::meshio::MeshDataCubitTri::_vertices[] = {
+const PylithScalar pylith::meshio::MeshDataCubitTri::_vertices[] = {
   -1.0,  0.0,
    0.0, -1.0,
    0.0,  1.0,
@@ -70,7 +70,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataCubitTri.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -28,7 +28,7 @@
 
 const int pylith::meshio::MeshDataLagritTet::_numCorners = 4;
 
-const double pylith::meshio::MeshDataLagritTet::_vertices[] = {
+const PylithScalar pylith::meshio::MeshDataLagritTet::_vertices[] = {
   0.00000E+000,  -5.00000E-001,  -5.00000E-001,
   0.00000E+000,  -5.00000E-001,   5.00000E-001,
   1.00000E+000,  -5.00000E-001,  -5.00000E-001,
@@ -93,7 +93,7 @@
   numCells = _numCells;
   cellDim = _cellDim;
   numCorners = _numCorners;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   materialIds = const_cast<int*>(_materialIds);
   groups = const_cast<int*>(_groups);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/data/MeshDataLagritTet.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -48,7 +48,7 @@
   static const int _cellDim; ///< Number of dimensions associated with cell
   static const int _numCorners; ///< Number of vertices in cell
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/Mesh.hh" // USES Mesh
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/geocoords/CSCart.hh" // USES CSCart
 
@@ -39,7 +39,7 @@
       const int ncells = 1;
       const int ncorners = 4;
       const int cells[] = { 0, 1, 2, 3 };
-      const double coordinates[] = {
+      const PylithScalar coordinates[] = {
 	0.0, 0.0,
 	1.0, 0.0,
 	0.0, 1.0,
@@ -346,8 +346,8 @@
 	 ++v_iter, index += nconstraints[i++])
       section->setConstraintDof(*v_iter, &constraints[index]);
     fieldSrc.zero();
-    fieldSrc.createScatter();
-    fieldSrc.createScatter("A");
+    fieldSrc.createScatter(mesh);
+    fieldSrc.createScatter(mesh, "A");
   } // Setup source field
 
   Field<Mesh> field(mesh);
@@ -388,7 +388,7 @@
   
   field.clear();
 
-  CPPUNIT_ASSERT_EQUAL(1.0, field._metadata.scale);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), field._metadata.scale);
   CPPUNIT_ASSERT_EQUAL(Field<Mesh>::OTHER, field._metadata.vectorFieldType);
   CPPUNIT_ASSERT_EQUAL(false, field._metadata.dimsOkay);
 } // testClear
@@ -399,8 +399,8 @@
 pylith::topology::TestFieldMesh::testAllocate(void)
 { // testAllocate
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -421,7 +421,7 @@
   const ALE::Obj<Mesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -431,7 +431,7 @@
     section->updatePoint(*v_iter, &values[0]);
   } // for
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -449,8 +449,8 @@
 pylith::topology::TestFieldMesh::testZero(void)
 { // testZero
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -471,7 +471,7 @@
   const ALE::Obj<Mesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -483,7 +483,7 @@
 
   field.zero();
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -500,8 +500,8 @@
 pylith::topology::TestFieldMesh::testZeroAll(void)
 { // testZeroAll
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -542,7 +542,7 @@
     section->setConstraintDof(*v_iter, &constraints[index]);
   field.zero();
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -554,7 +554,7 @@
   
   field.zeroAll();
   
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -571,8 +571,8 @@
 pylith::topology::TestFieldMesh::testComplete(void)
 { // testComplete
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -593,7 +593,7 @@
   const ALE::Obj<Mesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -607,7 +607,7 @@
 
   // Expect no change for this serial test
   i = 0;
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -624,8 +624,8 @@
 pylith::topology::TestFieldMesh::testCopy(void)
 { // testCopy
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -647,7 +647,7 @@
     const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
     CPPUNIT_ASSERT(!section.isNull());
     
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -667,8 +667,8 @@
   field.copy(fieldSrc);
 
   int i = 0;
-  double_array values(fiberDim);
-  const double tolerance = 1.0e-6;
+  scalar_array values(fiberDim);
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -685,14 +685,14 @@
 pylith::topology::TestFieldMesh::testOperatorAdd(void)
 { // testOperateAdd
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesA[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesA[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
     1.4, 2.5, 3.6,
   };
-  const double valuesB[] = {
+  const PylithScalar valuesB[] = {
     10.1, 20.2, 30.3,
     10.2, 20.3, 30.4,
     10.3, 20.4, 30.5,
@@ -714,7 +714,7 @@
     const ALE::Obj<Mesh::RealSection>& section = fieldSrc.section();
     CPPUNIT_ASSERT(!section.isNull());
     
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -732,7 +732,7 @@
   CPPUNIT_ASSERT(!section.isNull());
   { // Setup destination field
 
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -746,14 +746,14 @@
   field += fieldSrc;
 
   int i = 0;
-  double_array values(fiberDim);
-  const double tolerance = 1.0e-6;
+  scalar_array values(fiberDim);
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
     section->restrictPoint(*v_iter, &values[0], values.size());
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double valueE = valuesA[i] + valuesB[i];
+      const PylithScalar valueE = valuesA[i] + valuesB[i];
       ++i;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[iDim], tolerance);
     } // for
@@ -766,8 +766,8 @@
 pylith::topology::TestFieldMesh::testDimensionalize(void)
 { // testDimensionalize
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -787,7 +787,7 @@
     sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -802,13 +802,13 @@
   field.dimensionalize();
 
   i = 0;
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
     section->restrictPoint(*v_iter, &values[0], values.size());
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double valueE = valuesNondim[i++]*scale;
+      const PylithScalar valueE = valuesNondim[i++]*scale;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[iDim], tolerance);
     } // for
   } // for
@@ -821,8 +821,8 @@
 pylith::topology::TestFieldMesh::testView(void)
 { // testView
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -842,7 +842,7 @@
     sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -878,7 +878,7 @@
   const int sizeE = vertices->size() * fiberDim;
 
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatter();
+  field.createScatter(mesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<Mesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -895,11 +895,11 @@
   CPPUNIT_ASSERT_EQUAL(label, std::string(vecname));
 
   // Make sure we can do multiple calls to createScatter().
-  field.createScatter();
+  field.createScatter(mesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
 
   // Create another scatter.
-  field.createScatter("B");
+  field.createScatter(mesh, "B");
   CPPUNIT_ASSERT_EQUAL(size_t(2), field._scatters.size());
   const Field<Mesh>::ScatterInfo& sinfoB = field._getScatter("B");
   CPPUNIT_ASSERT(sinfoB.scatter);
@@ -945,7 +945,7 @@
   const int sizeE = vertices->size() * fiberDim;
 
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatterWithBC();
+  field.createScatterWithBC(mesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<Mesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -962,11 +962,11 @@
   CPPUNIT_ASSERT_EQUAL(label, std::string(vecname));
 
   // Make sure we can do multiple calls to createScatterWithBC().
-  field.createScatterWithBC();
+  field.createScatterWithBC(mesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
 
   // Create another scatter.
-  field.createScatterWithBC("B");
+  field.createScatterWithBC(mesh, "B");
   CPPUNIT_ASSERT_EQUAL(size_t(2), field._scatters.size());
   const Field<Mesh>::ScatterInfo& sinfoB = field._getScatter("B");
   CPPUNIT_ASSERT(sinfoB.scatter);
@@ -1003,7 +1003,7 @@
   field.allocate();
   
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatter();
+  field.createScatter(mesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<Mesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -1031,7 +1031,7 @@
 { // testScatterSectionToVector
   const char* context = "abc";
   const int fiberDim = 3;
-  const double valuesE[] = {
+  const PylithScalar valuesE[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -1051,7 +1051,7 @@
     sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -1061,16 +1061,16 @@
     section->updatePoint(*v_iter, &values[0]);
   } // for
 
-  field.createScatter(context);
+  field.createScatter(mesh, context);
   field.scatterSectionToVector(context);
   const PetscVec vec = field.vector(context);
   CPPUNIT_ASSERT(0 != vec);
   int size = 0;
   VecGetSize(vec, &size);
-  double* valuesVec = 0;
+  PylithScalar* valuesVec = 0;
   VecGetArray(vec, &valuesVec);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int sizeE = vertices->size() * fiberDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
   for (int i=0; i < sizeE; ++i)
@@ -1085,7 +1085,7 @@
 { // testScatterVectorToSection
   const char* context = "abcd";
   const int fiberDim = 3;
-  const double valuesE[] = {
+  const PylithScalar valuesE[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -1102,25 +1102,25 @@
   const ALE::Obj<Mesh::SieveMesh::label_sequence>& vertices = 
     sieveMesh->depthStratum(0);
 
-  field.createScatter(context);
+  field.createScatter(mesh, context);
   const PetscVec vec = field.vector(context);
   CPPUNIT_ASSERT(0 != vec);
   int size = 0;
   VecGetSize(vec, &size);
-  double* valuesVec = 0;
+  PylithScalar* valuesVec = 0;
   VecGetArray(vec, &valuesVec);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int sizeE = vertices->size() * fiberDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
   for (int i=0; i < sizeE; ++i)
     valuesVec[i] = valuesE[i];
   VecRestoreArray(vec, &valuesVec);
 
-  field.createScatter(context);
+  field.createScatter(mesh, context);
   field.scatterVectorToSection(context);
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (Mesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -1330,7 +1330,7 @@
   const int nvertices = _TestFieldMesh::nvertices;
   const int ncorners = _TestFieldMesh::ncorners;
   const int spaceDim = _TestFieldMesh::cellDim;
-  const double* coordinates = _TestFieldMesh::coordinates;
+  const PylithScalar* coordinates = _TestFieldMesh::coordinates;
   const bool interpolate = false;
   ALE::SieveBuilder<SieveFlexMesh>::buildTopology(s, cellDim, ncells, (int*) cells,
 					      nvertices, interpolate, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldSubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldSubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldSubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 #include "pylith/topology/Field.hh" // USES Field
 #include "pylith/topology/SubMesh.hh" // USES SubMesh
 
-#include "pylith/utils/array.hh" // USES double_array
+#include "pylith/utils/array.hh" // USES scalar_array
 
 #include "spatialdata/geocoords/CSCart.hh" // USES CSCart
 
@@ -45,7 +45,7 @@
 	0, 1, 3,
 	0, 3, 2,
       };
-      const double coordinates[] = {
+      const PylithScalar coordinates[] = {
 	0.0, 0.0,
 	1.0, 0.0,
 	0.0, 1.0,
@@ -296,7 +296,7 @@
   
   field.clear();
 
-  CPPUNIT_ASSERT_EQUAL(1.0, field._metadata.scale);
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), field._metadata.scale);
   CPPUNIT_ASSERT_EQUAL(Field<SubMesh>::OTHER, field._metadata.vectorFieldType);
   CPPUNIT_ASSERT_EQUAL(false, field._metadata.dimsOkay);
 } // testClear
@@ -307,8 +307,8 @@
 pylith::topology::TestFieldSubMesh::testAllocate(void)
 { // testAllocate
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -329,7 +329,7 @@
   const ALE::Obj<SubMesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -339,7 +339,7 @@
     section->updatePoint(*v_iter, &values[0]);
   } // for
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -357,8 +357,8 @@
 pylith::topology::TestFieldSubMesh::testZero(void)
 { // testZero
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -379,7 +379,7 @@
   const ALE::Obj<SubMesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -391,7 +391,7 @@
 
   field.zero();
 
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -408,8 +408,8 @@
 pylith::topology::TestFieldSubMesh::testComplete(void)
 { // testComplete
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -430,7 +430,7 @@
   const ALE::Obj<SubMesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -444,7 +444,7 @@
 
   // Expect no change for this serial test
   i = 0;
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -461,8 +461,8 @@
 pylith::topology::TestFieldSubMesh::testCopy(void)
 { // testCopy
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -484,7 +484,7 @@
     const ALE::Obj<SubMesh::RealSection>& section = fieldSrc.section();
     CPPUNIT_ASSERT(!section.isNull());
     
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -504,8 +504,8 @@
   field.copy(fieldSrc);
 
   int i = 0;
-  double_array values(fiberDim);
-  const double tolerance = 1.0e-6;
+  scalar_array values(fiberDim);
+  const PylithScalar tolerance = 1.0e-6;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
@@ -522,13 +522,13 @@
 pylith::topology::TestFieldSubMesh::testOperatorAdd(void)
 { // testOperateAdd
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesA[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesA[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
   };
-  const double valuesB[] = {
+  const PylithScalar valuesB[] = {
     10.1, 20.2, 30.3,
     10.2, 20.3, 30.4,
     10.3, 20.4, 30.5,
@@ -550,7 +550,7 @@
     const ALE::Obj<SubMesh::RealSection>& section = fieldSrc.section();
     CPPUNIT_ASSERT(!section.isNull());
     
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -568,7 +568,7 @@
   CPPUNIT_ASSERT(!section.isNull());
   { // Setup destination field
 
-    double_array values(fiberDim);
+    scalar_array values(fiberDim);
     int i = 0;
     for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
 	 v_iter != vertices->end();
@@ -582,14 +582,14 @@
   field += fieldSrc;
 
   int i = 0;
-  double_array values(fiberDim);
-  const double tolerance = 1.0e-6;
+  scalar_array values(fiberDim);
+  const PylithScalar tolerance = 1.0e-6;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
     section->restrictPoint(*v_iter, &values[0], values.size());
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double valueE = valuesA[i] + valuesB[i];
+      const PylithScalar valueE = valuesA[i] + valuesB[i];
       ++i;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[iDim], tolerance);
     } // for
@@ -602,8 +602,8 @@
 pylith::topology::TestFieldSubMesh::testDimensionalize(void)
 { // testDimensionalize
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -624,7 +624,7 @@
     sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -639,13 +639,13 @@
   field.dimensionalize();
 
   i = 0;
-  const double tolerance = 1.0e-6;
+  const PylithScalar tolerance = 1.0e-6;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
        ++v_iter) {
     section->restrictPoint(*v_iter, &values[0], values.size());
     for (int iDim=0; iDim < fiberDim; ++iDim) {
-      const double valueE = valuesNondim[i++]*scale;
+      const PylithScalar valueE = valuesNondim[i++]*scale;
       CPPUNIT_ASSERT_DOUBLES_EQUAL(valueE, values[iDim], tolerance);
     } // for
   } // for
@@ -658,8 +658,8 @@
 pylith::topology::TestFieldSubMesh::testView(void)
 { // testView
   const int fiberDim = 3;
-  const double scale = 2.0;
-  const double valuesNondim[] = {
+  const PylithScalar scale = 2.0;
+  const PylithScalar valuesNondim[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -679,7 +679,7 @@
     sieveMesh->depthStratum(0);
   CPPUNIT_ASSERT(!vertices.isNull());
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -714,7 +714,7 @@
   const int sizeE = vertices->size() * fiberDim;
 
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatter();
+  field.createScatter(submesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<SubMesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -726,11 +726,11 @@
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   // Make sure we can do multiple calls to createScatter().
-  field.createScatter();
+  field.createScatter(submesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
 
   // Create another scatter.
-  field.createScatter("B");
+  field.createScatter(submesh, "B");
   CPPUNIT_ASSERT_EQUAL(size_t(2), field._scatters.size());
   const Field<SubMesh>::ScatterInfo& sinfoB = field._getScatter("B");
   CPPUNIT_ASSERT(sinfoB.scatter);
@@ -774,7 +774,7 @@
   const int sizeE = vertices->size() * fiberDim;
 
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatterWithBC();
+  field.createScatterWithBC(submesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<SubMesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -786,11 +786,11 @@
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
   // Make sure we can do multiple calls to createScatterWithBC().
-  field.createScatterWithBC();
+  field.createScatterWithBC(submesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
 
   // Create another scatter.
-  field.createScatterWithBC("B");
+  field.createScatterWithBC(submesh, "B");
   CPPUNIT_ASSERT_EQUAL(size_t(2), field._scatters.size());
   const Field<SubMesh>::ScatterInfo& sinfoB = field._getScatter("B");
   CPPUNIT_ASSERT(sinfoB.scatter);
@@ -828,7 +828,7 @@
   field.allocate();
 
   CPPUNIT_ASSERT_EQUAL(size_t(0), field._scatters.size());
-  field.createScatter();
+  field.createScatter(submesh);
   CPPUNIT_ASSERT_EQUAL(size_t(1), field._scatters.size());
   const Field<SubMesh>::ScatterInfo& sinfo = field._getScatter("");
   CPPUNIT_ASSERT(sinfo.scatter);
@@ -856,7 +856,7 @@
 { // testScatterSectionToVector
   const char* context = "abc";
   const int fiberDim = 3;
-  const double valuesE[] = {
+  const PylithScalar valuesE[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -873,7 +873,7 @@
   const ALE::Obj<SubMesh::SieveMesh::label_sequence>& vertices = 
     sieveMesh->depthStratum(0);
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   for (SubMesh::SieveMesh::label_sequence::iterator v_iter=vertices->begin();
        v_iter != vertices->end();
@@ -883,16 +883,16 @@
     section->updatePoint(*v_iter, &values[0]);
   } // for
 
-  field.createScatter(context);
+  field.createScatter(submesh, context);
   field.scatterSectionToVector(context);
   const PetscVec vec = field.vector(context);
   CPPUNIT_ASSERT(0 != vec);
   int size = 0;
   VecGetSize(vec, &size);
-  double* valuesVec = 0;
+  PylithScalar* valuesVec = 0;
   VecGetArray(vec, &valuesVec);
 
-  const double tolerance = 1.0e-06;
+  const PylithScalar tolerance = 1.0e-06;
   const int sizeE = vertices->size() * fiberDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
   for (int i=0; i < sizeE; ++i)
@@ -907,7 +907,7 @@
 { // testScatterVectorToSection
   const char* context = "abcd";
   const int fiberDim = 3;
-  const double valuesE[] = {
+  const PylithScalar valuesE[] = {
     1.1, 2.2, 3.3,
     1.2, 2.3, 3.4,
     1.3, 2.4, 3.5,
@@ -919,7 +919,7 @@
   Field<SubMesh> field(submesh);
   field.newSection(FieldBase::VERTICES_FIELD, fiberDim);
   field.allocate();
-  field.createScatter(context);
+  field.createScatter(submesh, context);
 
   const ALE::Obj<SubMesh::SieveMesh>& sieveMesh = submesh.sieveMesh();
   CPPUNIT_ASSERT(!sieveMesh.isNull());
@@ -934,8 +934,8 @@
   const int sizeE = vertices->size() * fiberDim;
   CPPUNIT_ASSERT_EQUAL(sizeE, size);
 
-  const double tolerance = 1.0e-06;
-  double* valuesVec = 0;
+  const PylithScalar tolerance = 1.0e-06;
+  PylithScalar* valuesVec = 0;
   VecGetArray(vec, &valuesVec);
   for (int i=0; i < sizeE; ++i)
     valuesVec[i] = valuesE[i];
@@ -943,7 +943,7 @@
 
   field.scatterVectorToSection(context);
 
-  double_array values(fiberDim);
+  scalar_array values(fiberDim);
   int i = 0;
   const ALE::Obj<SubMesh::RealSection>& section = field.section();
   CPPUNIT_ASSERT(!section.isNull());
@@ -982,7 +982,7 @@
   const int nvertices = _TestFieldSubMesh::nvertices;
   const int ncorners = _TestFieldSubMesh::ncorners;
   const int spaceDim = _TestFieldSubMesh::cellDim;
-  const double* coordinates = _TestFieldSubMesh::coordinates;
+  const PylithScalar* coordinates = _TestFieldSubMesh::coordinates;
   const bool interpolate = false;
   ALE::SieveBuilder<SieveFlexMesh>::buildTopology(s, cellDim, ncells, (int*) cells,
 					      nvertices, interpolate, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldsNewMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldsNewMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestFieldsNewMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -228,7 +228,7 @@
   CPPUNIT_ASSERT_EQUAL(std::string("velocity"), std::string(fieldA.label()));
   CPPUNIT_ASSERT_EQUAL(FieldBase::VECTOR,
 		       fieldA.vectorFieldType());
-  CPPUNIT_ASSERT_EQUAL(1.0, fieldA.scale());
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), fieldA.scale());
   CPPUNIT_ASSERT_EQUAL(false, fieldA.addDimensionOkay());
 
   const ALE::Obj<Mesh::RealSection>& sectionA = fieldA.section();
@@ -238,7 +238,7 @@
       ++v_iter) {
     const int fiberDim = sectionA->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(3, fiberDim);
-    const double* values = sectionA->restrictPoint(*v_iter);
+    const PylithScalar* values = sectionA->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(values);
   } // for
 
@@ -249,7 +249,7 @@
 		       std::string(fieldB.label()));
   CPPUNIT_ASSERT_EQUAL(FieldBase::OTHER,
 		       fieldB.vectorFieldType());
-  CPPUNIT_ASSERT_EQUAL(2.0, fieldB.scale());
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(2.0), fieldB.scale());
   CPPUNIT_ASSERT_EQUAL(true, fieldB.addDimensionOkay());
 
   const ALE::Obj<Mesh::RealSection>& sectionB = fieldB.section();
@@ -259,7 +259,7 @@
       ++v_iter) {
     const int fiberDim = sectionB->getFiberDimension(*v_iter);
     CPPUNIT_ASSERT_EQUAL(4, fiberDim);
-    const double* values = sectionB->restrictPoint(*v_iter);
+    const PylithScalar* values = sectionB->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(values);
   } // for
 
@@ -296,7 +296,7 @@
   CPPUNIT_ASSERT_EQUAL(std::string("velocity"), std::string(fieldA.label()));
   CPPUNIT_ASSERT_EQUAL(FieldBase::VECTOR,
 		       fieldA.vectorFieldType());
-  CPPUNIT_ASSERT_EQUAL(1.0, fieldA.scale());
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(1.0), fieldA.scale());
   CPPUNIT_ASSERT_EQUAL(false, fieldA.addDimensionOkay());
 
   const ALE::Obj<Mesh::RealSection>& sectionA = fieldA.section();
@@ -315,7 +315,7 @@
 		       std::string(fieldB.label()));
   CPPUNIT_ASSERT_EQUAL(FieldBase::OTHER,
 		       fieldB.vectorFieldType());
-  CPPUNIT_ASSERT_EQUAL(2.0, fieldB.scale());
+  CPPUNIT_ASSERT_EQUAL(PylithScalar(2.0), fieldB.scale());
   CPPUNIT_ASSERT_EQUAL(true, fieldB.addDimensionOkay());
 
   const ALE::Obj<Mesh::RealSection>& sectionB = fieldB.section();

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -140,7 +140,7 @@
 void
 pylith::topology::TestMesh::testNondimensionalize(void)
 { // testNondimensionalizer
-  const double lengthScale = 2.0;
+  const PylithScalar lengthScale = 2.0;
   const int spaceDim = 2;
   const int numVertices = 4;
   const int coordinates[] = { 
@@ -183,11 +183,11 @@
   for(Mesh::SieveMesh::label_sequence::iterator v_iter = verticesBegin;
       v_iter != verticesEnd;
       ++v_iter) {
-    const double* coordsVertex = coordsField->restrictPoint(*v_iter);
+    const PylithScalar* coordsVertex = coordsField->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != coordsVertex);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim) {
-      const double coordE = coordinates[i++] / lengthScale;
+      const PylithScalar coordE = coordinates[i++] / lengthScale;
       if (coordE < 1.0)
         CPPUNIT_ASSERT_DOUBLES_EQUAL(coordE, coordsVertex[iDim],
 				     tolerance);
@@ -207,11 +207,11 @@
   for(Mesh::SieveMesh::label_sequence::iterator v_iter = verticesBegin;
       v_iter != verticesEnd;
       ++v_iter) {
-    const double* coordsVertex = coordsDimField->restrictPoint(*v_iter);
+    const PylithScalar* coordsVertex = coordsDimField->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != coordsVertex);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim) {
-      const double coordE = coordinates[i++];
+      const PylithScalar coordE = coordinates[i++];
       if (coordE < 1.0)
         CPPUNIT_ASSERT_DOUBLES_EQUAL(coordE, coordsVertex[iDim],
 				     tolerance);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestRefineUniform.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestRefineUniform.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestRefineUniform.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -209,9 +209,9 @@
 	vertices->begin();
       v_iter != vertices->end();
       ++v_iter) {
-    const double* vertexCoords = coordinates->restrictPoint(*v_iter);
+    const PylithScalar* vertexCoords = coordinates->restrictPoint(*v_iter);
     CPPUNIT_ASSERT(0 != vertexCoords);
-    const double tolerance = 1.0e-06;
+    const PylithScalar tolerance = 1.0e-06;
     for (int iDim=0; iDim < spaceDim; ++iDim)
       if (data.vertices[i] < 1.0) {
         CPPUNIT_ASSERT_DOUBLES_EQUAL(data.vertices[i++], vertexCoords[iDim],

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestSubMesh.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestSubMesh.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/TestSubMesh.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 	0, 1, 3,
 	0, 3, 2,
       };
-      const double coordinates[] = {
+      const PylithScalar coordinates[] = {
 	0.0, 0.0,
 	1.0, 0.0,
 	0.0, 1.0,
@@ -224,7 +224,7 @@
   const int nvertices = _TestSubMesh::nvertices;
   const int ncorners = _TestSubMesh::ncorners;
   const int spaceDim = _TestSubMesh::cellDim;
-  const double* coordinates = _TestSubMesh::coordinates;
+  const PylithScalar* coordinates = _TestSubMesh::coordinates;
   const bool interpolate = false;
   ALE::SieveBuilder<SieveFlexMesh>::buildTopology(s, cellDim, ncells, (int*) cells,
 					      nvertices, interpolate, 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesive.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesive.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesive.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -19,6 +19,8 @@
 #if !defined(pylith_topology_meshdatacohesive_hh)
 #define pylith_topology_meshdatacohesive_hh
 
+#include "pylith/utils/types.hh" // HASA PylithScalar
+
 namespace pylith {
   namespace topology {
      class MeshDataCohesive;
@@ -55,7 +57,7 @@
   int numCellsCohesive; ///< Number of cohesive cells.
   int numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  double* vertices; ///< Pointer to coordinates of vertices
+  PylithScalar* vertices; ///< Pointer to coordinates of vertices
   int* cells; ///< Pointer to indices of vertices in cells
   int* cellsCohesive; ///< Pointer to indices of vertices in cells
   int* materialIds; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 
 const int pylith::topology::MeshDataCohesiveHex8Level2::_numCornersCohesive = 6;
 
-const double pylith::topology::MeshDataCohesiveHex8Level2::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveHex8Level2::_vertices[] = {
   -2.0, -1.0, -1.0, // 26
   -2.0, +1.0, -1.0,
   -2.0, -1.0, +1.0,
@@ -153,7 +153,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 
 const int pylith::topology::MeshDataCohesiveHex8Level2Fault1::_numCornersCohesive = 12;
 
-const double pylith::topology::MeshDataCohesiveHex8Level2Fault1::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveHex8Level2Fault1::_vertices[] = {
   -2.0, -1.0, -1.0, // 16
   -2.0, +1.0, -1.0,
   -2.0, -1.0, +1.0,
@@ -178,7 +178,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveHex8Level2Fault1.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 
 const int pylith::topology::MeshDataCohesiveQuad4Level2::_numCornersCohesive = 6;
 
-const double pylith::topology::MeshDataCohesiveQuad4Level2::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveQuad4Level2::_vertices[] = {
   -1.0, -1.0,
   -1.0,  0.0,
   -1.0,  1.0,
@@ -130,7 +130,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 
 const int pylith::topology::MeshDataCohesiveQuad4Level2Fault1::_numCornersCohesive = 6;
 
-const double pylith::topology::MeshDataCohesiveQuad4Level2Fault1::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveQuad4Level2Fault1::_vertices[] = {
   -1.0, -1.0,
   -1.0,  0.0,
   -1.0,  1.0,
@@ -145,7 +145,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveQuad4Level2Fault1.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 
 const int pylith::topology::MeshDataCohesiveTet4Level2::_numCornersCohesive = 9;
 
-const double pylith::topology::MeshDataCohesiveTet4Level2::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveTet4Level2::_vertices[] = {
   -1.000000e+00,      0.000000e+00,      0.000000e+00,
    0.000000e+00,     -1.000000e+00,      0.000000e+00,
    0.000000e+00,      0.000000e+00,      1.000000e+00,
@@ -122,7 +122,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 
 const int pylith::topology::MeshDataCohesiveTet4Level2Fault1::_numCornersCohesive = 9;
 
-const double pylith::topology::MeshDataCohesiveTet4Level2Fault1::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveTet4Level2Fault1::_vertices[] = {
   -1.0,  0.0, 0.0,
    0.0, -1.0, 0.0,
    0.0,  0.0, 1.0,
@@ -140,7 +140,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTet4Level2Fault1.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -39,7 +39,7 @@
 
 const int pylith::topology::MeshDataCohesiveTri3Level2::_numCornersCohesive = 6;
 
-const double pylith::topology::MeshDataCohesiveTri3Level2::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveTri3Level2::_vertices[] = {
   -1.0,  0.0,
    0.0, -1.0,
    0.0,  0.0,
@@ -121,7 +121,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.cc	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.cc	2011-10-31 15:27:29 UTC (rev 19131)
@@ -40,7 +40,7 @@
 
 const int pylith::topology::MeshDataCohesiveTri3Level2Fault1::_numCornersCohesive = 6;
 
-const double pylith::topology::MeshDataCohesiveTri3Level2Fault1::_vertices[] = {
+const PylithScalar pylith::topology::MeshDataCohesiveTri3Level2Fault1::_vertices[] = {
   -1.0,  0.0,
    0.0, -1.0,
    0.0,  0.0,
@@ -137,7 +137,7 @@
   numCorners = _numCorners;
   numCellsCohesive = _numCellsCohesive;
   numCornersCohesive = _numCornersCohesive;
-  vertices = const_cast<double*>(_vertices);
+  vertices = const_cast<PylithScalar*>(_vertices);
   cells = const_cast<int*>(_cells);
   cellsCohesive = const_cast<int*>(_cellsCohesive);
   materialIds = const_cast<int*>(_materialIds);

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.hh	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/topology/data/MeshDataCohesiveTri3Level2Fault1.hh	2011-10-31 15:27:29 UTC (rev 19131)
@@ -55,7 +55,7 @@
   static const int _numCellsCohesive; ///< Number of cohesive cells.
   static const int _numCornersCohesive; ///< Number of vertices in cohesive cell.
 
-  static const double _vertices[]; ///< Pointer to coordinates of vertices
+  static const PylithScalar _vertices[]; ///< Pointer to coordinates of vertices
   static const int _cells[]; ///< Pointer to indices of vertices in cells
   static const int _cellsCohesive[]; ///< Pointer to indices of vertices in cohseive cells
   static const int _materialIds[]; ///< Pointer to cell material identifiers

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestAbsorbingDampers.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestAbsorbingDampers.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestAbsorbingDampers.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,7 +80,7 @@
     """
     (mesh, bc, fields) = self._initialize()
 
-    self.assertEqual(1.0e+30, bc.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, bc.stableTimeStep(mesh)/1.0e+30, 5)
     return
 
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestNeumann.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestNeumann.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestNeumann.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -80,7 +80,7 @@
     """
     (mesh, bc, fields) = self._initialize()
 
-    self.assertEqual(1.0e+30, bc.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, bc.stableTimeStep(mesh)/1.0e+30, 5)
     return
 
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveDyn.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -132,7 +132,7 @@
     """
     (mesh, fault, fields) = self._initialize()
 
-    self.assertEqual(1.0e+30, fault.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, fault.stableTimeStep(mesh)/1.0e+30, 5)
     return
 
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/faults/TestFaultCohesiveKin.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -161,7 +161,7 @@
     """
     (mesh, fault, fields) = self._initialize()
 
-    self.assertEqual(1.0e+30, fault.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, fault.stableTimeStep(mesh)/1.0e+30, 5)
     return
 
   

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicit.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicit.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -121,7 +121,7 @@
     (mesh, integrator) = self._preinitialize()
     fields = self._initialize(mesh, integrator)
 
-    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, integrator.stableTimeStep(mesh)/1.0e+30, places=5)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityExplicitLgDeform.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -121,7 +121,7 @@
     (mesh, integrator) = self._preinitialize()
     fields = self._initialize(mesh, integrator)
 
-    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, integrator.stableTimeStep(mesh)/1.0e+30, places=5)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicit.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicit.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -105,7 +105,7 @@
     (mesh, integrator) = self._preinitialize()
     fields = self._initialize(mesh, integrator)
 
-    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, integrator.stableTimeStep(mesh)/1.0e+30, places=5)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestElasticityImplicitLgDeform.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -105,7 +105,7 @@
     (mesh, integrator) = self._preinitialize()
     fields = self._initialize(mesh, integrator)
 
-    self.assertEqual(1.0e+30, integrator.stableTimeStep(mesh))
+    self.assertAlmostEqual(1.0, integrator.stableTimeStep(mesh)/1.0e+30, places=5)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATLagrange.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATLagrange.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATLagrange.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 import unittest
 import numpy
 from pylith.feassemble.FIATLagrange import FIATLagrange
-from pylith.utils.testarray import test_double
+from pylith.utils.testarray import test_scalararray
 
 # ----------------------------------------------------------------------
 class Line2(object):
@@ -74,6 +74,40 @@
 
 
 # ----------------------------------------------------------------------
+class Line2Collocated(Line2):
+
+  def __init__(self):
+    """
+    Setup line2 cell.
+    """
+    vertices = numpy.array([[-1.0], [1.0]])
+    quadPts = vertices[:]
+    quadWts = numpy.array( [1.0,1.0], dtype=numpy.float64 )
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (2, 2), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (2, 2, 1), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q)],
+                                 dtype=numpy.float64).reshape( (2,) )
+      deriv = numpy.array([[self.N0p(q)], [self.N1p(q)]],
+                          dtype=numpy.float64)      
+      basisDeriv[iQuad] = deriv.reshape((2, 1))
+      iQuad += 1
+
+    self.cellDim = 1
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class Line3(object):
 
   def __init__(self):
@@ -207,6 +241,49 @@
 
 
 # ----------------------------------------------------------------------
+class Quad4Collocated(Quad4):
+
+  def __init__(self):
+    """
+    Setup quad4 cell.
+    """
+    vertices = numpy.array([[-1.0, -1.0],
+                            [+1.0, -1.0],
+                            [+1.0, +1.0],
+                            [-1.0, +1.0]])
+    quadPts = numpy.array([[-1.0, -1.0],
+                           [+1.0, -1.0],
+                           [-1.0, +1.0],
+                           [+1.0, +1.0]])
+    quadWts = numpy.array( [1.0, 1.0, 1.0, 1.0])
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (4, 4), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (4, 4, 2), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q),
+                                  self.N2(q), self.N3(q)],
+                                 dtype=numpy.float64).reshape( (4,) )
+      deriv = numpy.array([[self.N0p(q), self.N0q(q)],
+                           [self.N1p(q), self.N1q(q)],
+                           [self.N2p(q), self.N2q(q)],
+                           [self.N3p(q), self.N3q(q)]])
+      basisDeriv[iQuad] = deriv.reshape((4, 2))
+      iQuad += 1
+
+    self.cellDim = 2
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class Quad9(object):
 
   def __init__(self):
@@ -505,6 +582,63 @@
   
 
 # ----------------------------------------------------------------------
+class Hex8Collocated(Hex8):
+
+  def __init__(self):
+    """
+    Setup hex8 cell.
+    """
+    vertices = numpy.array([[-1.0, -1.0, -1.0],
+                            [+1.0, -1.0, -1.0],
+                            [+1.0, +1.0, -1.0],
+                            [-1.0, +1.0, -1.0],
+                            [-1.0, -1.0, +1.0],
+                            [+1.0, -1.0, +1.0],
+                            [+1.0, +1.0, +1.0],
+                            [-1.0, +1.0, +1.0]])
+    quadPts = numpy.array([[-1.0, -1.0, -1.0],
+                           [+1.0, -1.0, -1.0],
+                           [-1.0, +1.0, -1.0],
+                           [+1.0, +1.0, -1.0],
+                           [-1.0, -1.0, +1.0],
+                           [+1.0, -1.0, +1.0],
+                           [-1.0, +1.0, +1.0],
+                           [+1.0, +1.0, +1.0]])
+    quadWts = numpy.array( [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (8, 8), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (8, 8, 3), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q),
+                                  self.N2(q), self.N3(q),
+                                  self.N4(q), self.N5(q),
+                                  self.N6(q), self.N7(q)],
+                                 dtype=numpy.float64).reshape( (8,) )
+      deriv = numpy.array([[self.N0p(q), self.N0q(q), self.N0r(q)],
+                           [self.N1p(q), self.N1q(q), self.N1r(q)],
+                           [self.N2p(q), self.N2q(q), self.N2r(q)],
+                           [self.N3p(q), self.N3q(q), self.N3r(q)],
+                           [self.N4p(q), self.N4q(q), self.N4r(q)],
+                           [self.N5p(q), self.N5q(q), self.N5r(q)],
+                           [self.N6p(q), self.N6q(q), self.N6r(q)],
+                           [self.N7p(q), self.N7q(q), self.N7r(q)]])      
+      basisDeriv[iQuad] = deriv.reshape((8, 3))
+      iQuad += 1
+
+    self.cellDim = 3
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class Hex27(object):
 
   def __init__(self):
@@ -1014,6 +1148,26 @@
     return
 
 
+  def test_initialize_line2_collocated(self):
+    """
+    Test initialize() with line2 cell.
+    """
+    cell = FIATLagrange()
+    cell.inventory.dimension = 1
+    cell.inventory.degree = 1
+    cell.inventory.order  = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=1)
+
+
+    cellE = Line2Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryLine1D
+    self.failUnless(isinstance(cell.geometry, GeometryLine1D))
+    return
+
+
   def test_initialize_line3(self):
     """
     Test initialize() with line3 cell.
@@ -1050,6 +1204,25 @@
     return
 
 
+  def test_initialize_quad4_collocated(self):
+    """
+    Test initialize() with quad4 cell.
+    """
+    cell = FIATLagrange()
+    cell.inventory.dimension = 2
+    cell.inventory.degree = 1
+    cell.inventory.order  = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=2)
+
+    cellE = Quad4Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryQuad2D
+    self.failUnless(isinstance(cell.geometry, GeometryQuad2D))
+    return
+
+
   def test_initialize_quad9(self):
     """
     Test initialize() with quad9 cell.
@@ -1086,6 +1259,25 @@
     return
 
 
+  def test_initialize_hex8_collocated(self):
+    """
+    Test initialize() with hex8 cell.
+    """
+    cell = FIATLagrange()
+    cell.inventory.dimension = 3
+    cell.inventory.degree = 1
+    cell.inventory.order  = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=3)
+
+    cellE = Hex8Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryHex3D
+    self.failUnless(isinstance(cell.geometry, GeometryHex3D))
+    return
+
+
   def test_initialize_hex27(self):
     """
     Test initialize() with hex27 cell.
@@ -1124,11 +1316,11 @@
     self.assertEqual(cellE.numQuadPts, cell.numQuadPts)
 
     # Check arrays
-    test_double(self, cellE.vertices, cell.vertices)
-    test_double(self, cellE.quadPts, cell.quadPts)
-    test_double(self, cellE.quadWts, cell.quadWts)
-    test_double(self, cellE.basis, cell.basis)
-    test_double(self, cellE.basisDeriv, cell.basisDeriv)
+    test_scalararray(self, cellE.vertices, cell.vertices)
+    test_scalararray(self, cellE.quadPts, cell.quadPts)
+    test_scalararray(self, cellE.quadWts, cell.quadWts)
+    test_scalararray(self, cellE.basis, cell.basis)
+    test_scalararray(self, cellE.basisDeriv, cell.basisDeriv)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATSimplex.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATSimplex.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestFIATSimplex.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -23,7 +23,7 @@
 import unittest
 import numpy
 from pylith.feassemble.FIATSimplex import FIATSimplex
-from pylith.utils.testarray import test_double
+from pylith.utils.testarray import test_scalararray
 
 # ----------------------------------------------------------------------
 class Line2(object):
@@ -73,6 +73,40 @@
     return 0.5
 
 # ----------------------------------------------------------------------
+class Line2Collocated(Line2):
+
+  def __init__(self):
+    """
+    Setup line2 cell.
+    """
+    vertices = numpy.array([[-1.0], [1.0]])
+    quadPts = vertices[:]
+    quadWts = numpy.array( [1.0, 1.0], dtype=numpy.float64 )
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (2, 2), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (2, 2, 1), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q)],
+                                 dtype=numpy.float64).reshape( (2,) )
+      deriv = numpy.array([[self.N0p(q)], [self.N1p(q)]],
+                          dtype=numpy.float64)      
+      basisDeriv[iQuad] = deriv.reshape((2, 1))
+      iQuad += 1
+
+    self.cellDim = 1
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class Line3(object):
 
   def __init__(self):
@@ -197,6 +231,43 @@
 
 
 # ----------------------------------------------------------------------
+class Tri3Collocated(Tri3):
+
+  def __init__(self):
+    """
+    Setup tri33 cell.
+    """
+    vertices = numpy.array([[-1.0, -1.0],
+                            [+1.0, -1.0],
+                            [-1.0, +1.0]])
+    quadPts = vertices[:]
+    quadWts = numpy.array( [2.0/3.0, 2.0/3.0, 2.0/3.0])
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (3, 3), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (3, 3, 2), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q), self.N2(q)],
+                                 dtype=numpy.float64).reshape( (3,) )
+      deriv = numpy.array([[self.N0p(q), self.N0q(q)],
+                           [self.N1p(q), self.N1q(q)],
+                           [self.N2p(q), self.N2q(q)]])      
+      basisDeriv[iQuad] = deriv.reshape((3, 2))
+      iQuad += 1
+
+    self.cellDim = 2
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class Tri6(object):
 
   def __init__(self):
@@ -393,6 +464,46 @@
 
 
 # ----------------------------------------------------------------------
+class Tet4Collocated(Tet4):
+
+  def __init__(self):
+    """
+    Setup tri33 cell.
+    """
+    vertices = numpy.array([[-1.0, -1.0, -1.0],
+                            [+1.0, -1.0, -1.0],
+                            [-1.0, +1.0, -1.0],
+                            [-1.0, -1.0, +1.0]])
+    quadPts = vertices[:]
+    quadWts = numpy.array( [1.0/3.0, 1.0/3.0, 1.0/3.0, 1.0/3.0])
+
+    # Compute basis fns and derivatives at quadrature points
+    basis = numpy.zeros( (4, 4), dtype=numpy.float64)
+    basisDeriv = numpy.zeros( (4, 4, 3), dtype=numpy.float64)
+    iQuad = 0
+    for q in quadPts:
+      basis[iQuad] = numpy.array([self.N0(q), self.N1(q), 
+                                  self.N2(q), self.N3(q)],
+                                 dtype=numpy.float64).reshape( (4,) )
+      deriv = numpy.array([[self.N0p(q), self.N0q(q), self.N0r(q)],
+                           [self.N1p(q), self.N1q(q), self.N1r(q)],
+                           [self.N2p(q), self.N2q(q), self.N2r(q)],
+                           [self.N3p(q), self.N3q(q), self.N3r(q)]])      
+      basisDeriv[iQuad] = deriv.reshape((4, 3))
+      iQuad += 1
+
+    self.cellDim = 3
+    self.numCorners = len(vertices)
+    self.numQuadPts = len(quadPts)
+    self.vertices = vertices
+    self.quadPts = quadPts
+    self.quadWts = quadWts
+    self.basis = basis
+    self.basisDeriv = basisDeriv
+    return
+
+
+# ----------------------------------------------------------------------
 class TestFIATSimplex(unittest.TestCase):
   """
   Unit testing of FIATSimplex object.
@@ -426,9 +537,10 @@
     Test initialize() with line2 cell.
     """
     cell = FIATSimplex()
-    cell.shape  = "line"
-    cell.degree = 1
-    cell.order  = 1
+    cell.inventory.shape  = "line"
+    cell.inventory.degree = 1
+    cell.inventory.order  = 1
+    cell._configure()
     cell.initialize(spaceDim=1)
 
     cellE = Line2()
@@ -438,14 +550,34 @@
     return
 
 
+  def test_initialize_line2_collodated(self):
+    """
+    Test initialize() with line2 cell.
+    """
+    cell = FIATSimplex()
+    cell.inventory.shape  = "line"
+    cell.inventory.degree = 1
+    cell.inventory.order  = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=1)
+
+    cellE = Line2Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryLine1D
+    self.failUnless(isinstance(cell.geometry, GeometryLine1D))
+    return
+
+
   def test_initialize_line3(self):
     """
     Test initialize() with line3 cell.
     """
     cell = FIATSimplex()
-    cell.shape  = "line"
-    cell.degree = 2
-    cell.order  = 2
+    cell.inventory.shape  = "line"
+    cell.inventory.degree = 2
+    cell.inventory.order  = 2
+    cell._configure()
     cell.initialize(spaceDim=2)
 
     cellE = Line3()
@@ -472,6 +604,24 @@
     return
 
 
+  def test_initialize_tri3_collocated(self):
+    """
+    Test initialize() with tri3 cell.
+    """
+    cell = FIATSimplex()
+    cell.inventory.shape  = "triangle"
+    cell.inventory.degree = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=2)
+
+    cellE = Tri3Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryTri2D
+    self.failUnless(isinstance(cell.geometry, GeometryTri2D))
+    return
+
+
   def test_initialize_tri6(self):
     """
     Test initialize() with tri6 cell.
@@ -506,6 +656,24 @@
     return
 
 
+  def test_initialize_tet4_collocated(self):
+    """
+    Test initialize() with tet4 cell.
+    """
+    cell = FIATSimplex()
+    cell.inventory.shape  = "tetrahedron"
+    cell.inventory.degree = 1
+    cell.inventory.collocateQuad = True
+    cell._configure()
+    cell.initialize(spaceDim=3)
+
+    cellE = Tet4Collocated()
+    self._checkVals(cellE, cell)
+    from pylith.feassemble.CellGeometry import GeometryTet3D
+    self.failUnless(isinstance(cell.geometry, GeometryTet3D))
+    return
+
+
   def test_factory(self):
     """
     Test factory method.
@@ -526,11 +694,11 @@
     self.assertEqual(cellE.numQuadPts, cell.numQuadPts)
 
     # Check arrays
-    test_double(self, cellE.vertices, cell.vertices)
-    test_double(self, cellE.quadPts, cell.quadPts)
-    test_double(self, cellE.quadWts, cell.quadWts)
-    test_double(self, cellE.basis, cell.basis)
-    test_double(self, cellE.basisDeriv, cell.basisDeriv)
+    test_scalararray(self, cellE.vertices, cell.vertices)
+    test_scalararray(self, cellE.quadPts, cell.quadPts)
+    test_scalararray(self, cellE.quadWts, cell.quadWts)
+    test_scalararray(self, cellE.basis, cell.basis)
+    test_scalararray(self, cellE.basisDeriv, cell.basisDeriv)
     return
 
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestMeshQuadrature.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestMeshQuadrature.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestMeshQuadrature.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,7 +59,7 @@
     minJacobian = 4.0e-02;
     q = MeshQuadrature()
     q.minJacobian(minJacobian)
-    self.assertEqual(minJacobian, q.minJacobian())
+    self.assertAlmostEqual(minJacobian, q.minJacobian(), places=5)
     return
     
 
@@ -93,21 +93,30 @@
     cell.inventory.order = 2
     cell._configure()
 
+    scalarType = None
+    from pylith.utils.utils import sizeofPylithScalar
+    if 8 == sizeofPylithScalar():
+      scalarType = numpy.float64
+    elif 4 == sizeofPylithScalar():
+      scalarType = numpy.float32
+    else:
+      raise ValueError("Unknown size for PylithScalar.")
+
     verticesE = numpy.array([ [-1.0], [1.0], [0.0] ])
     quadPtsE = numpy.array( [[-1.0/3**0.5],
                              [+1.0/3**0.5]],
-                            dtype=numpy.float64 )
-    quadWtsE = numpy.array( [1.0, 1.0], dtype=numpy.float64 )
+                            dtype=scalarType )
+    quadWtsE = numpy.array( [1.0, 1.0], dtype=scalarType )
 
     # Compute basis functions and derivatives at quadrature points
-    basisE = numpy.zeros( (2, 3), dtype=numpy.float64)
-    basisDerivE = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
+    basisE = numpy.zeros( (2, 3), dtype=scalarType)
+    basisDerivE = numpy.zeros( (2, 3, 1), dtype=scalarType)
     iQuad = 0
     for q in quadPtsE:
       basisE[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
-                                  dtype=numpy.float64).reshape( (3,) )
+                                  dtype=scalarType).reshape( (3,) )
       deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
-                          dtype=numpy.float64)      
+                          dtype=scalarType)      
       basisDerivE[iQuad] = deriv.reshape((3, 1))
       iQuad += 1
 
@@ -123,16 +132,15 @@
     self.assertEqual(3, quadrature.numBasis())
     self.assertEqual(2, quadrature.numQuadPts())
 
-    from pylith.utils.testarray import test_double
-    from pylith.utils.utils import TestArray_checkDouble
+    from pylith.utils.utils import TestArray_checkScalar
 
-    self.failUnless(TestArray_checkDouble(basisE.ravel(),
+    self.failUnless(TestArray_checkScalar(basisE.ravel(),
                                           quadrature.basis()))
-    self.failUnless(TestArray_checkDouble(basisDerivE.ravel(),
+    self.failUnless(TestArray_checkScalar(basisDerivE.ravel(),
                                           quadrature.basisDerivRef()))
-    self.failUnless(TestArray_checkDouble(quadPtsE.ravel(),
+    self.failUnless(TestArray_checkScalar(quadPtsE.ravel(),
                                           quadrature.quadPtsRef()))
-    self.failUnless(TestArray_checkDouble(quadWtsE.ravel(),
+    self.failUnless(TestArray_checkScalar(quadWtsE.ravel(),
                                           quadrature.quadWts()))
 
     quadrature.initializeGeometry()

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestSubMeshQuadrature.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestSubMeshQuadrature.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/feassemble/TestSubMeshQuadrature.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -59,7 +59,7 @@
     minJacobian = 4.0e-02;
     q = SubMeshQuadrature()
     q.minJacobian(minJacobian)
-    self.assertEqual(minJacobian, q.minJacobian())
+    self.assertAlmostEqual(minJacobian, q.minJacobian(), places=5)
     return
     
 
@@ -93,21 +93,30 @@
     cell.inventory.order = 2
     cell._configure()
 
+    scalarType = None
+    from pylith.utils.utils import sizeofPylithScalar
+    if 8 == sizeofPylithScalar():
+      scalarType = numpy.float64
+    elif 4 == sizeofPylithScalar():
+      scalarType = numpy.float32
+    else:
+      raise ValueError("Unknown size for PylithScalar.")
+
     verticesE = numpy.array([ [-1.0], [1.0], [0.0] ])
     quadPtsE = numpy.array( [[-1.0/3**0.5],
                              [+1.0/3**0.5]],
-                            dtype=numpy.float64 )
-    quadWtsE = numpy.array( [1.0, 1.0], dtype=numpy.float64 )
+                            dtype=scalarType )
+    quadWtsE = numpy.array( [1.0, 1.0], dtype=scalarType )
 
     # Compute basis functions and derivatives at quadrature points
-    basisE = numpy.zeros( (2, 3), dtype=numpy.float64)
-    basisDerivE = numpy.zeros( (2, 3, 1), dtype=numpy.float64)
+    basisE = numpy.zeros( (2, 3), dtype=scalarType)
+    basisDerivE = numpy.zeros( (2, 3, 1), dtype=scalarType)
     iQuad = 0
     for q in quadPtsE:
       basisE[iQuad] = numpy.array([N0(q), N1(q), N2(q)],
-                                  dtype=numpy.float64).reshape( (3,) )
+                                  dtype=scalarType).reshape( (3,) )
       deriv = numpy.array([[N0p(q)], [N1p(q)], [N2p(q)]],
-                          dtype=numpy.float64)      
+                          dtype=scalarType)      
       basisDerivE[iQuad] = deriv.reshape((3, 1))
       iQuad += 1
 
@@ -123,16 +132,15 @@
     self.assertEqual(3, quadrature.numBasis())
     self.assertEqual(2, quadrature.numQuadPts())
 
-    from pylith.utils.testarray import test_double
-    from pylith.utils.utils import TestArray_checkDouble
+    from pylith.utils.utils import TestArray_checkScalar
 
-    self.failUnless(TestArray_checkDouble(basisE.ravel(),
+    self.failUnless(TestArray_checkScalar(basisE.ravel(),
                                           quadrature.basis()))
-    self.failUnless(TestArray_checkDouble(basisDerivE.ravel(),
+    self.failUnless(TestArray_checkScalar(basisDerivE.ravel(),
                                           quadrature.basisDerivRef()))
-    self.failUnless(TestArray_checkDouble(quadPtsE.ravel(),
+    self.failUnless(TestArray_checkScalar(quadPtsE.ravel(),
                                           quadrature.quadPtsRef()))
-    self.failUnless(TestArray_checkDouble(quadWtsE.ravel(),
+    self.failUnless(TestArray_checkScalar(quadWtsE.ravel(),
                                           quadrature.quadWts()))
 
     quadrature.initializeGeometry()

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestDataWriterHDF5Ext.py (from rev 19130, short/3D/PyLith/trunk/unittests/pytests/meshio/TestDataWriterHDF5Ext.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestDataWriterHDF5Ext.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestDataWriterHDF5Ext.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/meshio/TestDataWriterHDF5Ext.py
+
+## @brief Unit testing of Python DataWriterHDF5Ext object.
+
+import unittest
+
+from pylith.meshio.DataWriterHDF5ExtMesh import DataWriterHDF5ExtMesh
+from pylith.meshio.DataWriterHDF5ExtSubMesh import DataWriterHDF5ExtSubMesh
+from pylith.meshio.DataWriterHDF5ExtSubSubMesh import DataWriterHDF5ExtSubSubMesh
+
+# ----------------------------------------------------------------------
+class TestDataWriterHDF5ExtMesh(unittest.TestCase):
+  """
+  Unit testing of Python DataWriterHDF5ExtMesh object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtMesh()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtMesh()
+    filter._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    filter.initialize(normalizer)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.DataWriterHDF5ExtMesh import data_writer
+    filter = data_writer()
+    return
+
+
+# ----------------------------------------------------------------------
+class TestDataWriterHDF5ExtSubMesh(unittest.TestCase):
+  """
+  Unit testing of Python DataWriterHDF5Ext object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtSubMesh()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtSubMesh()
+    filter._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    filter.initialize(normalizer)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.DataWriterHDF5ExtSubMesh import data_writer
+    filter = data_writer()
+    return
+
+
+# ----------------------------------------------------------------------
+class TestDataWriterHDF5ExtSubSubMesh(unittest.TestCase):
+  """
+  Unit testing of Python DataWriterHDF5Ext object.
+  """
+
+  def test_constructor(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtSubSubMesh()
+    filter._configure()
+    return
+
+
+  def test_initialize(self):
+    """
+    Test constructor.
+    """
+    filter = DataWriterHDF5ExtSubSubMesh()
+    filter._configure()
+
+    from spatialdata.units.Nondimensional import Nondimensional
+    normalizer = Nondimensional()
+    filter.initialize(normalizer)
+    return
+
+
+  def test_factory(self):
+    """
+    Test factory method.
+    """
+    from pylith.meshio.DataWriterHDF5ExtSubSubMesh import data_writer
+    filter = data_writer()
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/testhdf5.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/testhdf5.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/testhdf5.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -69,6 +69,15 @@
     from TestDataWriterHDF5 import TestDataWriterHDF5SubSubMesh
     suite.addTest(unittest.makeSuite(TestDataWriterHDF5SubSubMesh))
 
+    from TestDataWriterHDF5Ext import TestDataWriterHDF5ExtMesh
+    suite.addTest(unittest.makeSuite(TestDataWriterHDF5ExtMesh))
+
+    from TestDataWriterHDF5Ext import TestDataWriterHDF5ExtSubMesh
+    suite.addTest(unittest.makeSuite(TestDataWriterHDF5ExtSubMesh))
+
+    from TestDataWriterHDF5Ext import TestDataWriterHDF5ExtSubSubMesh
+    suite.addTest(unittest.makeSuite(TestDataWriterHDF5ExtSubSubMesh))
+
     from TestXdmf import TestXdmf
     suite.addTest(unittest.makeSuite(TestXdmf))
 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPetscManager.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPetscManager.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPetscManager.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -27,15 +27,16 @@
   """
   Unit testing of PetscManager object.
   """
-  
 
   def test_initfinal(self):
     """
     Test initialize/finalize.
     """
     from pylith.utils.PetscManager import PetscManager
+    from pylith.utils.petsc import optionsSetValue
     manager = PetscManager()
     manager.initialize()
+    optionsSetValue("-vec_type", "seq")
     manager.finalize()
     return
 

Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPylith.py (from rev 19130, short/3D/PyLith/trunk/unittests/pytests/utils/TestPylith.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPylith.py	                        (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/TestPylith.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+# Brad T. Aagaard, U.S. Geological Survey
+# Charles A. Williams, GNS Science
+# Matthew G. Knepley, University of Chicago
+#
+# This code was developed as part of the Computational Infrastructure
+# for Geodynamics (http://geodynamics.org).
+#
+# Copyright (c) 2010-2011 University of California, Davis
+#
+# See COPYING for license information.
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/utils/TestPylith.py
+
+## @brief Unit testing of Pylith module.
+
+import unittest
+
+
+# ----------------------------------------------------------------------
+class TestPylith(unittest.TestCase):
+  """
+  Unit testing of Pylith object.
+  """
+  
+
+  def test_sizeofVoidPtr(self):
+    """
+    Test sizeofVoidPtr().
+    """
+    from pylith.utils.utils import sizeofVoidPtr
+    size = sizeofVoidPtr()
+    return
+
+
+  def test_sizeofPylithScalar(self):
+    """
+    Test sizeofPylithScalar().
+    """
+    from pylith.utils.utils import sizeofPylithScalar
+    size = sizeofPylithScalar()
+    self.failUnless(4 == size or 8 == size)
+    return
+
+
+  def test_isCUDAEnabled(self):
+    """
+    Test constructor.
+    """
+    from pylith.utils.utils import isCUDAEnabled
+    value = isCUDAEnabled()
+    return
+
+
+# End of file 

Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/testutils.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/testutils.py	2011-10-31 01:29:02 UTC (rev 19130)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/utils/testutils.py	2011-10-31 15:27:29 UTC (rev 19131)
@@ -62,6 +62,9 @@
 
     suite = unittest.TestSuite()
 
+    from TestPylith import TestPylith
+    suite.addTest(unittest.makeSuite(TestPylith))
+
     from TestEventLogger import TestEventLogger
     suite.addTest(unittest.makeSuite(TestEventLogger))
 



More information about the CIG-COMMITS mailing list