[cig-commits] r16840 - in short/3D/PyLith/branches/pylith-scecdynrup: . doc/install doc/releasenotes doc/userguide doc/userguide/benchmarks doc/userguide/benchmarks/savageprescott/figs doc/userguide/boundaryconditions doc/userguide/extending doc/userguide/governingeqns doc/userguide/install doc/userguide/intro doc/userguide/runpylith doc/userguide/tutorials examples/3d/hex8 examples/3d/hex8/mesh examples/3d/hex8/spatialdb examples/bar_shearwave examples/bar_shearwave/hex8 examples/bar_shearwave/quad4 examples/bar_shearwave/tet4 examples/bar_shearwave/tri3 examples/greensfns/hex8 libsrc libsrc/bc libsrc/faults libsrc/feassemble libsrc/friction libsrc/materials libsrc/meshio libsrc/problems libsrc/topology libsrc/utils modulesrc/bc modulesrc/faults modulesrc/feassemble modulesrc/materials modulesrc/meshio modulesrc/problems playpen playpen/friction pylith pylith/feassemble pylith/meshio pylith/problems pylith/topology templates templates/friction templates/materials tests_auto/2d/quad4 tests_auto/2d/tri3 unittests/libtests/bc unittests/libtests/bc/data unittests/libtests/faults unittests/libtests/faults/data unittests/libtests/feassemble unittests/libtests/feassemble/data unittests/libtests/materials unittests/libtests/meshio unittests/pytests/bc unittests/pytests/materials unittests/pytests/meshio
brad at geodynamics.org
brad at geodynamics.org
Sun May 30 14:53:49 PDT 2010
Author: brad
Date: 2010-05-30 14:53:47 -0700 (Sun, 30 May 2010)
New Revision: 16840
Added:
short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt
short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda/
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.png
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.svg
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model_3d.eps
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover/
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave/
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_druckerprager.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_risetime.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_slip.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_sliptime.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tet4_elasticity.wxm
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tri3_elasticity.wxm
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i
short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc/
short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTri3.py
short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumpedTri3.py
short/3D/PyLith/branches/pylith-scecdynrup/templates/friction/
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.hh
Removed:
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/coverimage.png
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/pylith_cover.psd
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_risetime.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_slip.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_sliptime.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/playpen/friction/bar_shearwave/
Modified:
short/3D/PyLith/branches/pylith-scecdynrup/README
short/3D/PyLith/branches/pylith-scecdynrup/TODO
short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt
short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx
short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/box_hex8_1000m.exo
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip_rupture.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/sliprate_creep.spatialdb
short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/README
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/bar_hex8_200m.exo
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/README
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/bar_quad4_200m.exo
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/geometry.jou
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/mesh_quad4_200m.jou
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tet4/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/bar_tri3_200m.exo
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/geometry.jou
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/mesh_tri3_200m.jou
short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/examples/greensfns/hex8/pylithapp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/BoundaryCondition.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.icc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Constraint.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicit.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryLine3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryQuad2D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTet3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri2D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.icc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/IntegratorElasticity.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din2D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2Din3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/feassemblefwd.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/SlipWeakening.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/StaticFriction.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.icc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/DataWriterVTK.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.icc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.hh
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Distributor.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/ReverseCuthillMcKee.cc
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscerror.h
short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscfwd.h
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.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/feassemble/Constraint.i
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i
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/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/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/meshio/MeshIOCubit.i
short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i
short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTet4.py
short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py
short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Integrator.py
short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py
short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.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/topology/Jacobian.py
short/3D/PyLith/branches/pylith-scecdynrup/templates/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/templates/README
short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc
short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.py
short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/materialscontrib.i
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/axialdisp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation2.cfg
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/lgdeformtraction.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/sheardisp.cfg
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/tests_auto/2d/tri3/axialdisp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation2.cfg
short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/sheardisp.cfg
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2b.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCQuad4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTet4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTri3.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceHex8.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceLine2.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceQuad4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTet4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTri3.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc
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/TestFaultCohesiveKinSrcsHex8.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.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/data/CohesiveDynDataTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/slipth.py
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/Makefile.am
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc
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/Quadrature2DLinear.py
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.hh
short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIOCubit.cc
short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py
short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestMaterial.py
short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestMeshIOCubit.py
Log:
Merge from trunk.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/README 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/README 2010-05-30 21:53:47 UTC (rev 16840)
@@ -33,19 +33,135 @@
PyLith is under active development and we expect a number of additions
and improvements in the near future. Likely enhancements will include
additional constitutive models for both volume elements and cohesive
-(fault) elements, implementation of finite-strain and large
-deformations, and the generation of Green's functions to be used in
-inversions. Many of these features should be available in early 2010.
+(fault) elements and the generation of Green's functions to be used in
+inversions.
+======================================================================
+TIPS
+======================================================================
+ * For most crustal deformation problems, we recommend using the
+ Additive Schwartz preconditioner via the following PETSc
+ settings:
+
+ - Command line arguments
+
+ --petsc.pc_type=asm
+ --petsc.ksp_max_it=100
+ --petsc.ksp_gmres_restart=50
+ --petsc.ksp_rtol=1.0e-08
+
+ - pylithapp.cfg (or your other favorite .cfg file)
+
+ [pylithapp.petsc]
+ pc_type = asm
+ ksp_max_it = 200
+ ksp_gmres_restart = 50
+ ksp_rtol = 1.0e-08
+
+ * If the solve takes more than a few hundred iterations for a
+ large problem (use the --petsc.ksp_monitor=1 and
+ --petsc.ksp_view=1 to see diagnostic information for the
+ solver), this is an indication that something is wrong. Either
+ the preconditioner is inappropriate for the type of problem you
+ are solving or there is an error in the problem setup.
+
+
======================================================================
MIGRATING FROM VERSION 1.4 TO 1.5
======================================================================
-Power-law stuff
+Two changes to the code require updating old parameters settings for use
+with version 1.5.
-many new features
+(1) Recent releases of CUBIT include nodeset names in the Exodus file
+and PyLith now uses them to associate vertices with boundary
+conditions and faults. Use the netcdf utility ncdump to examine the
+contents of the Exodus (.exo) file to see it it includes the variable
+ns_names. If it does use nodeset names rather than nodeset ids for
+boundary condition label properties. If your Exodus file does not
+contain nodeset names, then set the MeshIOCubit property
+use_nodeset_names to False to continue to use nodeset id values for
+boundary condition labels.
+(2) The power-law constitutive parameters have been changed in order
+to facilitate nondimensionalization. [CHARLES ADD SOME FURTHER
+EXPLANATION]
+
+----------------------------------------------------------------------
+Version 1.5.0
+----------------------------------------------------------------------
+
+ * Fault constitutive models
+
+ Added fault friction interface conditions with static
+ friction, linear slip-weakening friction, and rate- and
+ state-friction with the ageing law. The implementation can be used
+ in static, quasi-static, or dynamic problems.
+
+ * Drucker-Prager elastoplastic bulk rheology
+
+ Added a Drucker-Prager elastoplastic bulk rheology. [NEED SOME
+ WORDS FROM CHARLES]
+
+ * Finite-deformation formulation
+
+ Added a finite-deformation (rigid body motion and small strains)
+ implementation of elasticity with stress calculated using the
+ Second Piola Kirchhoff stress tensor and strains calculated using
+ the Green-Lagrange strain tensor.
+
+ * Lumped Jacobian for explicit-time stepping
+
+ Added the option to lump cell Jacobian matrices to form a diagonal
+ system Jacobian matrix for explicit time stepping. This decouples
+ all degrees of freedom and permits use of a fast, trivial, direct
+ solver.
+
+ * Optimized elasticity objects
+
+ Added optimized elasticity objects for the most popular cell types
+ and basis functions (linear polynomials). For tri3 and tet4 cells
+ with one quadrature point, the optimized implementations do not
+ use mapped cells to reduce the number of operations. For quad4 and
+ hex8 cells the optimized objects provide hardwired loop bounds
+ which can lead to faster performance for some compilers.
+
+ * Scientific notation for ASCII VTK files
+
+ Data values in ASCII data files are written in scientific notation
+ with user-specified precision.
+
+ * Nodeset names in CUBIT Exodus files
+
+ Use of nodeset names in CUBIT Exodus files for boundary conditions
+ and faults. Users can specify to use nodeset names (default
+ behavior) or ids.
+
+ * Velocity and slip rate as output fields
+
+ Velocity (domain and subdomain) and slip rate (fault) fields are
+ can be requested as output fields. The fields are computed using
+ the time-stepping algorithm and alleviates the need to compute
+ them via post-processing.
+
+ * Dimensionless values in spatial databases no longer need
+ artificial dimensions. Values without dimensions are understood by
+ the parser as dimensionless quantities.
+
+ * Bug fixes
+
+ - Updating state variables did not retrieve physical properties
+ for cell. Last physical properties retrieved were used. Physical
+ properties are now retrieved when updating state variables.
+
+ - Fixed incorrect dimensioning of physical properties and state
+ variables for the power-law rheology in output.
+
+ - Fixed memory bug for a fault in a 1-D mesh when constructing the
+ cohesive cells.
+
+
======================================================================
MIGRATING FROM VERSION 1.3 TO 1.4
======================================================================
@@ -102,66 +218,6 @@
1.2. The time stepping is specified under the time-stepping
formulation rather than the problem (i.e., one level deeper).
-======================================================================
-MIGRATING FROM VERSION 1.1 TO 1.2
-======================================================================
-
-There are two new features in PyLith version 1.2 that require users to
-adjust input parameters from those used with PyLith 1.1. A dynamic
-array of kinematic rupture replaces a single kinematic rupture on a
-fault. Additionally, the default slip time function is now a
-step-function. This eliminates the need to specify a peak slip rate
-for quasi-static simulations. When using PyLith version 1.2 with a
-problem previously setup for PyLith 1.1, look for warnings about
-unknown components and settings in the screen output at the beginning
-of a run.
-
-======================================================================
-MIGRATING FROM VERSION 1.0 TO 1.1
-======================================================================
-
-There are two new features in PyLith version 1.1 that require users to
-adjust input parameters from those used with PyLith 1.0. The
-elimination of containers in favor of the dynamic arrays of components
-present in the latest version of Pyre requires switching from setting
-the container to specifying the array of components on the command
-line or .cfg file. Additionally, the new implementation of output
-requires a completely new set of parameters. When using PyLith version
-1.1 with a problem previously setup for PyLith 1.0, look for warnings
-about unknown components and settings in the output at the beginning
-of a run.
-
-======================================================================
-TIPS
-======================================================================
-
- * For most crustal deformation problems, we recommend using the
- Additive Schwartz preconditioner via the following PETSc
- settings:
-
- - Command line arguments
-
- --petsc.pc_type=asm
- --petsc.ksp_max_it=100
- --petsc.ksp_gmres_restart=50
- --petsc.ksp_rtol=1.0e-08
-
- - pylithapp.cfg (or your other favorite .cfg file)
-
- [pylithapp.petsc]
- pc_type = asm
- ksp_max_it = 200
- ksp_gmres_restart = 50
- ksp_rtol = 1.0e-08
-
- * If the solve takes more than a few hundred iterations for a
- large problem (use the --petsc.ksp_monitor=1 and
- --petsc.ksp_view=1 to see diagnostic information for the
- solver), this is an indication that something is wrong. Either
- the preconditioner is inappropriate for the type of problem you
- are solving or there is an error in the problem setup.
-
-
----------------------------------------------------------------------
Version 1.3.1
----------------------------------------------------------------------
@@ -207,6 +263,20 @@
viscoelastic and generalized Maxwell viscoelastic materials (mu
and lambda were switched).
+======================================================================
+MIGRATING FROM VERSION 1.1 TO 1.2
+======================================================================
+
+There are two new features in PyLith version 1.2 that require users to
+adjust input parameters from those used with PyLith 1.1. A dynamic
+array of kinematic rupture replaces a single kinematic rupture on a
+fault. Additionally, the default slip time function is now a
+step-function. This eliminates the need to specify a peak slip rate
+for quasi-static simulations. When using PyLith version 1.2 with a
+problem previously setup for PyLith 1.1, look for warnings about
+unknown components and settings in the screen output at the beginning
+of a run.
+
----------------------------------------------------------------------
Version 1.2.0
----------------------------------------------------------------------
@@ -216,7 +286,7 @@
The previous implementation of Sieve provided a very generalized
implementation of data structures and operations for
finite-element meshes. Switching to a more rigid implementation in
- the new implementation strealined the data structures, resulting
+ the new implementation streamlined the data structures, resulting
in a significant reduction in the memory use for storing the
mesh. This leads to an overall reduction in memory use of 25-30%
in many cases.
@@ -254,6 +324,21 @@
* Fixed Makefile.am files to not delete source files during "make
clean" when building in the source tree.
+======================================================================
+MIGRATING FROM VERSION 1.0 TO 1.1
+======================================================================
+
+There are two new features in PyLith version 1.1 that require users to
+adjust input parameters from those used with PyLith 1.0. The
+elimination of containers in favor of the dynamic arrays of components
+present in the latest version of Pyre requires switching from setting
+the container to specifying the array of components on the command
+line or .cfg file. Additionally, the new implementation of output
+requires a completely new set of parameters. When using PyLith version
+1.1 with a problem previously setup for PyLith 1.0, look for warnings
+about unknown components and settings in the output at the beginning
+of a run.
+
----------------------------------------------------------------------
Version 1.1.2
----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/TODO 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/TODO 2010-05-30 21:53:47 UTC (rev 16840)
@@ -2,45 +2,68 @@
CURRENT ISSUES/PRIORITIES
======================================================================
-need Cygwin binbot
+BINBOTS
-MAIN PRIORITIES
+ need cygwin binbot
-* Better preconditioning
- + Need settings for Schur complement
+ Add ML to petsc on all binbots (requires fortran compiler)
- We should temporarily hardwire the Schur complement settings (enable
- with #define) and see how well it works.
+top-level README [add fault preconditioner when done]
+ Need Charles to add some additional description
- MATT is thinking about how to setup Schur complement settings
- (recursive specification of field splits).
+release announcement [add fault preconditioner when done]
-* Drucker-Prager elastoplastic
- Need to link isJacobianSymmetric() in Integrator with materials.
- Need to pass hint when creating Jacobian.
+DOC/INSTALL
+ Update MacBookPro
+ development, easy to switch among different versions of MPI and
+ test compatibility of newer versions of various package
+ Update linux
+ Add garuda, pangu
+ Clusters - dependencies and multiple versions of PyLith
+ (development and stable)
-* Friction
- + Add stuff to manual
+MANUAL
-* Optimization
- + Specialized elasticity integrator objects for Tri3, Quad4, Hex8
- + inline methods (what isn't getting inlined) -Winline
+ Governing equations [Brad]
-* Lumped solver
- + Need to finish unit tests
+ Mesher parameters [Charles]
+ Need outline of parameters to MeshImporter like other objects
-* Updates to manual
- + tutorial
- + governing equations
- + Large deformation formulation
- + mesh reordering
- + Lumped solver
- + Cleanup bulk constitutive models (consistent w/governing eqns)
+ MeshIOAscii
+ MeshIOLaGriT
+ MeshIOCubit
+ use_nodeset_names Flag for using nodeset names of ids.
+ reorder_mesh
+ distribution
+ partitioner
-* Cleanup PETSc setttings in examples
- ksp_view, monitor, converged reason
+ Small strain formulation [Brad]
-* Tutorials
+ Fault
+ governing equations [Brad]
+ dynamic rupture parameters [Brad]
+ fault constitutive models [Surendra]
+
+ Tutorials
+ 3d/hex8 [Charles]
+ bar_shearwave [Brad]
+ kinematic
+ friction
+ static (stick, sliding)
+ dynamic (static, slip-weakening, rate-and-state)
+ meshgeneration [Charles]
+
+ Benchmarks
+ Update performance?
+ SCEC dynamic rupture benchmarks [Surendra]
+ Savage-Prescott
+ change .cfg file to output velocities, update post-processing
+
+ Materials [Charles]
+ Are material models consistent with governing equations discussion?
+
+TUTORIALS/EXAMPLES
+
3d/hex8
directory structure
1. Dirichlet BC (static)
@@ -50,7 +73,7 @@
3. Earthquake rupture (static)
add fault slip w/greater slip at depth
4. Dirichlet BC (quasi-static)
- constant velocity BC
+ constant velocity BC + MaxwellIsotropic3D (lower crust)
5. Dirichlet + Neumann (quasi-static)
constant velocity + time-dependent traction BC
6. Multiple earthquake rupture + creep (quasi-static)
@@ -75,28 +98,33 @@
16. Gravity w/prestress
17. Gravity w/small strain
- bar_shearwave
- * quad4
- + kinematic [explicit NOT lumped]
- + static friction [lumped]
- + slip-weakening friction
- + rate- and state- friction
- * tri3
- * hex8
- * tet4
+ meshgeneration
- meshes
-Write up description of Savage and Prescott (1978) benchmark and
-distribute to Greg Lyzenga and Jay Parker
+OTHER
-Need full-scale test with variation in physical properties within a material.
+ Write up description of Savage and Prescott (1978) benchmark and
+ distribute to Greg Lyzenga and Jay Parker
+ Add time step information
+
+CODE
+
+ * Better preconditioning [Matt/Brad]
+
+ Diagonal preconditioner does not work very well. It looks like the
+ preconditioner needs off-diagonal terms consistent with the
+ coupling of the Lagrange multiplier constraints (sparsity pattern
+ matches the union of the matrices associated with the fault
+ meshes).
+
+ Need field split working for both SolverLinear and SolverNonlinear.
+
----------------------------------------------------------------------
SECONDARY PRIORITIES
----------------------------------------------------------------------
-* Output to HDF5 files
+* Output to VTK XML files w/data values as binary
* Uniform global refinement for tets with faults
@@ -110,15 +138,26 @@
* Optimization
+ Reimplement Fields to use a single section.
+ - SolutionFields (RealSection)
+ - UniformFields (UniformSection)?
+ May be gotchas associated with Petsc Vec and scatters
+ + inline methods (what isn't getting inlined) -Winline
+ + Specialized elasticity integrator objects for Quad4, Hex8
+ - Add for lgdeform, implicit time integration?
+* Testing
+ + Need full-scale test with variation in physical properties
+ within a material.
+
* utilities
+ pylith_eqsummary
Calculate eq statistics for given slip model (VTK output).
Ability to get shear modulus on both sides of the fault (use fault normal).
-* VTKDataReaderZip
+* GenMaxwellPlaneStrain (plane strain Generalize Maxwell model) [Charles]
+* VTKDataReaderZip (obsolete if use VTK XML files?)
+
Read VTK files from zipfile.
import zipfile
@@ -129,30 +168,17 @@
reader.update()
data = reader.get_output()
+* Lumped solver [Brad]
+ + Need to finish unit tests
-----------------------------------------------------------------------
-FRICTION
-----------------------------------------------------------------------
-
-TPV205-2D
- quad4, tri3
-TPV205
- hex8, tet4
-
-TPV?? (rate and state)
-TPV?? Drucker-Prager
-
-----------------------------------------------------------------------
-LUMPED SOLVER
-----------------------------------------------------------------------
-
-Unit tests
-
AbsorbingDampers
integrateResidualLumped()
FaultCohesiveDyn
adjustSolnLumped()
+ Make fault nucleation (initial tractions) modular (allow space/time
+ variation).
+
----------------------------------------------------------------------
CLEANUP
----------------------------------------------------------------------
@@ -297,11 +323,6 @@
RELEASE 1.5
----------------------------------------------------------------------
-1. Nondimensionalization
-
- Ask constraints if a block matrix is okay. If okay and matrix type
- is "unknown" (not set by user), then set block size. Do this in Python.
-
2. 2-D Plane strain Maxwell viscoelastic rheology [Charles]
3. 2-D Plane strain Generalized Maxwell viscoelastic rheology [Charles]
@@ -324,8 +345,6 @@
Modularize output? [Matt]
-Fault friction
-
Uniform refinement (debug, check, all cell types)
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda (from rev 16839, short/3D/PyLith/trunk/doc/install/Cluster_CIT-garuda)
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt (from rev 16839, short/3D/PyLith/trunk/doc/install/Cluster_CIT-garuda.txt)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-garuda.txt 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,29 @@
+Python
+ http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
+
+cppunit
+
+proj.4
+
+FIAT
+
+swig
+
+pythia
+
+netcdf
+
+numpy
+
+spatialdata
+
+mercurial
+
+PETSc
+
+nemesis
+
+PyLith
+
+
+
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/install/Cluster_CIT-pangu.txt 2010-05-30 21:53:47 UTC (rev 16840)
@@ -2,6 +2,53 @@
INSTRUCTIONS FOR INSTALLING PYLITH ON THE CALTECH LINUX CLUSTER PANGU
======================================================================
+/opt/openmpi/1.4.2/intel
+/opt/intel/Compiler/11.1/072/
+/opt/intel/Compiler/11.1/072/mkl/lib
+
+Python
+ http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tgz
+
+cppunit
+ http://downloads.sourceforge.net/cppunit/cppunit-1.12.1.tar.gz
+
+proj.4
+ http://download.osgeo.org/proj/proj-4.7.0.tar.gz
+ http://download.osgeo.org/proj/proj-datumgrid-1.5.zip
+
+FIAT
+ http://www.fenics.org/pub/software/fiat/FIAT-0.3.5.tar.gz
+
+swig
+ http://downloads.sourceforge.net/project/swig/swig/swig-1.3.40/swig-1.3.40.tar.gz?use_mirror=voxel
+
+pythia
+ svn co http://geodynamics.org/svn/cig/cs/pythia/trunk pythia
+
+netcdf
+ http://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-4.1.1.tar.gz
+
+numpy
+ http://downloads.sourceforge.net/project/numpy/NumPy/1.4.1/numpy-1.4.1.tar.gz?use_mirror=hivelocity
+
+spatialdata
+ svn co http://geodynamics.org/svn/cig/cs/spatialdata-0.1/trunk spatialdata-dev
+ Comment out postdep_objects (bug in ifort)
+
+mercurial
+ http://mercurial.selenic.com/release/mercurial-1.5.2.tar.gz
+
+PETSc
+ hg clone http://petsc.cs.iit.edu/petsc/petsc-dev
+ cd petsc-dev/config
+ hg clone http://petsc.cs.iit.edu/petsc/BuildSystem BuildSystem
+
+nemesis
+ svn co http://geodynamics.org/svn/cig/cs/nemesis/trunk nemesis-dev
+
+PyLith
+ svn co http://geodynamics.org/svn/cig/short/3D/PyLith/trunk pylith-dev
+
I place applications that are rarely updated in $HOME/tools. For CIG
source code, I separate the source code, build directories, and
installed code. The source code sits in $HOME/src/cig, I build the
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/releasenotes/announce_v1.5.0.txt 2010-05-30 21:53:47 UTC (rev 16840)
@@ -7,17 +7,19 @@
This release adds several new features to PyLith, including (1) fault
friction with several widely-used fault constitutive models, (2) an
optimized solver for explicit time-stepping with a lumped Jacobian
-sparse matrix, (3) Total Langrangian formulation for large
-deformations, (4) use of scientific notation in VTK output files with
-user-specified precision, (5) ??, (6) ??, and (7) ??. We encourage all
-users of previous PyLith releases to switch to this latest release.
+sparse matrix, (3) a total Langrangian formulation for rigid-body
+motion and small strains, (4) use of scientific notation in VTK output
+files with user-specified precision, and (5) use of nodeset names in
+CUBIT Exodus files. We encourage all users of previous PyLith releases
+to switch to this latest release.
We strongly recommend all users of previous PyLith releases to switch
-to this latest release. Switching from v1.4.0 or v1.4.1 to v1.4.2 only
-requires changes to parameter files when using adaptive time stepping
-with a non-default stability factor (see the release notes below for
-details). See the README file for changes required to switch to the
-v1.4.x release series from previous versions.
+to this latest release. In addition to adding features this release
+also fixes a number of bugs (see top-level README file). Switching
+from v1.5.0 only requires changes to parameter files when using CUBIT
+meshes or the power-law rheology. See the README file for changes
+required to switch to the v1.5.x release series from previous
+versions.
You can download the source code and binaries from
@@ -30,8 +32,73 @@
RELEASE NOTES
- *
+ * Fault constitutive models
- * Bug fixes
+ Added fault friction interface conditions with static
+ friction, linear slip-weakening friction, and rate- and
+ state-friction with the ageing law. The implementation can be used
+ in static, quasi-static, or dynamic problems.
- -
+ * Drucker-Prager elastoplastic bulk rheology
+
+ Added a Drucker-Prager elastoplastic bulk rheology. [NEED SOME
+ WORDS FROM CHARLES]
+
+ * Finite-deformation formulation
+
+ Added a finite-deformation (rigid body motion and small strains)
+ implementation of elasticity with stress calculated using the
+ Second Piola Kirchhoff stress tensor and strains calculated using
+ the Green-Lagrange strain tensor.
+
+ * Lumped Jacobian for explicit-time stepping
+
+ Added the option to lump cell Jacobian matrices to form a diagonal
+ system Jacobian matrix for explicit time stepping. This decouples
+ all degrees of freedom and permits use of a fast, trivial, direct
+ solver.
+
+ * Optimized elasticity objects
+
+ Added optimized elasticity objects for the most popular cell types
+ and basis functions (linear polynomials). For tri3 and tet4 cells
+ with one quadrature point, the optimized implementations do not
+ use mapped cells to reduce the number of operations. For quad4 and
+ hex8 cells the optimized objects provide hardwired loop bounds
+ which can lead to faster performance for some compilers.
+
+ * Scientific notation for ASCII VTK files
+
+ Data values in ASCII data files are written in scientific notation
+ with user-specified precision.
+
+ * Nodeset names in CUBIT Exodus files
+
+ Use of nodeset names in CUBIT Exodus files for boundary conditions
+ and faults. Users can specify to use nodeset names (default
+ behavior) or ids.
+
+ * Velocity and slip rate as output fields
+
+ Velocity (domain and subdomain) and slip rate (fault) fields are
+ can be requested as output fields. The fields are computed using
+ the time-stepping algorithm and alleviates the need to compute
+ them via post-processing.
+
+ * Dimensionless values in spatial databases no longer need
+ artificial dimensions. Values without dimensions are understood by
+ the parser as dimensionless quantities.
+
+ * Bug fixes
+
+ - Updating state variables did not retrieve physical properties
+ for cell. Last physical properties retrieved were used. Physical
+ properties are now retrieved when updating state variables.
+
+ - Fixed incorrect dimensioning of physical properties and state
+ variables for the power-law rheology in output.
+
+ - Fixed memory bug for a fault in a 1-D mesh when constructing the
+ cohesive cells.
+
+
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/benchmarks.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.0 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -143,5 +143,9 @@
\end_layout
+\begin_layout Subsection
+ADD SCEC DYNAMIC RUPTURE BENCHMARKS
+\end_layout
+
\end_body
\end_document
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.png (from rev 16839, short/3D/PyLith/trunk/doc/userguide/benchmarks/savageprescott/figs/model-3d.png)
===================================================================
(Binary files differ)
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.svg (from rev 16839, short/3D/PyLith/trunk/doc/userguide/benchmarks/savageprescott/figs/model-3d.svg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.svg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model-3d.svg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,401 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.3622"
+ height="744.09448"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="model-3d.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path4045"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180) translate(10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Send"
+ style="overflow:visible;">
+ <path
+ id="path4051"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.2) rotate(180) translate(6,0)" />
+ </marker>
+ <inkscape:perspective
+ id="perspective5436"
+ inkscape:persp3d-origin="-1134.7583 : 2281.7848 : 1"
+ inkscape:vp_z="1786.0074 : 1036.1992 : 0"
+ inkscape:vp_y="2.2341584e-14 : 366.65173 : 0"
+ inkscape:vp_x="-898.60862 : 521.35145 : 0"
+ sodipodi:type="inkscape:persp3d" />
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="TriangleOutL"
+ style="overflow:visible">
+ <path
+ id="path4179"
+ d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path4063"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path4039"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lend"
+ style="overflow:visible;">
+ <path
+ id="path4057"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) rotate(180) translate(1,0)" />
+ </marker>
+ <inkscape:perspective
+ id="perspective4001"
+ inkscape:persp3d-origin="-1134.7583 : 2276.1342 : 1"
+ inkscape:vp_z="1786.0074 : 1036.1992 : 0"
+ inkscape:vp_y="2.2341584e-14 : 366.65173 : 0"
+ inkscape:vp_x="-898.60862 : 521.35145 : 0"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="-898.60862 : 521.35145 : 0"
+ inkscape:vp_y="2.2341584e-14 : 366.65173 : 0"
+ inkscape:vp_z="1786.0074 : 1036.1992 : 0"
+ inkscape:persp3d-origin="-686.84163 : 2207.3842 : 1"
+ id="perspective3992" />
+ <inkscape:perspective
+ id="perspective3967"
+ inkscape:persp3d-origin="-686.84163 : 2207.3842 : 1"
+ inkscape:vp_z="1786.0074 : 1036.1992 : 0"
+ inkscape:vp_y="2.2341584e-14 : 366.65173 : 0"
+ inkscape:vp_x="-898.60862 : 521.35145 : 0"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3951"
+ inkscape:persp3d-origin="-994.67766 : 1717.4033 : 1"
+ inkscape:vp_z="1787.6805 : 776.58694 : 0"
+ inkscape:vp_y="2.2362514e-14 : 274.78977 : 0"
+ inkscape:vp_x="-899.45044 : 390.73059 : 0"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="-898.60862 : 521.35145 : 0"
+ inkscape:vp_y="2.2341584e-14 : 366.65173 : 0"
+ inkscape:vp_z="1786.0074 : 1036.1992 : 0"
+ inkscape:persp3d-origin="-851.0546 : 2273.6367 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.78"
+ inkscape:cx="534.75707"
+ inkscape:cy="330.72989"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1425"
+ inkscape:window-height="972"
+ inkscape:window-x="97"
+ inkscape:window-y="47"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-308.2677)">
+ <g
+ id="g4003">
+ <g
+ inkscape:corner7="-1.7875494 : -3.6100944 : 0.25 : 1"
+ inkscape:corner0="-1.483669 : -2.8373358 : 0 : 1"
+ inkscape:perspectiveID="#perspective5436"
+ id="g3923"
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ sodipodi:type="inkscape:box3d">
+ <path
+ d="m 644.9813,325.35465 273.06955,158.42848 0,283.33328 L 644.9813,608.68792 z"
+ inkscape:box3dsidetype="11"
+ style="fill:#e9e9ff;fill-rule:evenodd;stroke:none"
+ id="path3935"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 198.47945,584.40445 0,283.33327 446.50185,-259.0498 0,-283.33327 z"
+ inkscape:box3dsidetype="6"
+ style="fill:#353564;fill-rule:evenodd;stroke:none"
+ id="path3925"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="M 198.47945,867.73772 471.549,1026.1662 918.05085,767.11641 644.9813,608.68792 z"
+ inkscape:box3dsidetype="13"
+ style="fill:#afafde;fill-rule:evenodd;stroke:none"
+ id="path3933"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="M 198.47945,584.40445 471.549,742.83293 918.05085,483.78313 644.9813,325.35465 z"
+ inkscape:box3dsidetype="5"
+ style="fill:#338000;fill-rule:evenodd;stroke:none"
+ id="path3927"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 471.549,742.83293 0,283.33327 446.50185,-259.04979 0,-283.33328 z"
+ inkscape:box3dsidetype="14"
+ style="fill:#ffd5d5;fill-rule:evenodd;stroke:none"
+ id="path3931"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 198.47945,584.40445 273.06955,158.42848 0,283.33327 -273.06955,-158.42848 z"
+ inkscape:box3dsidetype="3"
+ style="fill:#ff8080;fill-rule:evenodd;stroke:none"
+ id="path3929"
+ sodipodi:type="inkscape:box3dside" />
+ </g>
+ <g
+ inkscape:corner7="-1.2882972 : -3.5877161 : 0.24870746 : 1"
+ inkscape:corner0="-0.98922373 : -3.3338284 : 0 : 1"
+ inkscape:perspectiveID="#perspective3967"
+ id="g3953"
+ style="fill:#338000;stroke:none"
+ sodipodi:type="inkscape:box3d">
+ <path
+ d="m 646.2767,325.35469 268.75,155.92238 0,93.08837 -268.75,-155.92239 z"
+ inkscape:box3dsidetype="11"
+ style="fill:#e9e9ff;fill-rule:evenodd;stroke:none"
+ id="path3965"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 202.08334,583.06516 0,93.08836 444.19336,-257.71047 0,-93.08836 z"
+ inkscape:box3dsidetype="6"
+ style="fill:#353564;fill-rule:evenodd;stroke:none"
+ id="path3955"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 202.08334,676.15352 268.75,155.92239 444.19336,-257.71047 -268.75,-155.92239 z"
+ inkscape:box3dsidetype="13"
+ style="fill:#afafde;fill-rule:evenodd;stroke:none"
+ id="path3963"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 202.08334,583.06516 268.75,155.92239 444.19336,-257.71048 -268.75,-155.92238 z"
+ inkscape:box3dsidetype="5"
+ style="fill:#338000;stroke:none"
+ id="path3957"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 470.83334,738.98755 0,93.08836 444.19336,-257.71047 0,-93.08837 z"
+ inkscape:box3dsidetype="14"
+ style="fill:#b3ff80;stroke:none"
+ id="path3961"
+ sodipodi:type="inkscape:box3dside" />
+ <path
+ d="m 202.08334,583.06516 268.75,155.92239 0,93.08836 -268.75,-155.92239 z"
+ inkscape:box3dsidetype="3"
+ style="fill:#44aa00;stroke:none"
+ id="path3959"
+ sodipodi:type="inkscape:box3dside" />
+ </g>
+ </g>
+ <path
+ style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 427.94118,452.36219 C 695.58824,606.77395 695.58824,606.77395 695.58824,606.77395"
+ id="path4019" />
+ <path
+ style="fill:none;stroke:#ff0000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 693.8984,606.79057 c 0,49.98391 0,51.09466 0,51.09466"
+ id="path4027" />
+ <path
+ id="path4029"
+ d="m 693.8984,653.24218 c 0,49.98391 0,51.09466 0,51.09466"
+ style="fill:none;stroke:#0000ff;stroke-width:5;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+ <g
+ id="g5431"
+ transform="translate(77.29344,-500.82621)">
+ <path
+ transform="translate(0,308.2677)"
+ id="path4031"
+ d="m 471.11111,715.94633 c 90.37037,-51.85185 91.11111,-51.85185 91.11111,-51.85185"
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:none" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:none"
+ d="M 471.52656,1024.0367 C 381.43638,971.69953 381.06601,971.05803 381.06601,971.05803"
+ id="path5427" />
+ <path
+ id="path5429"
+ d="m 470.41545,1023.2959 c 0.2802,-104.18895 0.65057,-104.83045 0.65057,-104.83045"
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:none" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="646.01691"
+ y="483.19366"
+ id="text5438"><tspan
+ sodipodi:role="line"
+ id="tspan5440"
+ x="646.01691"
+ y="483.19366">X</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="426.67416"
+ y="502.38705"
+ id="text5442"><tspan
+ sodipodi:role="line"
+ id="tspan5444"
+ x="426.67416"
+ y="502.38705">Y</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+ x="537.27905"
+ y="408.43634"
+ id="text5446"><tspan
+ sodipodi:role="line"
+ id="tspan5448"
+ x="537.27905"
+ y="408.43634">Z</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend)"
+ d="m 295.72238,653.67967 c 73.50508,43.55925 73.50508,43.55925 73.50508,43.55925"
+ id="path5452" />
+ <path
+ id="path6414"
+ d="M 822.76434,413.10107 C 749.25926,369.54182 749.25926,369.54182 749.25926,369.54182"
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Mend)" />
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"
+ x="302.91263"
+ y="638.76996"
+ id="text6416"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6418"
+ x="302.91263"
+ y="638.76996">1 cm/yr</tspan></text>
+ <text
+ id="text6420"
+ y="393.13889"
+ x="798.05829"
+ style="font-size:32px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"
+ xml:space="preserve"
+ sodipodi:linespacing="125%"><tspan
+ y="393.13889"
+ x="798.05829"
+ id="tspan6422"
+ sodipodi:role="line">1 cm/yr</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="529.12622"
+ y="732.9447"
+ id="text6424"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6426"
+ x="529.12622"
+ y="732.9447">Elastic</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;line-height:125%"
+ x="533.0097"
+ y="837.79907"
+ id="text6428"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6430"
+ x="533.0097"
+ y="837.79907">Viscoelastic</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="701.94171"
+ y="641.68256"
+ id="text6432"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6434"
+ x="701.94171"
+ y="641.68256">Locked</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#0000ff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
+ x="700"
+ y="691.19714"
+ id="text6436"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan6438"
+ x="700"
+ y="691.19714">Creeping</tspan></text>
+ </g>
+</svg>
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/benchmarks/savageprescott/figs/model_3d.eps (from rev 16839, short/3D/PyLith/trunk/doc/userguide/benchmarks/savageprescott/figs/model_3d.eps)
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/boundaryconditions/boundaryconditions.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -1821,9 +1821,8 @@
For fault interfaces, dislocations in 1D correspond to fault-opening (and
closing), in 2D lateral-slip and fault opening, and in 3D lateral-slip,
reverse-slip, and fault opening.
- The current release of PyLith only supports kinematic (prescribed) slip.
- Support for fault constitutive models for frictional interface conditions
- will be supported in a future release (December 2008).
+ PyLith supports kinematic (prescribed) slip and dynamic (spontaneous) rupture
+ simulations.
\end_layout
\begin_layout Subsection
@@ -1991,7 +1990,7 @@
\begin_layout Plain Layout
\align center
\begin_inset Graphics
- filename figs/quad4cohesive.eps
+ filename figs/quad4cohesivekin.eps
\end_inset
@@ -2025,58 +2024,6 @@
\end_layout
-\begin_layout Standard
-\noindent
-\align center
-\begin_inset Float figure
-placement H
-wide false
-sideways false
-status open
-
-\begin_layout Plain Layout
-\align center
-\begin_inset Graphics
- filename figs/quad4cohesivekin.eps
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Plain Layout
-\begin_inset Caption
-
-\begin_layout Plain Layout
-Example of cohesive cell using Lagrange multipliers inserted into a mesh
- of two quadrilateral cells.
- The zero thickness cohesive cell (shown with dashed lines) controls slip
- on the fault.
- The Lagrange multipliers for a kinematic earthquake source are associated
- with the degrees of freedom for vertices 8 and 9.
- The constraint associated with vertex 8 controls the relative motion between
- vertices 2 and 6, and the constraint associated with vertex 9 controls
- the relative motion between vertices 3 and 7.
-
-\begin_inset CommandInset label
-LatexCommand label
-name "fig:fault:cohesive:quad4:kin"
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
\begin_layout Subsection
Fault Parameters
\end_layout
@@ -2667,7 +2614,7 @@
\end_layout
\begin_layout Subsubsection
-Kinematic Earthquake Rupture Parameters
+Kinematic Rupture Parameters
\end_layout
\begin_layout Standard
@@ -3752,6 +3699,22 @@
\end_layout
+\begin_layout Subsection
+Dynamic Earthquake Rupture
+\end_layout
+
+\begin_layout Subsubsection
+Governing Equations
+\end_layout
+
+\begin_layout Subsubsection
+Dynamic Rupture Parameters
+\end_layout
+
+\begin_layout Subsubsection
+Fault Constitutive Models
+\end_layout
+
\begin_layout Section
Gravitational Body Forces
\end_layout
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/cover (from rev 16839, short/3D/PyLith/trunk/doc/userguide/cover)
Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/coverimage.png
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/extending/extending.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -68,7 +68,13 @@
you set the spatial database to UniformDB, SimpleDB, or SCECCVMH you are
switching between different compatible components for a spatial database
facility.
- In this section we provide examples of how to extend PyLith for components
+ Modifying the governing equations to include other physical processes requires
+ changing the data structures associated with the solution and altering
+ the PyLith code.
+\end_layout
+
+\begin_layout Standard
+In this section we provide examples of how to extend PyLith for components
that users will most likely want to replace with their own custom versions.
You will need a familiarity with Python, Makefiles, and C++ to write your
own components.
@@ -718,7 +724,7 @@
\begin_layout LyX-Code
\family typewriter
---material.problem.homogeneous.material=pylith.materials.contrib.PlaneStrainState
+--timedependent.homogeneous.material=pylith.materials.contrib.PlaneStrainState
\end_layout
\begin_layout Standard
@@ -734,5 +740,296 @@
.
\end_layout
+\begin_layout Section
+\begin_inset CommandInset label
+LatexCommand label
+name "sec:Extending:FaultConstitutiveModels"
+
+\end_inset
+
+Fault Constitutive Models
+\end_layout
+
+\begin_layout Standard
+PyLith includes a two of the most widely used fault constitutive models,
+ but there are a wide range of models that have been proposed to explain
+ earthquake source processes.
+ In this example, we demonstrate how to extend PyLith by adding your own
+ fault constitutive model.
+ We implement a linear viscous fault constitutive model wherein the perturbation
+ in the coeficient of friction is linearly proportional to the slip rate.
+ This constitutive model,
+\family typewriter
+ViscousFriction
+\family default
+, is not particularly useful, but it illustrates the basic steps involved
+ in creating a fault constitutive model.
+ The sources files are included with the main PyLith source code in the
+
+\family typewriter
+templates/friction
+\family default
+ directory.
+ The
+\family typewriter
+README
+\family default
+ file in
+\family typewriter
+templates/friction
+\family default
+ provides detailed instructions for the various steps, and the source files
+ contain numerous comments to guide you through the customization process.
+\end_layout
+
+\begin_layout Standard
+Similar to our previous example of creating a customized bulk constitutive
+ model, the parameters are defined in the C++ code, not in the Pyre framework.
+ As a result, the Python object for the fault constitutive model component
+ is very simple and customization is limited to simply changing the names
+ of objects and labels.
+\end_layout
+
+\begin_layout Standard
+The properties and state variables used in the fault constitutive model
+ are set using arguments to the constuctor of the C++
+\family typewriter
+FrictionModel
+\family default
+ object, analogous to the
+\family typewriter
+ElasticMaterial
+\family default
+ object for bulk constitutive models.
+ In fact, both types of constitutive models used the same underlying C++
+ object (
+\family typewriter
+Metadata::ParamDescription
+\family default
+) to store the description of the parameters and state variables.
+ We define a number of constants at the top of the C++ file and use the
+
+\family typewriter
+Metadata
+\family default
+ object to define the properties and state variables.
+ The C++ object for the fault constitutive component includes a number of
+ functions that implement friction as well as several utility routines:
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_dbToProperties()
+\family default
+ Computes the physical properties used in the constitutive model equations
+ from the physical properties supplied in spatial databases.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_nondimProperties()
+\family default
+ Nondimensionalizes the physical properties used in the constitutive model
+ equations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_dimProperties()
+\family default
+ Dimensionalizes the physical properties used in the constitutive model
+ equations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_dbToStateVars()
+\family default
+ Computes the initial state variables used in the constitutive model equations
+ from the initial values supplied in spatial databases.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_nondimStateVars()
+\family default
+ Nondimensionalizes the state variables used in the constitutive model equations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_dimStateVars()
+\family default
+ Dimensionalizes the state variables used in the constitutive model equations.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_calcFriction()
+\family default
+ Computes the friction stress given the physical properties, state variables,
+ slip, slip rate, and normal traction.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+_updateStateVars()
+\family default
+ Updates the state variables given the physical properties, slip, slip rate,
+ and normal traction.
+\end_layout
+
+\begin_layout Standard
+If a constitutive model does not use state variables, then the state variable
+ routines are omitted.
+
+\end_layout
+
+\begin_layout Standard
+Because it is sometimes convenient to supply physical properties for a fault
+ constitutive model that are equivalent but different from the ones that
+ appear in the constitutive equations, each fault constitutive model component
+ has routines to convert the physical property parameters and state variables
+ a user specifies via spatial databases to the physical property properties
+ and state variables used in the constitutive model equations.
+
+\end_layout
+
+\begin_layout Standard
+The SWIG interface files for a fault constitutive component are setup in
+ the same manner as in the previous examples of creating a bulk constitutive
+ model or a customized spatial database component.
+ The ``main'' SWIG interface file (
+\family typewriter
+frictioncontrib.i
+\family default
+ in this case) sets up the Python module, and the SWIG interface file for
+ the component (
+\family typewriter
+ViscousFriction.i
+\family default
+ in this case) defines the functions that should be included in the Python
+ module.
+ Note that because the C++
+\family typewriter
+FrictionModel
+\family default
+ object defines a number of pure virtual methods (which merely specify the
+ interface for the functions and do not implement default behavior), we
+ must include many protected functions in the SWIG interface file.
+ If these are omitted, SWIG will give a warning indicating that some of
+ the functions remain abstract (i.e., some pure virtual functions defined
+ in the parent class
+\family typewriter
+FrictionModel
+\family default
+ were not implemented in the child class
+\family typewriter
+ViscousFriction
+\family default
+), and no constructor is created.
+ When this happens, you cannot create a
+\family typewriter
+ViscousFriction
+\family default
+ Python object.
+\end_layout
+
+\begin_layout Standard
+Once the Python, C++, and SWIG interface files are complete, you are ready
+ to configure and build the C++ library and Python module for the component.
+ Edit the
+\family typewriter
+Makefile.am
+\family default
+ file as necessary, then generate the configure script, run configure, and
+ then build and install the library and module (see the
+\family typewriter
+README
+\family default
+ file for detailed instructions).
+\end_layout
+
+\begin_layout Standard
+Because most functionality of the fault constitutive model component is
+ at the C++ level, properly constructed unit tests for the
+\family typewriter
+component
+\family default
+ should include tests for both the C++ code and Python code.
+ The C++ unit tests can be quite complex, and it is best to examine those
+ used for the fault constitutive models included with PyLith.
+ In this example we create the Python unit tests to verify that we can create
+ a
+\family typewriter
+ViscousFriction
+\family default
+ Python object and call some of the simple underlying C++ functions.
+ The source files are in the
+\family typewriter
+templates/friction/tests
+\family default
+ directory.
+ The
+\family typewriter
+testcontrib.py
+\family default
+ Python script runs the tests defined in
+\family typewriter
+TestViscousFriction.py
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Once you have built, installed, and tested the
+\family typewriter
+ViscousFriction
+\family default
+ component, it is time to use it in a simple example.
+ You can try using it in any of the 2D or 3D examples.
+ For the examples in
+\family typewriter
+examples/bar_shearwave/quad4, in shearwave_staticfriction.cfg
+\family default
+ replace the line
+\end_layout
+
+\begin_layout LyX-Code
+friction = pylith.friction.StaticFriction
+\end_layout
+
+\begin_layout Standard
+with the line
+\end_layout
+
+\begin_layout LyX-Code
+friction = pylith.friction.contrib.ViscousFriction
+\end_layout
+
+\begin_layout Standard
+or simply add the command line argument
+\end_layout
+
+\begin_layout LyX-Code
+
+\family typewriter
+--timedependent.interfaces.fault.friction=pylith.friction.contrib.ViscousFriction
+\end_layout
+
+\begin_layout Standard
+when running any of the friction examples.
+ You will also need to supply a corresponding spatial database with the
+ physical properties for the viscous friction constitutive model.
+\end_layout
+
\end_body
\end_document
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/governingeqns/governingeqns.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.4.1 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -59,8 +59,8 @@
\begin_layout Standard
We present here a brief derivation of the equations for both quasi-static
and dynamic computations.
- Since the general equations are the same (except for the absence of acceleratio
-n terms in the quasi-static case), we first derive these equations.
+ Since the general equations are the same (except for the absence of inertial
+ terms in the quasi-static case), we first derive these equations.
We then present solution methods for each specific case.
In all of our derivations, we use the notation described in Table
\begin_inset CommandInset ref
@@ -610,7 +610,7 @@
\begin_inset Formula $S_{f}$
\end_inset
-.
+ (we will consider the case of fault constitutive models in a later section).
Note that since both
\begin_inset Formula $T_{i}$
\end_inset
@@ -767,7 +767,7 @@
\begin_layout Standard
We formulate a set of algebraic equations using Galerkin's method.
- We consider a trial solution,
+ We consider (1) a trial solution,
\begin_inset Formula $\vec{u}$
\end_inset
@@ -776,7 +776,7 @@
\begin_inset Formula $S_{u}$
\end_inset
-, and a weighting function,
+, and (2) a weighting function,
\begin_inset Formula $\vec{\phi}$
\end_inset
@@ -807,16 +807,6 @@
We construct the weak form by computing the dot product of the wave equation
and weighting function and setting the integral over the domain to zero:
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Add fault constraint
-\end_layout
-
-\end_inset
-
-
\begin_inset Formula \begin{gather}
\int_{V}\left(\sigma_{ij,j}+f_{i}-\rho\ddot{u}_{i}\right)\phi_{i}\, dV=0\text{, or }\\
\int_{V}\sigma_{ij,j}\phi_{i}\: dV+\int_{V}f_{i}\phi_{i}\: dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\: dV=0.\end{gather}
@@ -842,16 +832,6 @@
\end_inset
Substituting into the weak form gives
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Add fault constraint
-\end_layout
-
-\end_inset
-
-
\begin_inset Formula \begin{equation}
-\int_{V}\sigma_{ij}\phi_{i,j}\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0.\end{equation}
@@ -870,17 +850,11 @@
\begin_inset Formula $S_{u}$
\end_inset
-,
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Add fault constraint
-\end_layout
-
+ (we will
+\begin_inset Formula $S_{f}$
\end_inset
-
+ in section ?? [TODO]),
\begin_inset Formula \begin{equation}
-\int_{V}\sigma_{ij}\phi_{i,j}\, dV+\int_{S_{T}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{S_{u}}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0,\end{equation}
@@ -894,26 +868,48 @@
\end_inset
so that the equation reduces to
-\begin_inset Note Greyedout
-status open
+\begin_inset Formula \begin{equation}
+-\int_{V}\sigma_{ij}\phi_{i,j}\: dV+\int_{S_{T}}T_{i}\phi_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0.\label{eq:elasticity:integral}\end{equation}
-\begin_layout Plain Layout
-Add fault constraint
-\end_layout
+\end_inset
+Now,
+\begin_inset Formula $\sigma_{ij}\phi_{i,j}$
\end_inset
+ is a scalar, so it is symmetric,
+\begin_inset Formula \begin{equation}
+\sigma_{ij}\phi_{i,j}=\sigma_{ji}\phi_{j,i},\end{equation}
+\end_inset
+
+and we know that
+\begin_inset Formula $\sigma_{ij}$
+\end_inset
+
+ is symmetric, so
\begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}\phi_{i,j}\: dV+\int_{S_{T}}T_{i}\phi_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0.\label{eq:elasticity:integral}\end{equation}
+\sigma_{ij}\phi_{i,j}=\sigma_{ij}\phi_{j,i},\end{equation}
\end_inset
+which means
+\begin_inset Formula \begin{equation}
+\phi_{i,j}=\phi_{j,i},\end{equation}
+
+\end_inset
+
+which we can write as
+\begin_inset Formula \begin{equation}
+\phi_{i,j}=\frac{1}{2}(\phi_{i,j}+\phi_{j,i}).\end{equation}
+
+\end_inset
+
We express the trial solution and weighting function as linear combinations
of basis functions,
\begin_inset Formula \begin{gather*}
-u=\sum_{m}a_{i}^{m}N^{m},\\
-\phi=\sum_{n}c_{i}^{n}N^{n}.\end{gather*}
+u_{i}=\sum_{m}a_{i}^{m}N^{m},\\
+\phi_{i}=\sum_{n}c_{i}^{n}N^{n}.\end{gather*}
\end_inset
@@ -934,8 +930,8 @@
Substituting in the expressions for the trial solution and weighting function
yields
\begin_inset Formula \begin{gather*}
--\int_{V}\sigma_{ij}\sum_{m}c_{i}^{m}N_{,j}^{m}\: dV+\int_{S_{T}}T_{i}\sum_{m}c_{i}^{m}N^{m}\, dS+\int_{V}f_{i}\sum_{m}c_{i}^{m}N^{m}\, dV-\int_{V}\rho\sum_{n}\ddot{a}_{i}^{n}N^{n}\sum_{m}c_{i}^{m}N^{m}\ dV=0,\text{ or}\\
-\sum_{m}c_{i}^{m}(-\int_{V}\sigma_{ij}N_{,j}^{m}\: dV+\int_{S_{T}}T_{i}N^{m}\, dS+\int_{V}f_{i}N^{m}\, dV-\int_{V}\rho\sum_{n}\ddot{a}_{i}^{n}N^{n}N^{m}\ dV)=0.\end{gather*}
+-\int_{V}\sigma_{ij}\sum_{n}c_{i}^{n}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}\sum_{n}c_{i}^{n}N^{n}\, dS+\int_{V}f_{i}\sum_{n}c_{i}^{n}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}\sum_{n}c_{i}^{n}N^{n}\ dV=0,\text{ or}\\
+\sum_{n}c_{i}^{n}(-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV)=0.\end{gather*}
\end_inset
@@ -950,7 +946,7 @@
\begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV=0.\label{eq:elasticity:integral-1}\end{equation}
+-\int_{V}\sigma_{ij}N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}N^{n}\, dS+\int_{V}f_{i}N^{n}\, dV-\int_{V}\rho\sum_{m}\ddot{a}_{i}^{m}N^{m}N^{n}\ dV=\vec{0}.\label{eq:elasticity:integral-1}\end{equation}
\end_inset
@@ -958,10 +954,30 @@
\begin_inset Formula $a_{i}^{m}$
\end_inset
-.
-
+ subject to
\end_layout
+\begin_layout Standard
+
+\family roman
+\series medium
+\shape up
+\size normal
+\emph off
+\bar no
+\noun off
+\color none
+\begin_inset Formula \begin{gather*}
+\sigma_{ij,j}+f_{i}=\rho\ddot{u_{i}}\text{ in }V,\\
+\sigma_{ij}n_{j}=T_{i}\text{ on }S_{T},\\
+u_{i}=u_{i}^{o}\text{ on }S_{u},\text{ and}\\
+R_{ki}(u_{i}^{+}-u_{i}^{-})=d_{k}\text{ on }S_{f},\end{gather*}
+
+\end_inset
+
+
+\end_layout
+
\begin_layout Subsection
Old
\end_layout
@@ -1000,16 +1016,6 @@
\end_inset
Substituting into the first term gives
-\begin_inset Note Greyedout
-status open
-
-\begin_layout Plain Layout
-Add fault constraint
-\end_layout
-
-\end_inset
-
-
\begin_inset Formula \begin{equation}
-\int_{V}\frac{1}{2}\sigma_{ij}\left(\phi_{i,j}+\phi_{j,i}\right)\, dV+\int_{S}\sigma_{ij}\phi_{i}n_{i}\, dS+\int_{V}f_{i}\phi_{i}\, dV-\int_{V}\rho\ddot{u}_{i}\phi_{i}\, dV=0.\end{equation}
@@ -1044,7 +1050,7 @@
,
\begin_inset Formula \begin{equation}
--\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV=\vec{0}.\label{eq:elasticity:integral:t+dt}\end{equation}
+-\int_{V}\sigma_{ij}(t+\Delta t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV=\vec{0}.\label{eq:elasticity:integral:quasistatic}\end{equation}
\end_inset
@@ -1059,7 +1065,7 @@
We employ numerical quadrature in the finite-element discretization and
replace the integrals with sums over the cells and quadrature points,
\begin_inset Formula \[
-R_{i}^{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t+\Delta t)N^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|+\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|,\]
+R_{i}^{n}=-\sum_{\text{vol cells}}\sum_{\text{quad pts}}\sigma_{ij}(x_{q},t+\Delta t)N_{,j}^{n}(x_{q})\: w_{q}|J_{cell}(x_{q})|+\sum_{\text{vol cells}}\sum_{\text{quad pt}s}f_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|+\sum_{\text{tract cells}}\sum_{\text{quad pts}}T_{i}(x_{q},t+\Delta t)N^{n}(x_{q})\, w_{q}|J_{cell}(x_{q})|,\]
\end_inset
@@ -1091,7 +1097,7 @@
Substituting into equation
\begin_inset CommandInset ref
LatexCommand eqref
-reference "eq:elasticity:integral:dynamic:t"
+reference "eq:elasticity:integral:quasistatic"
\end_inset
@@ -1111,6 +1117,12 @@
\begin_inset Formula \[
+\int_{V}d\sigma_{ij}(t)N_{,j}^{n}\ dV=-\int_{V}\sigma_{ij}(t)N_{,j}^{n}\: dV+\int_{S_{T}}T_{i}(t+\Delta t)N^{n}\, dS+\int_{V}f_{i}(t+\Delta t)N^{n}\, dV.\]
+
+\end_inset
+
+
+\begin_inset Formula \[
\int_{V}\frac{1}{2}d\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV=-\int_{V}\frac{1}{2}\sigma_{ij}(t)(\phi_{i,j}+\phi_{j,i})\: dV+\int_{S_{T}}T_{i}(t+\Delta t)\phi_{i}\, dS+\int_{V}f_{i}(t+\Delta t)\phi_{i}\, dV.\]
\end_inset
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/install/install.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -224,7 +224,7 @@
\begin_deeper
\begin_layout LyX-Code
-$ tar -xzf pylith-1.4.2-linux-i686.tgz
+$ tar -xzf pylith-1.5.0-linux-i686.tgz
\end_layout
\end_deeper
@@ -298,7 +298,7 @@
\begin_deeper
\begin_layout LyX-Code
-$ tar -xzf pylith-1.4.2-darwin-powerpc.tgz
+$ tar -xzf pylith-1.5.0-darwin-powerpc.tgz
\end_layout
\end_deeper
@@ -516,6 +516,8 @@
\family default
projects offer pre-built binaries for a variety of systems, including Mac
OS X.
+ A number of optional PETSc packages that provide additional preconditioners
+ and solvers require a Fortran compiler.
\end_layout
\begin_layout Subsubsection
@@ -952,7 +954,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf petsc-dev-pylith-1.4.2.tgz
+$ tar xzf petsc-dev-pylith-1.5.0.tgz
\end_layout
\begin_layout Standard
@@ -960,7 +962,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c petsc-dev-pylith-1.4.2.tgz | tar xf -
+$ gunzip -c petsc-dev-pylith-1.5.0.tgz | tar xf -
\end_layout
\begin_layout Standard
@@ -1569,7 +1571,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf nemesis-1.0.tar.gz
+$ tar xzf nemesis-1.0.1.tar.gz
\end_layout
\begin_layout Standard
@@ -1577,7 +1579,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c nemesis-1.0.tar.gz | tar xf -
+$ gunzip -c nemesis-1.0.1.tar.gz | tar xf -
\end_layout
\begin_layout Subsubsection
@@ -1649,7 +1651,7 @@
\begin_inset Newline newline
\end_inset
-$ cd nemesis-1.0
+$ cd nemesis-1.0.1
\end_layout
\begin_layout Enumerate
@@ -1782,7 +1784,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf proj-4.6.1.tar.gz
+$ tar xzf proj-4.7.0.tar.gz
\end_layout
\begin_layout Standard
@@ -1790,13 +1792,13 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c proj-4.6.1.tar.gz | tar xf -
+$ gunzip -c proj-4.7.0.tar.gz | tar xf -
\end_layout
\begin_layout Standard
Download the datum shift archive and unpack it in the
\family typewriter
-proj-4.6.0/nad
+proj-4.7.0/nad
\family default
directory using the
\family typewriter
@@ -1806,7 +1808,7 @@
\end_layout
\begin_layout LyX-Code
-$ cd proj-4.6.1/nad$ unzip proj-datumgrid-1.4.zip
+$ cd proj-4.6.1/nad$ unzip proj-datumgrid-1.5.zip
\end_layout
\begin_layout Standard
@@ -1839,7 +1841,7 @@
\begin_inset Newline newline
\end_inset
-$ cd proj-4.6.1
+$ cd proj-4.7.0
\end_layout
\begin_layout Enumerate
@@ -1965,7 +1967,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf numpy-1.3.0.tar.gz
+$ tar xzf numpy-1.4.1.tar.gz
\end_layout
\begin_layout Standard
@@ -1973,7 +1975,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c numpy-1.3.0.tar.gz | tar xf -
+$ gunzip -c numpy-1.4.1.tar.gz | tar xf -
\end_layout
\begin_layout Subsubsection
@@ -1999,7 +2001,7 @@
\begin_inset Newline newline
\end_inset
-$ cd numpy-1.3.0
+$ cd numpy-1.4.1
\end_layout
\begin_layout Enumerate
@@ -2039,6 +2041,8 @@
PATH
\family default
.
+ You can customize the BLAS and LAPACK libraries used in building numpy
+ by editing the site.cfg file.
\end_layout
\begin_layout Subsection
@@ -2080,6 +2084,7 @@
\end_inset
.
+ Versions newer than v0.3.5 have are not compatible with PyLith.
Download the source archive and unpack it using the
\family typewriter
tar
@@ -2088,7 +2093,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf FIAT-0.3.4.tar.gz
+$ tar xzf FIAT-0.3.5.tar.gz
\end_layout
\begin_layout Standard
@@ -2096,7 +2101,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c FIAT-0.3.4.tar.gz | tar xf -
+$ gunzip -c FIAT-0.3.5.tar.gz | tar xf -
\end_layout
\begin_layout Subsubsection
@@ -2122,7 +2127,7 @@
\begin_inset Newline newline
\end_inset
-$ cd FIAT-0.3.4
+$ cd FIAT-0.3.5
\end_layout
\begin_layout Enumerate
@@ -2215,7 +2220,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf spatialdata-0.5.tgz
+$ tar xzf spatialdata-0.5.2.tgz
\end_layout
\begin_layout Standard
@@ -2223,7 +2228,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c spatialdata-0.5.tgz | tar xf -
+$ gunzip -c spatialdata-0.5.2.tgz | tar xf -
\end_layout
\begin_layout Subsubsection
@@ -2431,7 +2436,7 @@
\end_layout
\begin_layout LyX-Code
-$ tar xzf pylith-1.4.2.tgz
+$ tar xzf pylith-1.5.0.tgz
\end_layout
\begin_layout Standard
@@ -2439,7 +2444,7 @@
\end_layout
\begin_layout LyX-Code
-$ gunzip -c pylith-1.4.2.tgz | tar xf -
+$ gunzip -c pylith-1.5.0.tgz | tar xf -
\end_layout
\begin_layout Subsubsection
@@ -2511,7 +2516,7 @@
\begin_inset Newline newline
\end_inset
-$ cd pylith-1.4.2
+$ cd pylith-1.5.0
\end_layout
\begin_layout Enumerate
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/intro/intro.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.3 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -106,31 +106,27 @@
At present, mesh information may be provided using a simple ASCII file
(PyLith mesh ASCII format) or imported from CUBIT or LaGriT, two widely-used
meshing packages.
- The elements currently available include a linear bar in 1D, linear triangles
- and quadrilaterals in 2D, and linear tetrahedra and hexahedra in 3D.
+ The elements currently available include a linear bar in 1-D, linear triangles
+ and quadrilaterals in 2-D, and linear tetrahedra and hexahedra in 3-D.
Higher-order (quadratic) elements are also supported, but it is not presently
possible to create a quadratic mesh from the linear meshes provided by
most meshing packages.
Materials presently available include isotropic elastic, linear Maxwell
- viscoelastic (3D only), generalized Maxwell viscoelastic (3D only), and
- power-law viscoelastic (3D only).
+ viscoelastic (2-D and 3-D), generalized Maxwell viscoelastic (3-D only),
+ power-law viscoelastic (3-D only), and Drucker-Prager elastoplastic (3-D
+ only).
Boundary conditions include Dirichlet (prescribed displacements and velocities)
, Neumann (traction), point forces, and absorbing boundaries.
- Cohesive elements are used to implement slip across interior surfaces (faults).
- At present, only kinematically-specified fault slip is available.
- In the near future, we will provide several constitutive models for cohesive
- elements, which will allow slip to occur using various fault constitutive
- models.
+ Cohesive elements are used to implement slip across interior surfaces (faults)
+ with both kinematically-specified fault slip and slip governed by fault
+ constitutive models.
\end_layout
\begin_layout Standard
PyLith is under active development and we expect a number of additions and
improvements in the near future.
- Likely enhancements will include fault constitutive models with cohesive
- (fault) cells, additional bulk constitutive models, automatic generation
- of higher-order elements from linear elements, and the generation of Green's
- functions to be used in inversions.
- Several of these features should be available by Jan 2010.
+ Likely enhancements will include additional bulk and fault constitutive
+ models and generation of Green's functions to be used in inversions.
\end_layout
\begin_layout Section
@@ -333,8 +329,9 @@
simple shear, and slip on through-going faults, have been used to test
the code.
Additionally, we have run the Southern California Earthquake Center crustal
- deformation benchmarks for strike-slip and reverse-slip to determine the
- relative local and global error (see Chapter
+ deformation and several of the spontaneous rupture benchmarks for strike-slip
+ and reverse-slip to determine the relative local and global error (see
+ Chapter
\begin_inset CommandInset ref
LatexCommand ref
reference "cha:Benchmarks"
Deleted: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/pylith_cover.psd
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/runpylith/runpylith.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.3 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.4 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -813,6 +813,20 @@
\end_layout
\begin_layout Standard
+ADD STUFF HERE
+\begin_inset Note Greyedout
+status open
+
+\begin_layout Plain Layout
+ADD STUFF HERE ABOUT reorder_mesh AND OTHER MESH GENERATOR SETTINGS
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
Geometrical and topological information for the finite element mesh may
be provided by exporting an EXODUS format file from CUBIT, by exporting
a GMV file and an accompanying Pset file from LaGriT, or by specifying
@@ -1726,7 +1740,7 @@
<lyxtabular version="3" rows="9" columns="3">
<features>
<column alignment="left" valignment="top" width="2in">
-<column alignment="center" valignment="middle" width="0.6in">
+<column alignment="center" valignment="middle" width="0.75in">
<column alignment="left" valignment="top" width="3in">
<row>
<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
@@ -1807,7 +1821,7 @@
\begin_inset Newline newline
\end_inset
-positive_definite
+type
\end_layout
\end_inset
@@ -1817,8 +1831,8 @@
\begin_layout Plain Layout
-\shape italic
-0
+\emph on
+nonzero
\end_layout
\end_inset
@@ -1827,7 +1841,7 @@
\begin_inset Text
\begin_layout Plain Layout
-Turn off positive definite shifting.
+Turn on nonzero shifting.
\end_layout
\end_inset
@@ -1840,11 +1854,7 @@
\begin_layout Plain Layout
\family typewriter
-sub_pc_factor_shift_
-\begin_inset Newline newline
-\end_inset
-
-nonzero
+ksp_max_it
\end_layout
\end_inset
@@ -1853,7 +1863,9 @@
\begin_inset Text
\begin_layout Plain Layout
-n/a
+
+\emph on
+100
\end_layout
\end_inset
@@ -1862,7 +1874,7 @@
\begin_inset Text
\begin_layout Plain Layout
-Turn on nonzero shifting.
+Maximum number of iterations.
\end_layout
\end_inset
@@ -1875,7 +1887,7 @@
\begin_layout Plain Layout
\family typewriter
-ksp_max_it
+ksp_gmres_restart
\end_layout
\end_inset
@@ -1884,9 +1896,7 @@
\begin_inset Text
\begin_layout Plain Layout
-
-\emph on
-100
+50
\end_layout
\end_inset
@@ -1895,7 +1905,7 @@
\begin_inset Text
\begin_layout Plain Layout
-Maximum number of iterations.
+Number of iterations after which Gram-Schmidt orthogonalization is restarted.
\end_layout
\end_inset
@@ -1908,7 +1918,7 @@
\begin_layout Plain Layout
\family typewriter
-ksp_gmres_restart
+ksp_rtol
\end_layout
\end_inset
@@ -1917,7 +1927,9 @@
\begin_inset Text
\begin_layout Plain Layout
-50
+
+\shape italic
+1.0e-08
\end_layout
\end_inset
@@ -1926,7 +1938,7 @@
\begin_inset Text
\begin_layout Plain Layout
-Number of iterations after which Gram-Schmidt orthogonalization is restarted.
+Convergence tolerance for relative decrease in residual norm.
\end_layout
\end_inset
@@ -1937,9 +1949,7 @@
\begin_inset Text
\begin_layout Plain Layout
-
-\family typewriter
-ksp_rtol
+ksp_atol
\end_layout
\end_inset
@@ -1949,8 +1959,8 @@
\begin_layout Plain Layout
-\shape italic
-1.0e-08
+\emph on
+1.0e-15
\end_layout
\end_inset
@@ -1959,7 +1969,7 @@
\begin_inset Text
\begin_layout Plain Layout
-Convergence tolerance for relative decrease in residual norm.
+Convergence tolerance for absolute value in residual norm.
\end_layout
\end_inset
@@ -2060,7 +2070,15 @@
Implicit time stepping should be used for quasi-static problems, whereas
explicit time stepping should be used for dynamic problems which include
inertial terms.
- An example of setting the formulation facility to the implicit time stepping
+ Two options for explicit time-stepping are available: using a full, consistent
+ Jacobian matrix and a lumped Jacobian matrix.
+ In the lumped Jacobian formulation, the Jacobian is a diagonal matrix and
+ stored as a vector, and PyLith employs an optimized built-in solver rather
+ than a PETSc solver.
+\end_layout
+
+\begin_layout Standard
+An example of setting the formulation facility to the implicit time stepping
component is:
\end_layout
@@ -2085,6 +2103,19 @@
formulation = pylith.problems.Explicit
\end_layout
+\begin_layout Standard
+An example of setting the formulation facility to the lumped explicit time
+ stepping component is:
+\end_layout
+
+\begin_layout LyX-Code
+[pylithapp.timedependent]
+\end_layout
+
+\begin_layout LyX-Code
+formulation = pylith.problems.ExplicitLumped
+\end_layout
+
\begin_layout Subsection
Time-Stepping Formulation
\end_layout
@@ -2127,9 +2158,10 @@
\end_layout
\begin_layout Description
-split_fields Split solution field into a displacement portion (field 0)
- and a Lagrange multiplier portion (field 1) to permit application of sophistica
-ted PETSc preconditions (default is false; for expert users only).
+split_fields Split solution field into a displacement portion (fields 0..ndim-1)
+ and a Lagrange multiplier portion (field ndim) to permit application of
+ sophisticated PETSc preconditioners (default is false; for expert users
+ only).
\end_layout
\begin_layout Standard
Copied: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/shearwave (from rev 16839, short/3D/PyLith/trunk/doc/userguide/tutorials/shearwave)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/tutorials/tutorials.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,4 +1,4 @@
-#LyX 1.6.2 created this file. For more info see http://www.lyx.org/
+#LyX 1.6.5 created this file. For more info see http://www.lyx.org/
\lyxformat 345
\begin_document
\begin_header
@@ -90,7 +90,7 @@
\color none
For more complex tutorials, you will also need either CUBIT
\begin_inset Flex URL
-status collapsed
+status open
\begin_layout Plain Layout
@@ -223,185 +223,155 @@
\end_layout
\begin_layout Section
-Additional Examples
+Shear Wave in a Bar
\end_layout
\begin_layout Standard
-The
-\family typewriter
-examples
-\family default
- directory also contains other examples which are not described in this
- chapter.
- The files associated with these examples contain comments to explain the
- problems they solve.
- Once you understand the examples described in detail in the previous sections
- of this chapter, you should have little trouble understanding these additional
- ones.
- Currently, these problems are very simple cases of using dynamic time stepping
- with absorbing boundaries to simulate shear wave propagation in a 2D or
- 3D bar.
- More complex examples of wave propagation problems will be included in
- future releases.
-
+This suite of examples focuses on the dynamics of a shear wave propagating
+ down an 8 km long bar with a 400 m wide cross-section.
+ Motion is limited to shear deformation by fixing the longitudinal degree
+ of freedom.
+ For each cell type (tri3, quad4, tet4, and hex8) we generate a shear wave
+ using a kinematic fault rupture with simultaneous slip over the fault surface,
+ which we place at the center of the bar.
+ The discretization size is 200 m in all cases.
+ The slip time histories follows the integral of Brune's far-field time
+ function with slip initiating at 0.1 s, a left-lateral final slip of 1.0
+ m, and a rise time of 2.0 s.
+ The shear wave speed in the bar is 1.0 km/s, so the shear wave reaches each
+ end of the bar at 4.1 s.
+ Absorbing boundaries on the ends of the bar prevent significant reflections.
+ The bar comes to a rest with a static offset.
\end_layout
\begin_layout Standard
\noindent
\align center
-\begin_inset Float table
-placement H
+\begin_inset Float figure
wide false
sideways false
status open
\begin_layout Plain Layout
\align center
-\begin_inset Tabular
-<lyxtabular version="3" rows="5" columns="2">
-<features>
-<column alignment="left" valignment="top" width="1.75in">
-<column alignment="left" valignment="top" width="4in">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
+\begin_inset Graphics
+ filename figs/bar.eps
+ lyxscale 50
-\begin_layout Plain Layout
-
-\series bold
-Directory
-\end_layout
-
\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-\begin_layout Plain Layout
-\series bold
-Description
\end_layout
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
\begin_layout Plain Layout
+\begin_inset Caption
-\family typewriter
-bar_shearwave/tri3
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
\begin_layout Plain Layout
-Wave propagation in a 2D bar discretized with triangular cells
-\end_layout
+Domain for shear wave propagation in a 8.0 km bar with 400 m cross-section.
+ We generate a shear wave via slip on a fault located in the middle of the
+ bar while limiting deformation to the transverse direction.
+\begin_inset CommandInset label
+LatexCommand label
+name "fig:shearwave:domain"
\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-\begin_layout Plain Layout
-\family typewriter
-bar_shearwave/quad4
\end_layout
\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-\begin_layout Plain Layout
-Wave propagation in a 2D bar discretized with quadrilateral cells
+
\end_layout
\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-\begin_layout Plain Layout
-\family typewriter
-bar_shearwave/tet4
\end_layout
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Wave propagation in a 3D bar discretized with tetrahedral cells
+\begin_layout Standard
+For the bar discretized with quad4 cells we also consider the fault subjected
+ to frictional sliding controlled by static friction, linear slip-weakening
+ friction, and rate- and state-friction.
+ We use initial tractions applied to the fault to drive the dislocation
+ and generate the shear wave.
+ Because the fault tractions are constant in time, they continue to drive
+ the motion even after the shear wave reaches the absorbing boundary, leading
+ to a steady state solution with uniform shear deformation in the bar and
+ a constant slip rate on the fault.
+
\end_layout
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "shearwave/tri3.lyx"
+
\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
-bar_shearwave/hex8
-\end_layout
+\begin_inset CommandInset include
+LatexCommand input
+filename "shearwave/tet4.lyx"
\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
-Wave propagation in a 3D bar discretized with hexahedral cells
-\end_layout
-\end_inset
-</cell>
-</row>
-</lyxtabular>
+\begin_inset CommandInset include
+LatexCommand input
+filename "shearwave/hex8.lyx"
\end_inset
-\end_layout
+\begin_inset CommandInset include
+LatexCommand input
+filename "shearwave/quad4.lyx"
-\begin_layout Plain Layout
-\begin_inset Caption
+\end_inset
-\begin_layout Plain Layout
-\begin_inset CommandInset label
-LatexCommand label
-name "tab:additional:examples"
-\end_inset
+\end_layout
-Additional examples distributed with the PyLith source code.
+\begin_layout Section
+Additional Examples
\end_layout
-\end_inset
+\begin_layout Standard
+The
+\family typewriter
+examples
+\family default
+ directory also contains an example of using PyLith to compute Green's functions
+ associated with slip at points on a fault surface in the
+\family typewriter
+greensfns
+\family default
+ directory.
+ The files associated with this example contain comments to explain how
+ the simulation is setup.
+ Once you understand the examples described in detail in the previous sections
+ of this chapter, you should have little trouble understanding this additional
+ one.
+\end_layout
+\begin_layout Standard
+The CIG subversion software repository
+\begin_inset Flex URL
+status collapsed
+\begin_layout Plain Layout
+
+http://geodynamics.org/svn/cig/short/3D/PyLith/benchmarks/trunk
\end_layout
\end_inset
-
+ contains input files for a number of community benchmarks.
+ Most of the benchmarks include complete sets of PyLith input files.
+ Some of the dynamic benchmarks do not include the mesh files because they
+ are so large; instead they include the CUBIT journal files that can be
+ used to generate the meshes.
\end_layout
\end_body
Modified: short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/doc/userguide/userguide.lyx 2010-05-30 21:53:47 UTC (rev 16840)
@@ -66,7 +66,7 @@
\noindent
\align center
\begin_inset Graphics
- filename pylith_cover.pdf
+ filename cover/cover.pdf
width 75page%
\end_inset
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/box_hex8_1000m.exo
===================================================================
(Binary files differ)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/mesh/mesh_hex8_1000m.jou 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,7 +44,7 @@
group "face_xpos" add node in surface 20
group "face_xpos" add node in surface 28
nodeset 11 group face_xpos
-nodeset 11 name "face xpos"
+nodeset 11 name "face_xpos"
# ----------------------------------------------------------------------
# Create nodeset for -x face
@@ -52,7 +52,7 @@
group "face_xneg" add node in surface 30
group "face_xneg" add node in surface 38
nodeset 12 group face_xneg
-nodeset 12 name "face xneg"
+nodeset 12 name "face_xneg"
# ----------------------------------------------------------------------
# Create nodeset for +y face
@@ -62,7 +62,7 @@
group "face_ypos" add node in surface 33
group "face_ypos" add node in surface 35
nodeset 13 group face_ypos
-nodeset 13 name "face ypos"
+nodeset 13 name "face_ypos"
# ----------------------------------------------------------------------
# Create nodeset for -y face
@@ -72,7 +72,7 @@
group "face_yneg" add node in surface 31
group "face_yneg" add node in surface 37
nodeset 14 group face_yneg
-nodeset 14 name "face yneg"
+nodeset 14 name "face_yneg"
# ----------------------------------------------------------------------
# Create nodeset for -z face
@@ -80,7 +80,7 @@
group "face_zneg" add node in surface 12
group "face_zneg" add node in surface 16
nodeset 15 group face_zneg
-nodeset 15 name "face zneg"
+nodeset 15 name "face_zneg"
# ----------------------------------------------------------------------
# Create nodeset for -z face w/o fault
@@ -88,7 +88,7 @@
group "face_zneg_nofault" add node in face_zneg
group "face_zneg_nofault" remove node in fault
nodeset 16 group face_zneg_nofault
-nodeset 16 name "face zneg nofault"
+nodeset 16 name "face_zneg_nofault"
# ----------------------------------------------------------------------
# Create nodeset for +z face
@@ -96,7 +96,7 @@
group "face_zpos" add node in surface 10
group "face_zpos" add node in surface 17
nodeset 17 group face_zpos
-nodeset 17 name "face zpos"
+nodeset 17 name "face_zpos"
# ----------------------------------------------------------------------
# Export exodus file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,6 +1,10 @@
# -*- Python -*-
[pylithapp]
+# This is not a self-contained simulation configuration file. This
+# file only specifies the general parameters common to the simulations
+# in this directory.
+
# ----------------------------------------------------------------------
# journal
# ----------------------------------------------------------------------
@@ -16,8 +20,6 @@
fiatlagrange = 1
pylithapp = 1
materials = 1
-powerlaw3d = 1
-##implicit = 1
# ----------------------------------------------------------------------
# mesh_generator
@@ -45,25 +47,20 @@
[pylithapp.timedependent]
# Set materials to an array of 2 materials:
-# 'elastic' and 'inelastic'
-materials = [elastic,inelastic]
+# 'upper_crust' and 'lower_crust'
+materials = [upper_crust,lower_crust]
-# Change from default material (elastic, isotropic, 3-D material) to
-# Maxwell viscoelastic, isotropic 3-D material.
-materials.inelastic = pylith.materials.MaxwellIsotropic3D
-
-[pylithapp.timedependent.materials.elastic]
-label = Elastic material
+[pylithapp.timedependent.materials.upper_crust]
+label = Upper crust material
id = 1
db_properties.iohandler.filename = spatialdb/mat_elastic.spatialdb
quadrature.cell = pylith.feassemble.FIATLagrange
quadrature.cell.dimension = 3
-# We do not define the database info for the inelastic material, since
-# a different database type may be used for some examples.
-[pylithapp.timedependent.materials.inelastic]
-label = Inelastic material
+[pylithapp.timedependent.materials.lower_crust]
+label = Lower crust material
id = 2
+db_properties.iohandler.filename = spatialdb/mat_elastic.spatialdb
quadrature.cell = pylith.feassemble.FIATLagrange
quadrature.cell.dimension = 3
@@ -76,25 +73,29 @@
# Preconditioner settings.
pc_type = asm
-sub_pc_factor_shift_type = none
+sub_pc_factor_shift_type = nonzero
# Convergence parameters.
ksp_rtol = 1.0e-8
-ksp_max_it = 500
+ksp_atol = 1.0e-15
+ksp_max_it = 100
ksp_gmres_restart = 50
-# Linear solution logging options.
+# Linear solver monitoring options.
ksp_monitor = true
ksp_view = true
ksp_converged_reason = true
-# Nonlinear solution logging options.
+# Nonlinear solver monitoring options.
+snes_rtol = 1.0e-8
+snes_atol = 1.0e-15
+snes_max_it = 100
snes_monitor = true
snes_view = true
snes_converged_reason = true
-# PETSc run summary -- useful for performance information.
+# PETSc summary -- useful for performance information.
log_summary = true
-# Hopefully not necessary.
+# Uncomment to launch gdb when starting PyLith.
# start_in_debugger = true
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -2,7 +2,7 @@
//
// This spatial database specifies the distribution of slip on the
// fault surface. In this case we prescribe a piecewise linear, depth
-// dependent distribution of slip. The slip is 2.0 m right-lateral
+// dependent distribution of slip. The slip is 2.0 m left-lateral
// with 0.25 m of reverse slip at the surface with a linear taper from
// 2.0 m to 0.0 m from -2 km to -4 km.
//
@@ -26,6 +26,6 @@
// (4) left-lateral-slip (m) (right-lateral is negative)
// (5) reverse-slip (m)
// (6) fault-opening (m)
-0.0 0.0 0.0 -2.00 0.25 0.00
-0.0 0.0 -2.0 -2.00 0.00 0.00
+0.0 0.0 0.0 2.00 0.25 0.00
+0.0 0.0 -2.0 2.00 0.00 0.00
0.0 0.0 -4.0 0.00 0.00 0.00
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip_rupture.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip_rupture.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/finalslip_rupture.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,7 +1,7 @@
// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
//
// This spatial database specifies the distribution of slip on the
-// fault surface. In this case we impose 4.0 m of right-lateral slip
+// fault surface. In this case we impose 4.0 m of left-lateral slip
// for z >= -2.0 km with zero slip for z < -2.0 km. There is no reverse
// slip or fault opening.
//
@@ -25,7 +25,7 @@
// (4) left-lateral-slip (m) (right-lateral is negative)
// (5) reverse-slip (m)
// (6) fault-opening (m)
-0.0 0.0 0.00 -4.0 0.0 0.0
-0.0 0.0 -2.00 -4.0 0.0 0.0
+0.0 0.0 0.00 4.0 0.0 0.0
+0.0 0.0 -2.00 4.0 0.0 0.0
0.0 0.0 -2.01 0.0 0.0 0.0
0.0 0.0 -4.00 0.0 0.0 0.0
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_axial.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -4,9 +4,6 @@
// displacement field for Dirichlet boundary conditions associated
// with axial displacements on -x and +x
//
-// dof-0: Ux(x) = 0
-// dof-1: Uy(x) = 1.0 m * x / 3 km
-// dof-2: Uz(x) = 0
//
#SPATIAL.ascii 1
SimpleDB {
@@ -28,5 +25,5 @@
// (4) Ux (m)
// (5) Uy (m)
// (6) Uz (m)
--3.0 0.0 0.0 -1.0 0.0 0.0
-+3.0 0.0 0.0 1.0 0.0 0.0
+-3.0 0.0 0.0 +1.0 0.0 0.0
++3.0 0.0 0.0 -1.0 0.0 0.0
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/fixeddisp_shear.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -4,10 +4,6 @@
// displacement field for Dirichlet boundary conditions associated
// with shear in the xy plane.
//
-// dof-0: Ux(x) = 0
-// dof-1: Uy(x) = 1.0 m * x / 3 km
-// dof-2: Uz(x) = 0
-//
#SPATIAL.ascii 1
SimpleDB {
num-values = 3
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_druckerprager.spatialdb (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/spatialdb/mat_druckerprager.spatialdb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_druckerprager.spatialdb (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/mat_druckerprager.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,30 @@
+// -*- C++ -*- (tell Emacs to use C++ mode for syntax highlighting)
+//
+// This spatial database specifies the distribution of material
+// properties for a power-law viscoelastic material. In this case,
+// the material properties are uniform.
+//
+#SPATIAL.ascii 1
+SimpleDB {
+ num-values = 6 // number of material property values
+ value-names = density vs vp friction-angle cohesion dilatation-angle // names of the material property values
+ value-units = kg/m**3 m/s m/s degree kPa degree // units
+ num-locs = 1 // number of locations
+ data-dim = 0
+ space-dim = 3
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 3
+ }
+}
+// Columns are
+// (1) x coordinate (m)
+// (2) y coordinate (m)
+// (3) z coordinate (m)
+// (4) density (kg/m^3)
+// (5) vs (m/s)
+// (6) vp (m/s)
+// (7) friction-angle (degree)
+// (8) cohesion (kPa)
+// (8) dilatation-angle (degree)
+0.0 0.0 0.0 2500.0 3000.0 5291.502622129181 30.0 5000.0 30.0
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/sliprate_creep.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/sliprate_creep.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/spatialdb/sliprate_creep.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -2,7 +2,7 @@
//
// This spatial database specifies the distribution of slip rate on
// the fault surface for a constant slip rate time function. In this
-// case we specify a uniform slip rate of -2.0 cm/yr
+// case we specify a uniform slip rate of 2.0 cm/yr
// (6.3376175628057904e-10 m/s) for z < -2.0 km and zero slip for z >=
// -2.0 km. There is no reverse-slip or fault opening.
//
@@ -28,5 +28,5 @@
// (6) fault-opening rate (m/s)
0.0 0.0 0.00 0.00 0.0 0.0
0.0 0.0 -2.00 0.00 0.0 0.0
-0.0 0.0 -2.01 -2.00 0.0 0.0
-0.0 0.0 -4.00 -2.00 0.0 0.0
+0.0 0.0 -2.01 2.00 0.0 0.0
+0.0 0.0 -4.00 2.00 0.0 0.0
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step01.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,6 +1,22 @@
# -*- Python -*-
[pylithapp]
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a purely elastic static problem using only Dirichlet
+# (displacement) boundary conditions. The lower (minimum z) boundary is
+# held fixed in the z-direction. On the positive and negative x-boundaries,
+# displacements are applied corresponding to 1 m of shear displacement in
+# the positive and negative y-directions, and 1 m of axial (x) compression
+# on each side.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
# This is not a self-contained simulation configuration file. This
# file only specifies parameters specific to tutorial step01.
# The general parameters are specificed in the pylithapp.cfg
@@ -9,7 +25,7 @@
# To run the simulation:
# pylith step01.cfg
#
-# Output will be directed to directory step01.
+# Output will be directed to the directory step01.
# ----------------------------------------------------------------------
# problem
@@ -23,53 +39,48 @@
# We will output the solution over the domain and the ground surface.
output = [domain,subdomain]
-# Set subdomain component to OutputSolnSubset (subset of domain).
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
output.subdomain = pylith.meshio.OutputSolnSubset
# ----------------------------------------------------------------------
-# materials
-# ----------------------------------------------------------------------
-
-# We specifically define the database info for the inelastic material
-# for each model, since the type of spatialdb can be different.
-
-[pylithapp.timedependent.materials.inelastic]
-db_properties.iohandler.filename = spatialdb/mat_maxwell.spatialdb
-
-# ----------------------------------------------------------------------
# boundary conditions
# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x and y degrees of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face.
+#
# For x_pos and x_neg, we change the database from ZeroDispDB (which
-# specifies a zero value everywhere) to SimpleDB (which uses a data file
-# to specify a spatial variation).
+# specifies a zero value) to SimpleDB (which uses a data file to
+# specify a spatial variation).
+#
# For z_neg, we keep the default ZeroDispDB, since we just want zero
# z-displacements on that boundary.
+#
-# Set the parameters for Dirichlet boundary conditions applied on the
-# +x and -x faces of the box.
+# The label corresponds to the name of the nodeset in CUBIT.
-# We fix the x and y degrees of freedom on the +x and -x faces, and
-# fix the z degree of freedom on the bottom face.
-
-# The label corresponds to the nodeset ID in CUBIT.
-
+# +x face
[pylithapp.timedependent.bc.x_pos]
bc_dof = [0, 1]
-label = 11
+label = face_xpos
db_initial = spatialdata.spatialdb.SimpleDB
db_initial.label = Dirichlet BC on +x
db_initial.iohandler.filename = spatialdb/fixeddisp_axial_shear.spatialdb
+# -x face
[pylithapp.timedependent.bc.x_neg]
bc_dof = [0, 1]
-label = 12
+label = face_xneg
db_initial = spatialdata.spatialdb.SimpleDB
db_initial.label = Dirichlet BC on -x
db_initial.iohandler.filename = spatialdb/fixeddisp_axial_shear.spatialdb
+# -z face
[pylithapp.timedependent.bc.z_neg]
bc_dof = [2]
-label = 15
+label = face_zneg
db_initial.label = Dirichlet BC on -z
# ----------------------------------------------------------------------
@@ -81,19 +92,18 @@
# Give basename for VTK domain output of solution over ground surface.
[pylithapp.problem.formulation.output.subdomain]
-label = 17 ; nodeset for subdomain
+# Name of nodeset for ground surface.
+label = face_zpos
writer.filename = step01/step01-groundsurf.vtk
-# Give basename for VTK output of elastic state variables.
-[pylithapp.timedependent.materials.elastic.output]
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step01/step01-elastic.vtk
+writer.filename = step01/step01-upper_crust.vtk
-# Give basename for VTK output of inelastic state variables.
-[pylithapp.timedependent.materials.inelastic.output]
-# Default (elastic) info and data fields do not include viscoelastic
-# information, so we include it here.
-cell_info_fields = [density,mu,lambda,maxwell_time]
-cell_data_fields = [total_strain,stress,viscous_strain]
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
cell_filter = pylith.meshio.CellFilterAvgMesh
-writer.filename = step01/step01-inelastic.vtk
+writer.filename = step01/step01-lower_crust.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step03.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step03.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,130 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a purely elastic static problem using Dirichlet (displacement)
+# boundary conditions and slip on a vertical fault, where the amount of
+# slip increases with depth. On the +x and -x boundaries, the x and
+# y-displacements are held fixed, while on the -z boundary, the
+# z-displacements are held fixed. The fault slip is predominantly
+# left-lateral, with 2 m of slip applied between 0 and 2 km depth,
+# tapering linearly to 0 m at the base of the model (4 km depth).
+# A small amount of reverse slip (0.25 m) is applied at the surface,
+# tapering to 0 m at 2 km depth.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step03.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step03.cfg
+#
+# Output will be directed to directory step03.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (subset of domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# -x, +x, and -z faces of the box.
+#
+# We fix the x and y degrees of freedom on the -x and +x faces, and
+# fix the z degree of freedom on the bottom (-z) face.
+#
+# For all boundaries, we retain the default ZeroDispDB, which specifies
+# a zero value.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+# Set the type of fault interface condition.
+[pylithapp.timedependent.interfaces]
+fault = pylith.faults.FaultCohesiveKin
+
+# Set the parameters for the fault interface condition.
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# The slip time and final slip are defined in spatial databases.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+slip.iohandler.filename = spatialdb/finalslip.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain.writer]
+filename = step03/step03.vtk
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+label = face_zpos ; Name of nodeset for ground surface.
+writer.filename = step03/step03-groundsurf.vtk
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+writer.filename = step03/step03-fault.vtk
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step03/step03-upper_crust.vtk
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step03/step03-lower_crust.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step04.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step04.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,160 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem with velocity boundary conditions.
+# Velocities in the + and - y-directions are applied on the + and -
+# x-faces, and the x-displacements are held fixed on those boundaries.
+# The z-displacements are held fixed on the -z face.
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Viscoelastic (Maxwell) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step04.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step04.cfg
+#
+# Output will be directed to the directory step04.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change the total simulation time to 200 years, and use a constant time
+# step size of 20 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+dt = 20.0*year
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.MaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the Maxwell
+# model, we explicitly request that they be output. Properties are named in
+# cell_info_fields and state variables are named in cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_maxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x degree of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face. Constant velocities
+# in the +y and -y directions are applied on +x and -x.
+#
+# For x_pos and x_neg, we retain the default ZeroDispDB for displacements
+# (db_initial), since we do not want initial displacements. We change the
+# default database for velocities (db_rate) to UniformDB, which allows
+# nonzero velocities. Using UniformDB, we also specify the velocity values
+# in this .cfg file, rather than using a spatialdb file.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 40 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step04/step04.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step04/step04-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step04/step04-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step04/step04-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step05.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step05.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,186 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem using a combination of constant
+# velocity Dirichlet boundary conditions and time-dependent Neumann
+# (traction) boundary conditions.
+
+# This problem is similar to example 4, with the following differences:
+# 1. The Dirichlet BC on -x in the y-direction include an initial
+# displacement (applied in the elastic solution) as well as a constant
+# velocity.
+# 2. Neumann (traction) BC are applied in the -x direction on the +x face.
+# An initial traction is applied in the elastic solution, and then at
+# t=100 years the traction reduces linearly until it reaches zero at
+# t=200 years (the end of the simulation).
+#
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Viscoelastic (Maxwell) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step05.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step05.cfg
+#
+# Output will be directed to the directory step05.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change the total simulation time to 200 years, and use a constant time
+# step size of 20 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+dt = 20.0*year
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.MaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the Maxwell
+# model, we explicitly request that they be output. Properties are named in
+# cell_info_fields and state variables are named in cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_maxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x degree of freedom on the -x face, and
+# fix the z degree of freedom on the bottom (-z) face. Constant velocities
+# in the -y direction are applied on -x, along with an initial displacement.
+# On the +x face, we apply compressional traction (Neumann) BC initially,
+# and then at t=100 years we begin reducing the magnitudes until they are
+# reduced to zero at t=200 years (the end of the simulation).
+#
+# For x_neg, we use a UniformDB for both initial displacements and
+# velocities.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face -- first change bc type to Neumann
+[pylithapp.timedependent.bc]
+x_pos = pylith.bc.Neumann
+
+[pylithapp.timedependent.bc.x_pos]
+label = face_xpos
+# Give quadrature information for integration of tractions.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+quadrature.cell.quad_order = 2
+
+# Fist specify a UniformDB for the initial tractions, along with the values.
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Neumann BC on +x
+db_initial.values = [traction-shear-horiz,traction-shear-vert,traction-normal]
+db_initial.data = [0.0*MPa,0.0*MPa,-1.0*MPa]
+# Provide information on traction rates.
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Neumann rate BC on +x
+db_rate.values = [traction-rate-shear-horiz,traction-rate-shear-vert,traction-rate-normal,rate-start-time]
+db_rate.data = [0.0*MPa/year,0.0*MPa/year,0.01*MPa/year,100.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+# Initial displacements.
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on -x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [0.0*cm,-0.5*cm]
+# Velocities.
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 40 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step05/step05.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step05/step05-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step05/step05-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 40.0*year
+writer.filename = step05/step05-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step06.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step06.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,221 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem with Dirichlet boundary conditions
+# and multiple earthquake ruptures as well as fault creep at constant
+# velocity.
+# The x-faces are held fixed in x and y, and the z-displacements are held
+# fixed on the -z face.
+# The upper (locked) portion of the fault ruptures at regular intervals,
+# and constant velocities are applied on the lower section of the fault.
+# The problem bears some similarity to the analytical Savage and Prescott
+# (1978) strike-slip analytical solution for an elastic layer over a
+# viscoelastic half-space. The difference is that the creeping portion of
+# the fault extends through the entire domain, and the far-field boundaries
+# are held fixed.
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Viscoelastic (Maxwell) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step06.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step06.cfg
+#
+# Output will be directed to the directory step06.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 700 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 700.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.MaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the Maxwell
+# model, we explicitly request that they be output. Properties are named in
+# cell_info_fields and state variables are named in cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_maxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x and y degrees of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face.
+#
+# Since we are applying zero displacements on all boundaries, we retain
+# the default ZeroDispDB for displacements (db_initial).
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+
+# Set the parameters for the fault interface conditions.
+[pylithapp.timedependent.interfaces.fault]
+# This corresponds to the label of the Cubit nodeset defining the fault.
+label = fault
+# Provide quadrature information for the fault surface.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
+# Set earthquake sources to an array consisting of creep and 3 ruptures.
+eq_srcs = [creep,one,two,three]
+eq_srcs.creep.origin_time = 00.0*year
+eq_srcs.one.origin_time = 200.0*year
+eq_srcs.two.origin_time = 400.0*year
+eq_srcs.three.origin_time = 600.0*year
+
+# Define slip and origin time for first rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for second rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for third rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip rate and origin time for fault creep.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+slip_function = pylith.faults.ConstRateSlipFn
+origin_time = 0.0*s
+slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 50 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step06/step06.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step06/step06-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault rupture output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step06/step06-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step06/step06-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step06/step06-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step07.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step07.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,235 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem with velocity boundary conditions
+# and multiple earthquake ruptures as well as fault creep at constant
+# velocity.
+# Velocities in the + and - y-directions are applied on the + and -
+# x-faces, and the x-displacements are held fixed on those boundaries.
+# The z-displacements are held fixed on the -z face.
+# The upper (locked) portion of the fault ruptures at regular intervals,
+# and constant velocities are applied on the lower section of the fault.
+# The problem bears some similarity to the analytical Savage and Prescott
+# (1978) strike-slip analytical solution for an elastic layer over a
+# viscoelastic half-space. The difference is that the creeping portion of
+# the fault extends through the entire domain.
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Viscoelastic (Maxwell) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step07.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step07.cfg
+#
+# Output will be directed to the directory step07.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 700 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 700.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to Maxwell viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.MaxwellIsotropic3D
+
+# Provide a spatial database from which to obtain property values.
+# Since there are additional properties and state variables for the Maxwell
+# model, we explicitly request that they be output. Properties are named in
+# cell_info_fields and state variables are named in cell_data_fields.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties.iohandler.filename = spatialdb/mat_maxwell.spatialdb
+output.cell_info_fields = [density,mu,lambda,maxwell_time]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x degree of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face. Constant velocities
+# in the +y and -y directions are applied on +x and -x.
+#
+# For x_pos and x_neg, we retain the default ZeroDispDB for displacements
+# (db_initial), since we do not want initial displacements. We change the
+# default database for velocities (db_rate) to UniformDB, which allows
+# nonzero velocities. Using UniformDB, we also specify the velocity values
+# in this .cfg file, rather than using a spatialdb file.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+
+# Set the parameters for the fault interface conditions.
+[pylithapp.timedependent.interfaces.fault]
+# This corresponds to the label of the Cubit nodeset defining the fault.
+label = fault
+# Provide quadrature information for the fault surface.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
+# Set earthquake sources to an array consisting of creep and 3 ruptures.
+eq_srcs = [creep,one,two,three]
+eq_srcs.creep.origin_time = 00.0*year
+eq_srcs.one.origin_time = 200.0*year
+eq_srcs.two.origin_time = 400.0*year
+eq_srcs.three.origin_time = 600.0*year
+
+# Define slip and origin time for first rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for second rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for third rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip rate and origin time for fault creep.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+slip_function = pylith.faults.ConstRateSlipFn
+origin_time = 0.0*s
+slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 50 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step07/step07.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step07/step07-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault rupture output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step07/step07-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step07/step07-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step07/step07-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step08.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step08.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,250 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem with velocity boundary conditions
+# and multiple earthquake ruptures as well as fault creep at constant
+# velocity.
+# This problem is identical to example 7 except that it includes
+# power-law rheology, which requires the use of a nonlinear solver.
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Viscoelastic (power-law) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step08.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step08.cfg
+#
+# Output will be directed to the directory step08.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# For this problem we must switch to a nonlinear solver.
+implicit.solver = pylith.problems.SolverNonlinear
+
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 700 years, and set the maximum time
+# step size to 10 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 700.0*year
+max_dt = 10.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+# For this problem we set adapt_skip to zero so that the time step size is
+# readjusted every time step.
+adapt_skip = 0
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to power-law viscoelastic.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.PowerLaw3D
+
+# Provide a spatial database from which to obtain property values.
+# In this case, we prefer to obtain the power-law properties from one
+# database and the elastic properties from another database, so we use
+# a CompositeDB. Each part of the CompositeDB is a SimpleDB.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties = spatialdata.spatialdb.CompositeDB
+db_properties.db_A = spatialdata.spatialdb.SimpleDB
+db_properties.db_B = spatialdata.spatialdb.SimpleDB
+# Since there are additional properties and state variables for the
+# power-law model, we explicitly request that they be output. Properties are
+# named in cell_info_fields and state variables are named in
+# cell_data_fields.
+output.cell_info_fields = [density,mu,lambda,reference_strain_rate,reference_stress,power_law_exponent]
+output.cell_data_fields = [total_strain,stress,viscous_strain]
+
+# Provide the values to be obtained from each database and the database
+# name.
+[pylithapp.timedependent.materials.lower_crust.db_properties]
+values_A = [density,vs,vp] ; Elastic properties.
+db_A.label = Elastic properties
+db_A.iohandler.filename = spatialdb/mat_elastic.spatialdb
+values_B = [reference-stress,reference-strain-rate,power-law-exponent] ; Power-law properties.
+db_B.label = Power-law properties
+db_B.iohandler.filename = spatialdb/mat_powerlaw.spatialdb
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x degree of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face. Constant velocities
+# in the +y and -y directions are applied on +x and -x.
+#
+# For x_pos and x_neg, we retain the default ZeroDispDB for displacements
+# (db_initial), since we do not want initial displacements. We change the
+# default database for velocities (db_rate) to UniformDB, which allows
+# nonzero velocities. Using UniformDB, we also specify the velocity values
+# in this .cfg file, rather than using a spatialdb file.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+
+# Set the parameters for the fault interface conditions.
+[pylithapp.timedependent.interfaces.fault]
+# This corresponds to the label of the Cubit nodeset defining the fault.
+label = fault
+# Provide quadrature information for the fault surface.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
+# Set earthquake sources to an array consisting of creep and 3 ruptures.
+eq_srcs = [creep,one,two,three]
+eq_srcs.creep.origin_time = 00.0*year
+eq_srcs.one.origin_time = 200.0*year
+eq_srcs.two.origin_time = 400.0*year
+eq_srcs.three.origin_time = 600.0*year
+
+# Define slip and origin time for first rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for second rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for third rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip rate and origin time for fault creep.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+slip_function = pylith.faults.ConstRateSlipFn
+origin_time = 0.0*s
+slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 50 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step08/step08.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step08/step08-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault rupture output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step08/step08-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step08/step08-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step08/step08-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step09.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step09.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,251 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This is a time-dependent problem with velocity boundary conditions
+# and multiple earthquake ruptures as well as fault creep at constant
+# velocity.
+# This problem is identical to example 8 except that it includes
+# Drucker-Prager elastoplastic rheology, which requires the use of a
+# nonlinear solver.
+# Two materials are used:
+# 1. Elastic upper crust.
+# 2. Elastoplastic (Drucker-Prager) lower crust.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step09.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step09.cfg
+#
+# Output will be directed to the directory step09.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# For this problem we must switch to a nonlinear solver.
+implicit.solver = pylith.problems.SolverNonlinear
+
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Change time stepping algorithm from uniform time step, to adaptive
+# time stepping.
+time_step = pylith.problems.TimeStepAdapt
+
+# Change the total simulation time to 700 years, and set the maximum time
+# step size to 5 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 700.0*year
+max_dt = 5.0*year
+stability_factor = 1.0 ; use time step equal to stable value from materials
+# For this problem we set adapt_skip to zero so that the time step size is
+# readjusted every time step.
+adapt_skip = 0
+
+# ----------------------------------------------------------------------
+# materials
+# ----------------------------------------------------------------------
+# Change material type of lower crust to Drucker-Prager.
+[pylithapp.timedependent]
+materials.lower_crust = pylith.materials.DruckerPrager3D
+
+# Provide a spatial database from which to obtain property values.
+# In this case, we prefer to obtain the Drucker-Prager properties from one
+# database and the elastic properties from another database, so we use
+# a CompositeDB. Each part of the CompositeDB is a SimpleDB.
+[pylithapp.timedependent.materials.lower_crust]
+db_properties = spatialdata.spatialdb.CompositeDB
+db_properties.db_A = spatialdata.spatialdb.SimpleDB
+db_properties.db_B = spatialdata.spatialdb.SimpleDB
+# Since there are additional properties and state variables for the
+# Drucker-Prager model, we explicitly request that they be output.
+# Properties are named in cell_info_fields and state variables are named in
+# cell_data_fields.
+output.cell_info_fields = [density,mu,lambda,alpha_yield,beta,alpha_flow]
+output.cell_data_fields = [total_strain,stress,plastic_strain]
+
+# Provide the values to be obtained from each database and the database
+# name.
+[pylithapp.timedependent.materials.lower_crust.db_properties]
+values_A = [density,vs,vp] ; Elastic properties.
+db_A.label = Elastic properties
+db_A.iohandler.filename = spatialdb/mat_elastic.spatialdb
+values_B = [friction-angle,cohesion,dilatation-angle] ; Drucker-Prager properties.
+db_B.label = Drucker-Prager properties
+db_B.iohandler.filename = spatialdb/mat_druckerprager.spatialdb
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We fix the x degree of freedom on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face. Constant velocities
+# in the +y and -y directions are applied on +x and -x.
+#
+# For x_pos and x_neg, we retain the default ZeroDispDB for displacements
+# (db_initial), since we do not want initial displacements. We change the
+# default database for velocities (db_rate) to UniformDB, which allows
+# nonzero velocities. Using UniformDB, we also specify the velocity values
+# in this .cfg file, rather than using a spatialdb file.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial.label = Dirichlet BC on +x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+
+# Set the parameters for the fault interface conditions.
+[pylithapp.timedependent.interfaces.fault]
+# This corresponds to the label of the Cubit nodeset defining the fault.
+label = fault
+# Provide quadrature information for the fault surface.
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Due to the complex time history used for the fault, a number of additional
+# info fields are available.
+output.vertex_info_fields = [normal_dir,strike_dir,dip_dir,final_slip_creep,final_slip_one,final_slip_two,final_slip_three,slip_time_creep,slip_time_one,slip_time_two,slip_time_three]
+
+# Set earthquake sources to an array consisting of creep and 3 ruptures.
+eq_srcs = [creep,one,two,three]
+eq_srcs.creep.origin_time = 00.0*year
+eq_srcs.one.origin_time = 200.0*year
+eq_srcs.two.origin_time = 400.0*year
+eq_srcs.three.origin_time = 600.0*year
+
+# Define slip and origin time for first rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.one.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for second rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.two.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip and origin time for third rupture.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.three.slip_function]
+slip.iohandler.filename = spatialdb/finalslip_rupture.spatialdb
+slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# Define slip rate and origin time for fault creep.
+[pylithapp.timedependent.interfaces.fault.eq_srcs.creep]
+slip_function = pylith.faults.ConstRateSlipFn
+origin_time = 0.0*s
+slip_function.slip_rate.iohandler.filename = spatialdb/sliprate_creep.spatialdb
+slip_function.slip_time.iohandler.filename = spatialdb/sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 50 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step09/step09.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step09/step09-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault rupture output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step09/step09-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step09/step09-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 50.0*year
+writer.filename = step09/step09-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step10.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step10.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,168 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of static fault friction.
+# The problem is identical to example 1, except for the presence of a fault
+# with static friction. In this case, the applied displacements are
+# insufficient to initiate slip, so the solution should be identical to
+# the results of example 1.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step10.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step10.cfg
+#
+# Output will be directed to the directory step10.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Fault friction is a nonlinear problem so we need to use the nonlinear
+# solver.
+solver = pylith.problems.SolverNonlinear
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We apply shear (y) and axial (x) displacements on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face.
+#
+# For x_pos and x_neg, we change the database from ZeroDispDB (which
+# specifies a zero value) to SimpleDB (which uses a data file to
+# specify a spatial variation).
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial = spatialdata.spatialdb.SimpleDB
+db_initial.label = Dirichlet BC on +x
+db_initial.iohandler.filename = spatialdb/fixeddisp_axial_shear.spatialdb
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial = spatialdata.spatialdb.SimpleDB
+db_initial.label = Dirichlet BC on -x
+db_initial.iohandler.filename = spatialdb/fixeddisp_axial_shear.spatialdb
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# Use the static friction model.
+friction = pylith.friction.StaticFriction
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Set static friction model parameters using a uniform DB. Set the
+# static coefficient of friction to 0.6 and cohesion to 0.0 Pa.
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Static friction
+friction.db_properties.values = [friction-coefficient,cohesion]
+friction.db_properties.data = [0.6,0.0*Pa]
+
+# ----------------------------------------------------------------------
+# PETSc settings
+# ----------------------------------------------------------------------
+# NOTE: There are additional setting specific to fault friction.
+[pylithapp.petsc]
+
+# Friction sensitivity solve used to compute the increment in slip
+# associated with changes in the Lagrange multiplier imposed by the
+# fault constitutive model.
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+# Uncomment to view details of friction sensitivity solve.
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain.writer]
+filename = step10/step10.vtk
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+writer.filename = step10/step10-groundsurf.vtk
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+writer.filename = step10/step10-fault.vtk
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step10/step10-upper_crust.vtk
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step10/step10-lower_crust.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step11.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step11.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,170 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of static fault friction.
+# The problem is similar to example 10, except that in this case,
+# enough displacement is applied to induce slip on the fault.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step11.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step11.cfg
+#
+# Output will be directed to the directory step11.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos','x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Fault friction is a nonlinear problem so we need to use the nonlinear
+# solver.
+solver = pylith.problems.SolverNonlinear
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for Dirichlet boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# We apply shear (y) and axial (x) displacements on the +x and -x faces, and
+# fix the z degree of freedom on the bottom (-z) face.
+#
+# For x_pos and x_neg, we change the database from ZeroDispDB (which
+# specifies a zero value) to UniformDB, which allows us to provide
+# displacement values within the .cfg file.
+# Note that for this simulation, we apply twice as much shear displacement
+# as we did for example 10, which is sufficient to induce slip on the fault.
+#
+# For z_neg, we keep the default ZeroDispDB, since we just want zero
+# z-displacements on that boundary.
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0, 1]
+label = face_xpos
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on +x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [-1.0*m,2.0*m]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on -x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [1.0*m,-2.0*m]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# Use the static friction model.
+friction = pylith.friction.StaticFriction
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Set static friction model parameters using a uniform DB. Set the
+# static coefficient of friction to 0.6 and cohesion to 0.0 Pa.
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Static friction
+friction.db_properties.values = [friction-coefficient,cohesion]
+friction.db_properties.data = [0.6,0.0*Pa]
+
+# ----------------------------------------------------------------------
+# PETSc settings
+# ----------------------------------------------------------------------
+# NOTE: There are additional setting specific to fault friction.
+[pylithapp.petsc]
+
+# Friction sensitivity solve used to compute the increment in slip
+# associated with changes in the Lagrange multiplier imposed by the
+# fault constitutive model.
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+# Uncomment to view details of friction sensitivity solve.
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain.writer]
+filename = step11/step11.vtk
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+writer.filename = step11/step11-groundsurf.vtk
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+writer.filename = step11/step11-fault.vtk
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step11/step11-upper_crust.vtk
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+writer.filename = step11/step11-lower_crust.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg (from rev 16839, short/3D/PyLith/trunk/examples/3d/hex8/step12.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/3d/hex8/step12.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,211 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+#
+# This problem demonstrates the use of static fault friction for a
+# quasi-static problem.
+# The problem is similar to example 11, except that velocity boundary
+# conditions are applied rather than displacement BC. Rather than applying
+# axial displacements, normal tractions (compressional) are applied on the
+# +x face, while the -x face is held fixed in the x-direction. This
+# maintains a normal stress on the fault. The model is run for 200 years,
+# resulting in periodic fault slip as the friction threshold is reached on
+# the fault.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATON
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies parameters specific to tutorial step12.
+# The general parameters are specificed in the pylithapp.cfg
+# file which PyLith reads by default.
+#
+# To run the simulation:
+# pylith step12.cfg
+#
+# Output will be directed to the directory step12.
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+# Set bc to an array of 3 boundary conditions: 'x_pos', 'x_neg', and 'z_neg'.
+bc = [x_pos,x_neg,z_neg]
+
+# Set interfaces to an array of 1 fault: 'fault'.
+interfaces = [fault]
+
+[pylithapp.timedependent.implicit]
+# Set the output to an array of 2 output managers.
+# We will output the solution over the domain and the ground surface.
+output = [domain,subdomain]
+
+# Set subdomain component to OutputSolnSubset (boundary of the domain).
+output.subdomain = pylith.meshio.OutputSolnSubset
+
+# Fault friction is a nonlinear problem so we need to use the nonlinear
+# solver.
+solver = pylith.problems.SolverNonlinear
+
+# Change the total simulation time to 200 years, and use a constant time
+# step size of 5 years.
+[pylithapp.timedependent.implicit.time_step]
+total_time = 200.0*year
+dt = 5.0*year
+
+# ----------------------------------------------------------------------
+# boundary conditions
+# ----------------------------------------------------------------------
+# Set the parameters for boundary conditions applied on the
+# +x, -x, and -z faces of the box.
+#
+# On the -x and +x faces, we fix the x degrees of freedom and apply
+# velocities in the y-direction. We fix the z degree of freedom on the
+# bottom (-z) face.
+#
+# We use a UniformDB to apply the displacements and velocities, while
+# retaining the default ZeroDispDB for zero x-displacements on the -x
+# face and and zero z-displacements on -z.
+#
+# Note that since the fault cuts through the base of the model (z_neg),
+# we can only constrain the portion of the bottom boundary that does not
+# include the fault. A nodeset named 'face_zneg_nofault' has been defined
+# in Cubit for this purpose.
+#
+
+# The label corresponds to the name of the nodeset in CUBIT.
+
+# +x face -- Dirichlet
+[pylithapp.timedependent.bc.x_pos]
+bc_dof = [0,1]
+label = face_xpos
+
+db_initial = spatialdata.spatialdb.UniformDB
+db_initial.label = Dirichlet BC on +x
+db_initial.values = [displacement-x,displacement-y]
+db_initial.data = [-1.0*m,0.0*m]
+
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on +x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,1.0*cm/year,0.0*year]
+
+# -x face
+[pylithapp.timedependent.bc.x_neg]
+bc_dof = [0, 1]
+label = face_xneg
+db_initial.label = Dirichlet BC on -x
+db_rate = spatialdata.spatialdb.UniformDB
+db_rate.label = Dirichlet rate BC on -x
+db_rate.values = [displacement-rate-x,displacement-rate-y,rate-start-time]
+db_rate.data = [0.0*cm/year,-1.0*cm/year,0.0*year]
+
+# -z face
+[pylithapp.timedependent.bc.z_neg]
+bc_dof = [2]
+label = face_zneg_nofault
+db_initial.label = Dirichlet BC on -z
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# The label corresponds to the name of the nodeset in CUBIT.
+label = fault
+
+# Use the static friction model.
+friction = pylith.friction.StaticFriction
+
+# We must define the quadrature information for fault cells.
+# The fault cells are 2D (surface).
+quadrature.cell = pylith.feassemble.FIATLagrange
+quadrature.cell.dimension = 2
+
+# Set static friction model parameters using a uniform DB. Set the
+# static coefficient of friction to 0.6 and cohesion to 0.0 Pa.
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Static friction
+friction.db_properties.values = [friction-coefficient,cohesion]
+friction.db_properties.data = [0.6,2.0*MPa]
+
+# ----------------------------------------------------------------------
+# PETSc settings
+# ----------------------------------------------------------------------
+# NOTE: There are additional setting specific to fault friction.
+[pylithapp.petsc]
+
+# Friction sensitivity solve used to compute the increment in slip
+# associated with changes in the Lagrange multiplier imposed by the
+# fault constitutive model.
+friction_pc_type = asm
+friction_sub_pc_factor_shift_type = nonzero
+friction_ksp_max_it = 25
+friction_ksp_gmres_restart = 30
+# Uncomment to view details of friction sensitivity solve.
+#friction_ksp_monitor = true
+#friction_ksp_view = true
+friction_ksp_converged_reason = true
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.domain]
+# We specify that output occurs in terms of a given time frequency, and
+# ask for output every 20 years. The time stamps of the output files are
+# in years (rather than the default of seconds), and we give a format for
+# the time stamp.
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = step12/step12.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK domain output of solution over ground surface.
+[pylithapp.problem.formulation.output.subdomain]
+# Name of nodeset for ground surface.
+label = face_zpos
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step12/step12-groundsurf.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK fault output.
+[pylithapp.problem.interfaces.fault.output]
+# We keep the default output frequency behavior (skip every n steps), and
+# ask to skip 0 steps between output, so that we get output every time step.
+skip = 0
+writer.filename = step12/step12-fault.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of upper_crust state variables.
+[pylithapp.timedependent.materials.upper_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = step12/step12-upper_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
+
+# Give basename for VTK output of lower_crust state variables.
+[pylithapp.timedependent.materials.lower_crust.output]
+# Average values over quadrature points.
+cell_filter = pylith.meshio.CellFilterAvgMesh
+output_freq = time_step
+time_step = 20.0*year
+writer.filename = step12/step12-lower_crust.vtk
+writer.time_format = %04.0f
+writer.time_constant = 1.0*year
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/README 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/README 2010-05-30 21:53:47 UTC (rev 16840)
@@ -10,7 +10,9 @@
pylith
-in any of the subdirectories.
+in the tri3, tet4, or hex8 subdirectories. The quad4 subdirectory also
+contains some additional dynamic examples, so the problem is run by
+entering "pylith shearwave_kinematicslip.cfg".
Subdirectories
@@ -20,8 +22,10 @@
- tet4: Mesh with tetrahedral cells
- quad4: Mesh with quadrilateral cells
-Each of the subdirectories contains the files listed below (along with
-other files for the mesh).
+Each of the tri3, tet4, and hex8 subdirectories contains the files
+listed below (along with other files for the mesh). The files in the
+quad4 subdirectory are named differently (see the README in the quad4
+subdirectory for more information).
- pylithapp.cfg: Parameter settings for the shear wave dislocation problem
- matprops.spatialdb: Material database of physical properties
@@ -30,4 +34,3 @@
peak slip rate
- shearwave_sliptime.spatialdb: Spatial database with values for the
slip initiation time
-
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/bar_hex8_200m.exo
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/hex8/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,11 +1,28 @@
# -*- Python -*-
+[pylithapp]
-# These settings define an explicit time-stepping problem using a fault with
-# kinematically-specified slip.
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
-[pylithapp]
+# Impose 1.0 m of left-lateral slip at time 0.1 s with slip rate
+# following Brune's far-field time function. The rise time (95% of the
+# final slip) is 2.0 s.
+#
+# The fault slip causes a shear wave to propagate down the bar. The
+# shear wave is absorbed at the lateral ends of the bar using the
+# absorbing dampers boundary condition.
# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is a self-contained simulation configuration file.
+#
+# To run the simulation:
+# pylith
+
+# ----------------------------------------------------------------------
# journal
# ----------------------------------------------------------------------
[pylithapp.journal.info]
@@ -46,8 +63,8 @@
# Nondimensionalize problem using wave propagation parameters.
normalizer = spatialdata.units.NondimElasticDynamic
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'y_pos'.
-bc = [x_pos,x_neg,y_pos]
+# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'all_nofault'.
+bc = [x_pos,x_neg,all_nofault]
# Change the DirichletPoints BC to the AbsorbingDampers BC
bc.x_pos = pylith.bc.AbsorbingDampers
@@ -71,7 +88,7 @@
# Label for material
label = Elastic material
-# Nodeset id from CUBIT
+# Block id from CUBIT
id = 1
# Spatial database with physical properties for elastic material
@@ -89,8 +106,8 @@
[pylithapp.timedependent.bc.x_pos]
# Absorbing boundary condition on +x face of bar
-# Nodeset id from CUBIT
-label = 11
+# Nodeset name from CUBIT
+label = face_xpos
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC +x
@@ -105,8 +122,8 @@
[pylithapp.timedependent.bc.x_neg]
# Absorbing boundary condition on -x face of bar
-# Nodeset id from CUBIT
-label = 12
+# Nodeset name from CUBIT
+label = face_xneg
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC -x
@@ -118,14 +135,14 @@
quadrature.cell.dimension = 2
quadrature.cell.quad_order = 2
-[pylithapp.timedependent.bc.y_pos]
+[pylithapp.timedependent.bc.all_nofault]
# Dirichlet boundary condition on all vertices except fault vertices
# Pin x and z degrees of freedom
bc_dof = [0, 2]
-# Nodeset id from CUBIT
-label = 13
+# Nodeset name from CUBIT
+label = vertices_nofault
# ----------------------------------------------------------------------
# faults
@@ -146,8 +163,8 @@
# Material id
id = 100
-# Nodeset id from CUBIT
-label = 10
+# Nodeset name from CUBIT
+label = fault
# Specify the basis functions and quadrature:
# 2-D Lagrange cell in 3-D space with 2nd order quadrature
@@ -199,19 +216,20 @@
# Give basename for VTK domain output of solution over domain.
[pylithapp.problem.formulation.output.output]
-skip = 3
+vertex_data_fields = [displacement,velocity]
+skip = 1
writer.filename = output/shearwave.vtk
writer.time_format = %05.2f
# Give basename for VTK fault output.
[pylithapp.timedependent.interfaces.fault.output]
-skip = 3
+skip = 1
writer.filename = output/shearwave-fault.vtk
writer.time_format = %05.2f
# Give basename for VTK output of state variables.
[pylithapp.timedependent.materials.elastic.output]
-skip = 33
+skip = 19
writer.filename = output/shearwave-statevars.vtk
writer.time_format = %05.2f
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -20,8 +20,13 @@
matprops.spatialdb \
mesh_quad4_200m.jou \
pylithapp.cfg \
- shearwave_slip.spatialdb \
- shearwave_risetime.spatialdb \
- shearwave_sliptime.spatialdb
+ kinematic.cfg \
+ kinematic_slip.spatialdb \
+ kinematic_risetime.spatialdb \
+ kinematic_sliptime.spatialdb \
+ dynamic.cfg \
+ dynamic_staticfriction.cfg \
+ dynamic_slipweakening.cfg \
+ dynamic_ratestateageing.cfg
# End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/README 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/README 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,18 +1,47 @@
-The bar is discretized with quadrilateral cells.
+The bar is discretized with quadrilateral cells. Detailed descriptions
+of the problems are in the .cfg files associated with each example. In
+each example the output (VTK files) are written to the output
+directory.
-Files associated with the example problem:
+Example problems
+ * Kinematic fault slip (same as problem in tri3, tet4, and hex8
+ subdirectories)
+
+ * Dynamic fault slip with static friction fault constitutive model
+
+ * Dynamic fault slip with linear slip-weakening fault constitutive model
+
+ * Dynamic fault slip with rate- and state-friction fault constitutive model
+
+
+Files common to all example problems
+
- geometry.jou: CUBIT journal file defining the geometry of the mesh
- mesh_quad4_200m.jou: CUBIT journal file for meshing the problem
- - pylithapp.cfg: Parameter settings for the shear wave dislocation problem
+ - pylithapp.cfg: Parameter settings common to all example problems
- matprops.spatialdb: Material database of physical properties
- bar_quad4_200m.exo: Exodus file with mesh generated by CUBIT
- - shearwave_slip.spatialdb: Spatial database with values for final slip
- - shearwave_sliprate.spatialdb: Spatial database with values for the
- peak slip rate
- - shearwave_sliptime.spatialdb: Spatial database with values for the
- slip initiation time
-To run the problem, enter
+Files associated with the example problems:
- pylith
+ + Kinematic fault slip
+ - kinematic.cfg: Parameters for simulation
+ - kinematic_risetime.spatialdb: Spatial database for slip rise time
+ - kinematic_slip.spatialdb: Spatial database for final slip
+ - kinematic_sliptime.spatialdb: Spatial database for slip initiation time
+
+ + Dynamic fault slip with static friction fault constitutive model
+
+ - dynamic.cfg: Parameters common to dynamic friction problems
+ - dynamic_staticfriction.cfg: Parameters for simulation
+
+ + Dynamic fault slip with linear slip-weakening fault constitutive model
+
+ - dynamic.cfg: Parameters common to dynamic friction problems
+ - dynamic_slipweakening.cfg: Parameters for simulation
+
+ + Dynamic fault slip with rate- and state-friction fault constitutive model
+
+ - dynamic.cfg: Parameters common to dynamic friction problems
+ - dynamic_ratestateageing.cfg: Parameters for simulation
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/bar_quad4_200m.exo
===================================================================
(Binary files differ)
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/dynamic.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,49 @@
+# -*- Python -*-
+[pylithapp]
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies the general parameters common to the dynamic
+# fault (friction interface) simulations in this directory.
+
+# ----------------------------------------------------------------------
+# journal
+# ----------------------------------------------------------------------
+# Turn on progress for the dynamic fault.
+[pylithapp.journal.info]
+faultcohesivedyn = 1
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+
+# Overwrite the use of explicit time stepping with a full Jacobian
+# matrix set in pylithapp.cfg with a lumped Jacobian matrix. The
+# lumped Jacobian reduces memory use and uncouples the degrees of
+# freedom in the solve, permitting use of a very fast, simple solver.
+formulation = pylith.problems.ExplicitLumped
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+# Change fault to dynamic fault interface.
+fault = pylith.faults.FaultCohesiveDyn
+
+[pylithapp.timedependent.interfaces.fault]
+# Specify the initial tractions on the fault using a uniform DB.
+# shear: 6.1 MPa (right-lateral)
+# normal 10 MPa (compressive)
+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 = [-6.1*MPa, -10.0*MPa]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault.output]
+# Add slip rate to the default output fiels of slip and traction.
+vertex_data_fields=[slip,slip_rate,traction]
+skip = 1
+writer.time_format = %05.2f
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_ratestateageing.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,66 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+# Use constant initial tractions on the fault to drive fault slip
+# subject to rate- and state-friction on the fault. Deformation
+# propagates to the edges of the bar where it is absorbed using
+# absorbing dampers boundary conditions. The steady state solution is
+# a constant slip rate on the fault with uniform strain in the bar.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies the specific parameters for an explicit
+# time-stepping problem using a dynamic fault interface condition with
+# static friction.
+#
+# To run the simulation:
+# pylith dynamicfault.cfg staticfriction.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
+
+# Use rate- and state-friction with the ageing law for evolution of
+# the state variable.
+friction = pylith.friction.RateStateAgeing
+
+# Set the friction model parameters.
+# reference coefficient of friction: 0.6
+# reference slip rate: 1.0e-06 m/s
+# slip weakening parameter: 0.037 m
+# a: 0.0125
+# b: 0.0172
+# cohesion: 0 Pa
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Rate State Ageing
+friction.db_properties.values = [reference-friction-coefficient,reference-slip-rate,characteristic-slip-distance,constitutive-parameter-a,constitutive-parameter-b,cohesion]
+friction.db_properties.data = [0.6,1.0e-6*m/s,0.0370*m,0.0125,0.0172,0.0*Pa]
+
+# Set spatial database for the initial value of the state variable.
+friction.db_initial_state = spatialdata.spatialdb.UniformDB
+friction.db_initial_state.label = Rate State Ageing State
+friction.db_initial_state.values = [state-variable]
+friction.db_initial_state.data = [92.7*s]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Set filenames for output.
+[pylithapp.problem.formulation.output.output]
+writer.filename = output/shearwave-ratestateageing.vtk
+
+[pylithapp.timedependent.interfaces.fault.output]
+writer.filename = output/shearwave-ratestateageing-fault.vtk
+
+[pylithapp.timedependent.materials.elastic.output]
+writer.filename = output/shearwave-ratestateageing-statevars.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_slipweakening.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,65 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+# Use constant initial tractions on the fault to drive fault slip
+# subject to linear slip-weakening friction on the fault. Deformation
+# propagates to the edges of the bar where it is absorbed using
+# absorbing dampers boundary conditions. The steady state solution is
+# a constant slip rate on the fault with uniform strain in the bar.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies the specific parameters for an explicit
+# time-stepping problem using a dynamic fault interface condition with
+# linear slip-weakening friction.
+#
+# To run the simulation:
+# pylith dynamicfault.cfg slipweakening.cfg
+#
+# Output will be directed to the directory output.
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
+
+# Use slip-weakening friction
+friction = pylith.friction.SlipWeakening
+
+# Set the slip-weakening friction model parameters.
+# static coefficient of friction: 0.6
+# dynamic coefficient of friction: 0.5
+# slip-weakening parameter: 0.2 m
+# cohesion: 0 Pa
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Slip weakening
+friction.db_properties.values = [static-coefficient,dynamic-coefficient,slip-weakening-parameter,cohesion]
+friction.db_properties.data = [0.6,0.5,0.2*m,0.0*Pa]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+[pylithapp.problem.formulation.output.output]
+writer.filename = output/slipweakening.vtk
+
+[pylithapp.timedependent.interfaces.fault.output]
+writer.filename = output/slipweakening-fault.vtk
+
+# Add friction model parameters to fault info file in addition to
+# default values.
+vertex_info_fields = [strike_dir,normal_dir,initial_traction,static_coefficient,dynamic_coefficient,slip_weakening_parameter,cohesion]
+
+# Add output of state variables cumulative slip and previous slip to default
+# values.
+vertex_data_fields = [slip,traction,cumulative_slip,previous_slip]
+
+
+[pylithapp.timedependent.materials.elastic.output]
+writer.filename = output/slipweakening-statevars.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/dynamic_staticfriction.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,53 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+# Use constant initial tractions on the fault to drive fault slip
+# subject to static friction on the fault. Deformation propagates to
+# the edges of the bar where it is absorbed using absorbing dampers
+# boundary conditions. The steady state solution is a constant slip
+# rate on the fault with uniform strain in the bar.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies the specific parameters for an explicit
+# time-stepping problem using a dynamic fault interface condition with
+# static friction.
+#
+# To run the simulation:
+# pylith dynamicfault.cfg staticfriction.cfg
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
+
+# Use static friction
+friction = pylith.friction.StaticFriction
+
+# Set the static friction model parameters.
+# static coefficient of friction: 0.6
+# cohesion: 0 Pa
+friction.db_properties = spatialdata.spatialdb.UniformDB
+friction.db_properties.label = Static friction
+friction.db_properties.values = [friction-coefficient,cohesion]
+friction.db_properties.data = [0.6,0.0*Pa]
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Set filenames for output.
+[pylithapp.problem.formulation.output.output]
+writer.filename = output/staticfriction.vtk
+
+[pylithapp.timedependent.interfaces.fault.output]
+writer.filename = output/staticfriction-fault.vtk
+
+[pylithapp.timedependent.materials.elastic.output]
+writer.filename = output/staticfriction-statevars.vtk
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/geometry.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/geometry.jou 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/geometry.jou 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,12 +1,3 @@
-## /tools/common/cubit-10.2/bin/clarox
-## Cubit Version 10.2
-## Cubit Build 24
-## Revised 12/15/2006 16:09:40 MST
-## Running 06/18/2007 10:26:50 AM
-## Command Options:
-## -warning = On
-## -information = On
-
# ----------------------------------------------------------------------
# Create block
# ----------------------------------------------------------------------
@@ -26,8 +17,8 @@
# ----------------------------------------------------------------------
# Create fault (yz plane) at x = 0.0
-split surface 8 across location position 0 -200 0 location position 0 200 0
-curve 21 name "fault_surface"
+split surface 7 across location position 0 -200 0 location position 0 200 0
+curve 17 name "fault_surface"
# ----------------------------------------------------------------------
# Imprint all volumes, merging surfaces
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic.cfg (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/kinematic.cfg)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic.cfg (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,83 @@
+# -*- Python -*-
+[pylithapp]
+
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
+
+# Impose 1.0 m of left-lateral slip at time 0.1 s with slip rate
+# following Brune's far-field time function. The rise time (95% of the
+# final slip) is 2.0 s.
+#
+# The fault slip causes a shear wave to propagate down the bar. The
+# shear wave is absorbed at the lateral ends of the bar using the
+# absorbing dampers boundary condition.
+
+# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is not a self-contained simulation configuration file. This
+# file only specifies the specific parameters for an explicit
+# time-stepping problem using a fault with kinematically-specified
+# slip.
+#
+# To run the simulation:
+# pylith shearwave_kinematicslip.cfg
+
+# ----------------------------------------------------------------------
+# journal
+# ----------------------------------------------------------------------
+# Turn on progress for the kinematic fault.
+[pylithapp.journal.info]
+faultcohesivekin = 1
+
+# ----------------------------------------------------------------------
+# problem
+# ----------------------------------------------------------------------
+[pylithapp.timedependent]
+
+# Uncomment the line below to overwrite the use of explicit time
+# stepping with a full Jacobian matrix set in pylithapp.cfg with a
+# lumped Jacobian matrix. The lumped Jacobian reduces memory use and
+# uncouples the degrees of freedom in the solve, permitting use of a
+# very fast, simple solver.
+#formulation = pylith.problems.ExplicitLumped
+
+# ----------------------------------------------------------------------
+# faults
+# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces]
+fault = pylith.faults.FaultCohesiveKin
+
+[pylithapp.timedependent.interfaces.fault]
+# Switch to Brune slip time function
+eq_srcs.rupture.slip_function = pylith.faults.BruneSlipFn
+
+[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
+
+# Database specifying the final slip.
+slip.iohandler.filename = kinematic_slip.spatialdb
+
+# Database specifying rise_time.
+rise_time.iohandler.filename = kinematic_risetime.spatialdb
+
+# Database specifying time at which slip begins at each point.
+slip_time.iohandler.filename = kinematic_sliptime.spatialdb
+
+# ----------------------------------------------------------------------
+# output
+# ----------------------------------------------------------------------
+# Set the filename for each type of output.
+
+# Give basename for VTK domain output of solution over domain.
+[pylithapp.problem.formulation.output.output]
+writer.filename = output/kinematic.vtk
+
+# Give basename for VTK fault output.
+[pylithapp.timedependent.interfaces.fault.output]
+writer.filename = output/kinematic-fault.vtk
+
+# Give basename for VTK output of state variables.
+[pylithapp.timedependent.materials.elastic.output]
+writer.filename = output/kinematic-statevars.vtk
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_risetime.spatialdb (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/kinematic_risetime.spatialdb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_risetime.spatialdb (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_risetime.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,25 @@
+#SPATIAL.ascii 1
+SimpleDB {
+ // number of values for rise time
+ num-values = 1
+
+ // Name and units for rise time
+ value-names = rise-time
+ value-units = s
+
+ // Number of locations where physical properties are given
+ // 1 location -> data is uniform -> data dimension is 0
+ num-locs = 1
+ data-dim = 0
+
+ // Problem is in 2-D
+ space-dim = 2
+
+ // Coordinate system (2-D with coordinates in meters)
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 2
+ }
+}
+// Columns are x, y, rise-time
+0.0 0.0 2.0
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_slip.spatialdb (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/kinematic_slip.spatialdb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_slip.spatialdb (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_slip.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,25 @@
+#SPATIAL.ascii 1
+SimpleDB {
+ // number of values for final slip
+ num-values = 2
+
+ // Names and units of final slip values
+ value-names = left-lateral-slip fault-opening
+ value-units = m m
+
+ // Number of locations where physical properties are given
+ // 1 location -> data is uniform -> data dimension is 0
+ num-locs = 1
+ data-dim = 0
+
+ // Problem is in 2-D
+ space-dim = 2
+
+ // Coordinate system (2-D with coordinates in meters)
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 2
+ }
+}
+// Columns are x, y, left-lateral-slip, fault-opening
+0.0 0.0 1.0 0.0
Copied: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_sliptime.spatialdb (from rev 16839, short/3D/PyLith/trunk/examples/bar_shearwave/quad4/kinematic_sliptime.spatialdb)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_sliptime.spatialdb (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/kinematic_sliptime.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,25 @@
+#SPATIAL.ascii 1
+SimpleDB {
+ // number of values for slip initiation time
+ num-values = 1
+
+ // Names and units of slip initiation time
+ value-names = slip-time
+ value-units = s
+
+ // Number of locations where physical properties are given
+ // 1 location -> data is uniform -> data dimension is 0
+ num-locs = 1
+ data-dim = 0
+
+ // Problem is in 2-D
+ space-dim = 2
+
+ // Coordinate system (2-D with coordinates in meters)
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 2
+ }
+}
+// Columns are x, y, slip-time
+0.0 0.0 0.1
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/mesh_quad4_200m.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/mesh_quad4_200m.jou 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/mesh_quad4_200m.jou 2010-05-30 21:53:47 UTC (rev 16840)
@@ -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
# ----------------------------------------------------------------------
@@ -25,7 +16,7 @@
# ----------------------------------------------------------------------
# Create blocks for materials
# ----------------------------------------------------------------------
-block 1 surface 9 10
+block 1 surface 8 9
block 1 name "elastic"
# ----------------------------------------------------------------------
@@ -38,24 +29,24 @@
# ----------------------------------------------------------------------
# Create nodeset for +x face
# ----------------------------------------------------------------------
-group "face_xpos" add node in curve 18
-nodeset 11 group face_xpos
-nodeset 11 name "face xpos"
+group "face_xpos" add node in curve 14
+nodeset 20 group face_xpos
+nodeset 20 name "face xpos"
# ----------------------------------------------------------------------
# Create nodeset for -x face
# ----------------------------------------------------------------------
-group "face_xneg" add node in curve 20
-nodeset 12 group face_xneg
-nodeset 12 name "face xneg"
+group "face_xneg" add node in curve 16
+nodeset 21 group face_xneg
+nodeset 21 name "face xneg"
# ----------------------------------------------------------------------
# Create nodeset for all vertices but fault
# ----------------------------------------------------------------------
group "vertices_nofault" add node all
group "vertices_nofault" remove node in fault
-nodeset 13 group vertices_nofault
-nodeset 13 name "vertices_nofault"
+nodeset 22 group vertices_nofault
+nodeset 22 name "vertices_nofault"
# ----------------------------------------------------------------------
# Export exodus file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,22 +1,22 @@
# -*- Python -*-
-
-# These settings define an explicit time-stepping problem using a fault with
-# kinematically-specified slip.
-
[pylithapp]
+# This is not a self-contained simulation configuration file. This
+# file only specifies the general parameters common to the simulations
+# in this directory.
+
# ----------------------------------------------------------------------
# journal
# ----------------------------------------------------------------------
+# Turn on some journals to show progress.
[pylithapp.journal.info]
timedependent = 1
-#explicit = 1
-#petsc = 1
+explicit = 1
+petsc = 1
meshiocubit = 1
-#explicitelasticity = 1
-#quadrature2d = 1
-#fiatlagrange = 1
-#faultcohesivekin = 1
+explicitelasticity = 1
+quadrature2d = 1
+fiatlagrange = 1
[pylithapp.journal.debug]
pylithapp = 1
@@ -27,10 +27,14 @@
# mesh_generator
# ----------------------------------------------------------------------
[pylithapp.mesh_generator]
+# uncomment to get very verbose mesh information
#debug = 1
+
+# Change the default mesh reader to the CUBIT reader.
reader = pylith.meshio.MeshIOCubit
[pylithapp.mesh_generator.reader]
+# Set filename of mesh to read and dimension for coordinate system.
filename = bar_quad4_200m.exo
coordsys.space_dim = 2
@@ -38,22 +42,21 @@
# problem
# ----------------------------------------------------------------------
[pylithapp.timedependent]
+# Set the spatial dimension of the problem.
dimension = 2
-# Change to an explicit time stepping formulation
-#formulation = pylith.problems.Explicit
-formulation = pylith.problems.ExplicitLumped
+# Change to an explicit time stepping formulation. We use explicit
+# time-stepping with a consistent (full) Jacobian matrix.
+formulation = pylith.problems.Explicit
# Nondimensionalize problem using wave propagation parameters.
normalizer = spatialdata.units.NondimElasticDynamic
+normalizer.shear_wave_speed = 1.0*km/s
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'y_pos'.
-bc = [x_pos,x_neg,y_pos]
+# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and
+# 'all_nofault'.
+bc = [x_pos,x_neg,all_nofault]
-# Change the DirichletPoints BC to the AbsorbingDampers BC
-bc.x_pos = pylith.bc.AbsorbingDampers
-bc.x_neg = pylith.bc.AbsorbingDampers
-
# Set interfaces to an array with 1 fault: 'fault'.
interfaces = [fault]
@@ -61,6 +64,7 @@
materials = [elastic]
[pylithapp.timedependent.formulation.time_step]
+# Set the total time of the simulation and the time step.
total_time = 12.0*s
dt = 0.05*s
@@ -68,6 +72,7 @@
# materials
# ----------------------------------------------------------------------
[pylithapp.timedependent.materials]
+# Use elastic plane strain bulk constitutive model.
elastic = pylith.materials.ElasticPlaneStrain
[pylithapp.timedependent.materials.elastic]
@@ -90,11 +95,16 @@
# ----------------------------------------------------------------------
# boundary conditions
# ----------------------------------------------------------------------
+[pylithapp.timedependent.bc]
+# Change the default Dirichlet BC to the AbsorbingDampers BC
+x_pos = pylith.bc.AbsorbingDampers
+x_neg = pylith.bc.AbsorbingDampers
+
[pylithapp.timedependent.bc.x_pos]
-# Absorbing boundary condition on +x face of bar
+# Absorbing BC on +x face of bar
-# Nodeset id from CUBIT
-label = 11
+# Name of nodeset in CUBIT
+label = face_xpos
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC +x
@@ -107,10 +117,10 @@
quadrature.cell.quad_order = 2
[pylithapp.timedependent.bc.x_neg]
-# Absorbing boundary condition on -x face of bar
+# Absorbing BC on -x face of bar
-# Nodeset id from CUBIT
-label = 12
+# Name of nodeset in CUBIT
+label = face_xneg
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC -x
@@ -122,18 +132,19 @@
quadrature.cell.dimension = 1
quadrature.cell.quad_order = 2
-[pylithapp.timedependent.bc.y_pos]
+[pylithapp.timedependent.bc.all_nofault]
# Dirichlet boundary condition on all vertices except fault vertices
-# Pin x and z degrees of freedom
+# Pin x degree of freedom
bc_dof = [0]
-# Nodeset id from CUBIT
-label = 13
+# Name of nodeset from CUBIT.
+label = vertices_nofault
# ----------------------------------------------------------------------
# faults
# ----------------------------------------------------------------------
+[pylithapp.timedependent.interfaces.fault]
# 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.
@@ -145,13 +156,11 @@
# 2. If you use the default fault ID, make sure that none of your
# material ID's are equal to 100.
-[pylithapp.timedependent.interfaces.fault]
-
# Material id
id = 100
-# Nodeset id from CUBIT
-label = 10
+# Name of nodeset from CUBIT
+label = fault
# Specify the basis functions and quadrature:
# 1-D Lagrange cell in 2-D space with 2nd order quadrature
@@ -159,65 +168,50 @@
quadrature.cell.dimension = 1
quadrature.cell.quad_order = 2
-# Switch to Brune slip time function
-eq_srcs.rupture.slip_function = pylith.faults.BruneSlipFn
-
-[pylithapp.timedependent.interfaces.fault.eq_srcs.rupture.slip_function]
-
-# Database specifying the final slip.
-slip.iohandler.filename = shearwave_slip.spatialdb
-
-# Database specifying rise_time.
-rise_time.iohandler.filename = shearwave_risetime.spatialdb
-
-# Database specifying time at which slip begins at each point.
-slip_time.iohandler.filename = shearwave_sliptime.spatialdb
-
# ----------------------------------------------------------------------
# PETSc
# ----------------------------------------------------------------------
[pylithapp.petsc]
-ksp_type = gmres
-pc_type = asm
-# Change the preconditioner settings.
+# Preconditioner settings.
+pc_type = asm
sub_pc_factor_shift_type = nonzero
+# Convergence parameters.
ksp_rtol = 1.0e-8
ksp_atol = 1.0e-12
-ksp_max_it = 50
-ksp_gmres_restart = 75
+ksp_max_it = 500
+ksp_gmres_restart = 100
+snes_max_it = 500
+# Linear solver monitoring options.
ksp_monitor = true
ksp_view = true
-#log_summary = true
+ksp_converged_reason = true
+# Nonlinear solver monitoring options.
+snes_monitor = true
+snes_view = true
+snes_converged_reason = true
+# PETSc summary -- useful for performance information.
+log_summary = true
+
# ----------------------------------------------------------------------
# output
# ----------------------------------------------------------------------
-# We set three output manager parameters for each type of output.
+# We set two output manager parameters for each type of output.
# skip - Number of time steps to skip between output
-# writer.filename - Root name for VTK file
# writer.time_format - Format of time stamp (decimal point is removed)
-
-# Give basename for VTK domain output of solution over domain.
+# We will set the output filename in the problem specific .cfg file.
[pylithapp.problem.formulation.output.output]
-skip = 3
-writer.filename = output/shearwave.vtk
+vertex_data_fields = [displacement,velocity]
+skip = 1
writer.time_format = %05.2f
-# Give basename for VTK fault output.
-[pylithapp.timedependent.interfaces.fault.output]
-skip = 3
-writer.filename = output/shearwave-fault.vtk
-writer.time_format = %05.2f
-
-# Give basename for VTK output of state variables.
[pylithapp.timedependent.materials.elastic.output]
-skip = 33
-writer.filename = output/shearwave-statevars.vtk
+skip = 19
writer.time_format = %05.2f
-# Averate state variables over cell
+# Averate state variables over quadrature points.
cell_filter = pylith.meshio.CellFilterAvgMesh
Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_risetime.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_risetime.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_risetime.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,25 +0,0 @@
-#SPATIAL.ascii 1
-SimpleDB {
- // number of values for rise time
- num-values = 1
-
- // Name and units for rise time
- value-names = rise-time
- value-units = s
-
- // Number of locations where physical properties are given
- // 1 location -> data is uniform -> data dimension is 0
- num-locs = 1
- data-dim = 0
-
- // Problem is in 2-D
- space-dim = 2
-
- // Coordinate system (2-D with coordinates in meters)
- cs-data = cartesian {
- to-meters = 1.0
- space-dim = 2
- }
-}
-// Columns are x, y, rise-time
-0.0 0.0 2.0
Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_slip.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_slip.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_slip.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,25 +0,0 @@
-#SPATIAL.ascii 1
-SimpleDB {
- // number of values for final slip
- num-values = 2
-
- // Names and units of final slip values
- value-names = left-lateral-slip fault-opening
- value-units = m m
-
- // Number of locations where physical properties are given
- // 1 location -> data is uniform -> data dimension is 0
- num-locs = 1
- data-dim = 0
-
- // Problem is in 2-D
- space-dim = 2
-
- // Coordinate system (2-D with coordinates in meters)
- cs-data = cartesian {
- to-meters = 1.0
- space-dim = 2
- }
-}
-// Columns are x, y, left-lateral-slip, fault-opening
-0.0 0.0 1.0 0.0
Deleted: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_sliptime.spatialdb
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_sliptime.spatialdb 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/quad4/shearwave_sliptime.spatialdb 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,25 +0,0 @@
-#SPATIAL.ascii 1
-SimpleDB {
- // number of values for slip initiation time
- num-values = 1
-
- // Names and units of slip initiation time
- value-names = slip-time
- value-units = s
-
- // Number of locations where physical properties are given
- // 1 location -> data is uniform -> data dimension is 0
- num-locs = 1
- data-dim = 0
-
- // Problem is in 2-D
- space-dim = 2
-
- // Coordinate system (2-D with coordinates in meters)
- cs-data = cartesian {
- to-meters = 1.0
- space-dim = 2
- }
-}
-// Columns are x, y, slip-time
-0.0 0.0 0.1
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tet4/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tet4/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tet4/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,11 +1,28 @@
# -*- Python -*-
+[pylithapp]
-# These settings define an explicit time-stepping problem using a fault with
-# kinematically-specified slip.
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
-[pylithapp]
+# Impose 1.0 m of left-lateral slip at time 0.1 s with slip rate
+# following Brune's far-field time function. The rise time (95% of the
+# final slip) is 2.0 s.
+#
+# The fault slip causes a shear wave to propagate down the bar. The
+# shear wave is absorbed at the lateral ends of the bar using the
+# absorbing dampers boundary condition.
# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is a self-contained simulation configuration file.
+#
+# To run the simulation:
+# pylith
+
+# ----------------------------------------------------------------------
# journal
# ----------------------------------------------------------------------
[pylithapp.journal.info]
@@ -42,14 +59,19 @@
# Change to an explicit time stepping formulation
formulation = pylith.problems.Explicit
+
+# Uncomment next line to use lumped formulation.
#formulation = pylith.problems.ExplicitLumped
+
+# Uncomment next line to use optimized lumped formulation and change
+# the quadrature order of the bulk material to 1.
#formulation = pylith.problems.ExplicitLumpedTet4
# Nondimensionalize problem using wave propagation parameters.
normalizer = spatialdata.units.NondimElasticDynamic
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'y_pos'.
-bc = [x_pos,x_neg,y_pos]
+# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'all_nofault'.
+bc = [x_pos,x_neg,all_nofault]
# Change the DirichletPoints BC to the AbsorbingDampers BC
bc.x_pos = pylith.bc.AbsorbingDampers
@@ -137,7 +159,7 @@
quadrature.cell.shape = triangle
quadrature.cell.quad_order = 2
-[pylithapp.timedependent.bc.y_pos]
+[pylithapp.timedependent.bc.all_nofault]
# Dirichlet boundary condition on all vertices except fault vertices
bc_dof = [0, 2]
@@ -216,19 +238,20 @@
# Give basename for VTK domain output of solution over domain.
[pylithapp.problem.formulation.output.output]
-skip = 3
+vertex_data_fields = [displacement,velocity]
+skip = 2
writer.filename = output/shearwave.vtk
writer.time_format = %05.2f
# Give basename for VTK fault output.
[pylithapp.timedependent.interfaces.fault.output]
-skip = 3
+skip = 2
writer.filename = output/shearwave-fault.vtk
writer.time_format = %05.2f
# Give basename for VTK output of state variables.
[pylithapp.timedependent.materials.pos.output]
-skip = 33
+skip = 29
writer.filename = output/shearwave-statevars-pos.vtk
writer.time_format = %05.2f
@@ -237,7 +260,7 @@
# Give basename for VTK output of state variables.
[pylithapp.timedependent.materials.neg.output]
-skip = 33
+skip = 29
writer.filename = output/shearwave-statevars-neg.vtk
writer.time_format = %05.2f
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/bar_tri3_200m.exo
===================================================================
(Binary files differ)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/geometry.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/geometry.jou 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/geometry.jou 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,11 +26,12 @@
# ----------------------------------------------------------------------
# Create fault (yz plane) at x = 0.0
-split surface 8 across location position 0 -200 0 location position 0 200 0
-curve 21 name "fault_surface"
+split surface 7 across location position 0 -200 0 location position 0 200 0
+curve 17 name "fault_surface"
# ----------------------------------------------------------------------
# Imprint all volumes, merging surfaces
# ----------------------------------------------------------------------
imprint all
merge all
+
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/mesh_tri3_200m.jou
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/mesh_tri3_200m.jou 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/mesh_tri3_200m.jou 2010-05-30 21:53:47 UTC (rev 16840)
@@ -20,7 +20,7 @@
# ----------------------------------------------------------------------
# Set the meshing scheme
# ----------------------------------------------------------------------
-surface 9 10 scheme trimesh
+surface 8 9 scheme trimesh
# ----------------------------------------------------------------------
# Generate the mesh
@@ -30,7 +30,7 @@
# ----------------------------------------------------------------------
# Create blocks for materials
# ----------------------------------------------------------------------
-block 1 surface 9 10
+block 1 surface 8 9
block 1 name "elastic"
# ----------------------------------------------------------------------
@@ -43,14 +43,14 @@
# ----------------------------------------------------------------------
# Create nodeset for +x face
# ----------------------------------------------------------------------
-group "face_xpos" add node in curve 18
+group "face_xpos" add node in curve 14
nodeset 11 group face_xpos
nodeset 11 name "face xpos"
# ----------------------------------------------------------------------
# Create nodeset for -x face
# ----------------------------------------------------------------------
-group "face_xneg" add node in curve 20
+group "face_xneg" add node in curve 16
nodeset 12 group face_xneg
nodeset 12 name "face xneg"
@@ -66,3 +66,4 @@
# Export exodus file
# ----------------------------------------------------------------------
export mesh "bar_tri3_200m.exo" dimension 2 overwrite
+
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/bar_shearwave/tri3/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,11 +1,28 @@
# -*- Python -*-
+[pylithapp]
-# These settings define an explicit time-stepping problem using a fault with
-# kinematically-specified slip.
+# ----------------------------------------------------------------------
+# PROBLEM DESCRIPTION
+# ----------------------------------------------------------------------
-[pylithapp]
+# Impose 1.0 m of left-lateral slip at time 0.1 s with slip rate
+# following Brune's far-field time function. The rise time (95% of the
+# final slip) is 2.0 s.
+#
+# The fault slip causes a shear wave to propagate down the bar. The
+# shear wave is absorbed at the lateral ends of the bar using the
+# absorbing dampers boundary condition.
# ----------------------------------------------------------------------
+# RUNNING THE SIMULATION
+# ----------------------------------------------------------------------
+
+# This is a self-contained simulation configuration file.
+#
+# To run the simulation:
+# pylith
+
+# ----------------------------------------------------------------------
# journal
# ----------------------------------------------------------------------
[pylithapp.journal.info]
@@ -47,8 +64,8 @@
# Nondimensionalize problem using wave propagation parameters.
normalizer = spatialdata.units.NondimElasticDynamic
-# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'y_pos'.
-bc = [x_pos,x_neg,y_pos]
+# Set bc to an array with 3 boundary conditions: 'x_neg', 'x_pos', and 'all_nofault'.
+bc = [x_pos,x_neg,all_nofault]
# Change the DirichletPoints BC to the AbsorbingDampers BC
bc.x_pos = pylith.bc.AbsorbingDampers
@@ -75,7 +92,7 @@
# Label for material
label = Elastic material
-# Nodeset id from CUBIT
+# Block id from CUBIT
id = 1
# Spatial database with physical properties for elastic material
@@ -93,8 +110,8 @@
[pylithapp.timedependent.bc.x_pos]
# Absorbing boundary condition on +x face of bar
-# Nodeset id from CUBIT
-label = 11
+# Nodeset name from CUBIT
+label = face_xpos
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC +x
@@ -109,8 +126,8 @@
[pylithapp.timedependent.bc.x_neg]
# Absorbing boundary condition on -x face of bar
-# Nodeset id from CUBIT
-label = 12
+# Nodeset name from CUBIT
+label = face_xneg
# Specify label and filename for spatial database with physical properties
db.label = Absorbing BC -x
@@ -122,14 +139,14 @@
quadrature.cell.shape = line
quadrature.cell.quad_order = 2
-[pylithapp.timedependent.bc.y_pos]
+[pylithapp.timedependent.bc.all_nofault]
# Dirichlet boundary condition on all vertices except fault vertices
# Pin x and z degrees of freedom
bc_dof = [0]
-# Nodeset id from CUBIT
-label = 13
+# Nodeset name from CUBIT
+label = vertices_nofault
# ----------------------------------------------------------------------
# faults
@@ -150,8 +167,8 @@
# Material id
id = 100
-# Nodeset id from CUBIT
-label = 10
+# Nodeset name from CUBIT
+label = fault
# Specify the basis functions and quadrature:
# 1-D simplex cell in 2-D space with 2nd order quadrature
@@ -186,7 +203,7 @@
ksp_rtol = 1.0e-8
ksp_atol = 1.0e-10
ksp_max_it = 50
-ksp_gmres_restart = 10
+ksp_gmres_restart = 25
#ksp_monitor = true
#ksp_view = true
@@ -203,19 +220,20 @@
# Give basename for VTK domain output of solution over domain.
[pylithapp.problem.formulation.output.output]
-skip = 3
+vertex_data_fields = [displacement,velocity]
+skip = 2
writer.filename = output/shearwave.vtk
writer.time_format = %05.2f
# Give basename for VTK fault output.
[pylithapp.timedependent.interfaces.fault.output]
-skip = 3
+skip = 2
writer.filename = output/shearwave-fault.vtk
writer.time_format = %05.2f
# Give basename for VTK output of state variables.
[pylithapp.timedependent.materials.elastic.output]
-skip = 33
+skip = 29
writer.filename = output/shearwave-statevars.vtk
writer.time_format = %05.2f
Modified: short/3D/PyLith/branches/pylith-scecdynrup/examples/greensfns/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/examples/greensfns/hex8/pylithapp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/examples/greensfns/hex8/pylithapp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -33,6 +33,7 @@
[pylithapp.mesh_generator.reader]
# Set filename of mesh to import.
filename = box_hex8_1000m.exo
+use_nodeset_names = False
# ----------------------------------------------------------------------
# problem
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -75,6 +75,7 @@
feassemble/IntegratorElasticity.cc \
feassemble/ElasticityImplicit.cc \
feassemble/ElasticityExplicit.cc \
+ feassemble/ElasticityExplicitTri3.cc \
feassemble/ElasticityExplicitTet4.cc \
feassemble/IntegratorElasticityLgDeform.cc \
feassemble/ElasticityImplicitLgDeform.cc \
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/BoundaryCondition.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/BoundaryCondition.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/BoundaryCondition.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -50,7 +50,7 @@
if (!sieveMesh->hasIntSection(_label)) {
std::ostringstream msg;
msg << "Mesh missing group of vertices '" << _label
- << " for boundary condition.";
+ << "' for boundary condition.";
throw std::runtime_error(msg.str());
} // if
} // verifyConfiguration
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -47,6 +47,12 @@
virtual
void deallocate(void);
+ /** Get number of constraints per location.
+ *
+ * @returns Number of constraints per location.
+ */
+ int numDimConstrained(void) const;
+
/** Initialize boundary condition.
*
* @param mesh PETSc mesh
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.icc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/DirichletBC.icc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -24,5 +24,12 @@
return *_normalizer;
}
+// Get number of constraints per location.
+inline
+int
+pylith::bc::DirichletBC::numDimConstrained(void) const {
+ return _bcDOF.size();
+}
+
// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -16,6 +16,7 @@
#include "pylith/topology/Field.hh" // USES Field
#include "pylith/topology/Fields.hh" // USES Fields
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
@@ -70,10 +71,9 @@
} // initialize
// ----------------------------------------------------------------------
-// Integrate contributions to residual term (r) for operator that
-// do not require assembly over cells, vertices, or processors.
+// Integrate contributions to residual term (r) for operator.
void
-pylith::bc::PointForce::integrateResidualAssembled(
+pylith::bc::PointForce::integrateResidual(
const topology::Field<topology::Mesh>& residual,
const double t,
topology::SolutionFields* const fields)
@@ -96,6 +96,14 @@
const ALE::Obj<RealSection>& residualSection = residual.section();
assert(!residualSection.isNull());
+ // Get global order
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ residualSection);
+ assert(!globalOrder.isNull());
+
double_array valuesVertex(numBCDOF);
const ALE::Obj<RealSection>& valueSection =
_parameters->get("value").section();
@@ -103,6 +111,11 @@
for (int iPoint=0; iPoint < numPoints; ++iPoint) {
const int p_bc = _points[iPoint]; // Get point label.
+
+ // Contribute to residual if point is local.
+ if (!globalOrder->isLocal(p_bc))
+ continue;
+
residualVertex *= 0.0; // Reset residual contribution to zero.
valueSection->restrictPoint(p_bc, &valuesVertex[0], valuesVertex.size());
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/bc/PointForce.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -57,9 +57,9 @@
* @param t Current time
* @param fields Solution fields
*/
- void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields);
+ void integrateResidual(const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields);
/** Verify configuration is acceptable.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -142,16 +142,19 @@
// ----------------------------------------------------------------------
// Integrate contributions to residual term (r) for operator.
void
-pylith::faults::FaultCohesiveDyn::integrateResidualAssembled(
+pylith::faults::FaultCohesiveDyn::integrateResidual(
const topology::Field<topology::Mesh>& residual,
const double t,
topology::SolutionFields* const fields)
-{ // integrateResidualAssembled
+{ // integrateResidual
assert(0 != fields);
assert(0 != _fields);
- FaultCohesiveLagrange::integrateResidualAssembled(residual, t, fields);
+ // Initial fault tractions have been assembled, so they do not need
+ // assembling across processors.
+ FaultCohesiveLagrange::integrateResidual(residual, t, fields);
+
// No contribution if no initial tractions are specified.
if (0 == _dbInitialTract)
return;
@@ -171,6 +174,13 @@
const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
assert(!slipSection.isNull());
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ residualSection);
+ assert(!globalOrder.isNull());
+
const int numVertices = _cohesiveVertices.size();
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_fault = _cohesiveVertices[iVertex].fault;
@@ -178,6 +188,10 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
// Get initial forces at fault vertex. Forces are in the global
// coordinate system so no rotation is necessary.
forcesInitialSection->restrictPoint(v_fault,
@@ -191,6 +205,7 @@
// only apply initial tractions if there is no opening
if (0.0 == slipVertex[spaceDim-1]) {
residualVertex = forcesInitialVertex;
+
assert(residualVertex.size() ==
residualSection->getFiberDimension(v_positive));
residualSection->updateAddPoint(v_positive, &residualVertex[0]);
@@ -203,7 +218,7 @@
} // for
PetscLogFlops(numVertices*spaceDim);
-} // integrateResidualAssembled
+} // integrateResidual
// ----------------------------------------------------------------------
// Update state variables as needed.
@@ -671,6 +686,10 @@
fields->get("dispIncr(t->t+dt)").section();
assert(!dispTIncrSection.isNull());
+ const ALE::Obj<RealSection>& dispTIncrAdjSection = fields->get(
+ "dispIncr adjust").section();
+ assert(!dispTIncrAdjSection.isNull());
+
double_array jacobianVertexN(spaceDim);
double_array jacobianVertexP(spaceDim);
const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
@@ -681,6 +700,13 @@
const ALE::Obj<RealSection>& residualSection =
fields->get("residual").section();
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ jacobianSection);
+ assert(!globalOrder.isNull());
+
adjustSolnLumped_fn_type adjustSolnLumpedFn;
constrainSolnSpace_fn_type constrainSolnSpaceFn;
sensitivitySolveLumped_fn_type sensitivitySolveLumpedFn;
@@ -728,6 +754,10 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(restrictEvent);
#endif
@@ -923,12 +953,12 @@
// Adjust displacements to account for Lagrange multiplier values
// (assumed to be zero in perliminary solve).
assert(dispTIncrVertexN.size() ==
- dispTIncrSection->getFiberDimension(v_negative));
- dispTIncrSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+ dispTIncrAdjSection->getFiberDimension(v_negative));
+ dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
assert(dispTIncrVertexP.size() ==
- dispTIncrSection->getFiberDimension(v_positive));
- dispTIncrSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+ dispTIncrAdjSection->getFiberDimension(v_positive));
+ dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
// Set Lagrange multiplier value. Value from preliminary solve is
// bogus due to artificial diagonal entry of 1.0.
@@ -1578,8 +1608,6 @@
const int spaceDim = _quadrature->spaceDim();
const int subnrows = numBasis*spaceDim;
const int submatrixSize = subnrows * subnrows;
- const int nrows = 3*subnrows;
- const int matrixSize = nrows * nrows;
// Get solution field
const topology::Field<topology::Mesh>& solutionDomain = fields.solution();
@@ -1598,17 +1626,16 @@
cellsCohesive->end();
// Visitor for Jacobian matrix associated with domain.
- double_array jacobianDomainCell(matrixSize);
const PetscMat jacobianDomainMatrix = jacobian.matrix();
assert(0 != jacobianDomainMatrix);
const ALE::Obj<SieveMesh::order_type>& globalOrderDomain =
sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", solutionDomainSection);
assert(!globalOrderDomain.isNull());
- // We would need to request unique points here if we had an interpolated mesh
- topology::Mesh::IndicesVisitor jacobianDomainVisitor(*solutionDomainSection,
- *globalOrderDomain,
- (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())));
+ int_array indicesGlobal(subnrows);
// Get fault Sieve mesh
const ALE::Obj<SieveSubMesh>& faultSieveMesh = _faultMesh->sieveMesh();
@@ -1620,7 +1647,7 @@
assert(!solutionFaultSection.isNull());
// Visitor for Jacobian matrix associated with fault.
- double_array jacobianFaultCell(submatrixSize);
+ double_array jacobianSubCell(submatrixSize);
assert(0 != _jacobian);
const PetscMat jacobianFaultMatrix = _jacobian->matrix();
assert(0 != jacobianFaultMatrix);
@@ -1633,47 +1660,50 @@
(int) pow(faultSieveMesh->getSieve()->getMaxConeSize(),
faultSieveMesh->depth())*spaceDim);
- const int indexOffset = (negativeSide) ? 0 : 3*submatrixSize + subnrows;
-
+ const int iCone = (negativeSide) ? 0 : 1;
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 == 3*numBasis);
+ const Mesh::point_type *cohesiveCone = ncV.getPoints();
+ assert(0 != cohesiveCone);
+
const SieveMesh::point_type c_fault = _cohesiveToFault[*c_iter];
- jacobianDomainCell = 0.0;
- jacobianFaultCell = 0.0;
+ jacobianSubCell = 0.0;
- // Get cell contribution in PETSc Matrix
- jacobianDomainVisitor.clear();
-#if 0
+ // Get indices
+ for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
+ // negative side of the fault: iCone=0
+ // positive side of the fault: iCone=1
+ const int v_domain = cohesiveCone[iCone*numBasis+iBasis];
+
+ for (int iDim=0, iB=iBasis*spaceDim; iDim < spaceDim; ++iDim) {
+ if (globalOrderDomain->isLocal(v_domain))
+ indicesGlobal[iB+iDim] = globalOrderDomain->getIndex(v_domain) + iDim;
+ else
+ indicesGlobal[iB+iDim] = -1;
- PetscErrorCode err = restrictOperator(jacobianDomainMatrix, *sieveMesh->getSieve(),
- jacobianDomainVisitor, *c_iter,
- &jacobianDomainCell[0]);
- CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-#else
- ALE::ISieveTraversal<SieveMesh::sieve_type>::orientedClosure(*sieveMesh->getSieve(),
- *c_iter,
- jacobianDomainVisitor);
- const int* indices = jacobianDomainVisitor.getValues();
- const int numIndices = jacobianDomainVisitor.getSize();
+ // Set matrix diagonal entries to 1.0 (used when vertex is not local).
+ jacobianSubCell[(iB+iDim)*numBasis*spaceDim+iB+iDim] = 1.0;
+ } // for
+ } // for
+
PetscErrorCode err = MatGetValues(jacobianDomainMatrix,
- numIndices, indices,
- numIndices, indices,
- &jacobianDomainCell[0]);
+ indicesGlobal.size(), &indicesGlobal[0],
+ indicesGlobal.size(), &indicesGlobal[0],
+ &jacobianSubCell[0]);
CHECK_PETSC_ERROR_MSG(err, "Restrict from PETSc Mat failed.");
-#endif
- for (int iRow=0, i=0; iRow < subnrows; ++iRow) {
- const int indexR = indexOffset + iRow*nrows;
- for (int iCol=0; iCol < subnrows; ++iCol, ++i)
- jacobianFaultCell[i] = jacobianDomainCell[indexR+iCol];
- } // for
-
// Insert cell contribution into PETSc Matrix
jacobianFaultVisitor.clear();
err = updateOperator(jacobianFaultMatrix, *faultSieveMesh->getSieve(),
jacobianFaultVisitor, c_fault,
- &jacobianFaultCell[0], INSERT_VALUES);
+ &jacobianSubCell[0], INSERT_VALUES);
CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
} // for
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveDyn.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -77,19 +77,19 @@
const double normalDir[3]);
/** Integrate contributions to residual term (r) for operator that
- * do not require assembly across cells, vertices, or processors.
+ * do not require assembly across processors.
*
- * Initial tractions (if specified) contribute to the residual like
- * Neumann boundary conditions.
+ * Initial tractions (if specified) are already assembled and
+ * contribute to the residual like Neumann boundary conditions.
*
* @param residual Field containing values for residual
* @param t Current time
* @param fields Solution fields
*/
virtual
- void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields);
+ void integrateResidual(const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields);
/** Update state variables as needed.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -113,10 +113,11 @@
// Integrate contribution of cohesive cells to residual term that do
// not require assembly across cells, vertices, or processors.
void
-pylith::faults::FaultCohesiveKin::integrateResidualAssembled(const topology::Field<
- topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields) { // integrateResidualAssembled
+pylith::faults::FaultCohesiveKin::integrateResidual(
+ const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields)
+{ // integrateResidual
assert(0 != fields);
assert(0 != _fields);
assert(0 != _logger);
@@ -137,9 +138,9 @@
_logger->eventEnd(setupEvent);
- FaultCohesiveLagrange::integrateResidualAssembled(residual, t, fields);
+ FaultCohesiveLagrange::integrateResidual(residual, t, fields);
-} // integrateResidualAssembled
+} // integrateResidual
// ----------------------------------------------------------------------
// Get vertex field associated with integrator.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveKin.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -80,9 +80,9 @@
* @param t Current time
* @param fields Solution fields
*/
- void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields);
+ void integrateResidual(const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields);
/** Get vertex field associated with integrator.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -37,6 +37,8 @@
#include <sstream> // USES std::ostringstream
#include <stdexcept> // USES std::runtime_error
+#include <petscblaslapack.h> // USES svd and dgemm
+
//#define PRECOMPUTE_GEOMETRY
//#define DETAILED_EVENT_LOGGING
@@ -44,6 +46,7 @@
typedef pylith::topology::Mesh::SieveMesh SieveMesh;
typedef pylith::topology::Mesh::RealSection RealSection;
typedef pylith::topology::SubMesh::SieveMesh SieveSubMesh;
+typedef pylith::topology::Mesh::RestrictVisitor RestrictVisitor;
// ----------------------------------------------------------------------
// Default constructor.
@@ -158,13 +161,13 @@
} // splitField
// ----------------------------------------------------------------------
-// Integrate contribution of cohesive cells to residual term that do
-// not require assembly across cells, vertices, or processors.
+// Integrate contribution of cohesive cells to residual term.
void
-pylith::faults::FaultCohesiveLagrange::integrateResidualAssembled(const topology::Field<
- topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields) { // integrateResidualAssembled
+pylith::faults::FaultCohesiveLagrange::integrateResidual(
+ const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields)
+{ // integrateResidual
assert(0 != fields);
assert(0 != _fields);
assert(0 != _logger);
@@ -225,6 +228,12 @@
const ALE::Obj<RealSection>& dispTIncrSection = dispTIncr.section();
assert(!dispTIncrSection.isNull());
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", residualSection);
+ assert(!globalOrder.isNull());
+
_logger->eventEnd(setupEvent);
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(computeEvent);
@@ -237,6 +246,10 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(restrictEvent);
#endif
@@ -319,16 +332,16 @@
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
#endif
-} // integrateResidualAssembled
+} // integrateResidual
// ----------------------------------------------------------------------
-// Compute Jacobian matrix (A) associated with operator that do not
-// require assembly across cells, vertices, or processors.
+// Compute Jacobian matrix (A) associated with operator.
void
-pylith::faults::FaultCohesiveLagrange::integrateJacobianAssembled(topology::Jacobian* jacobian,
- const double t,
- topology::SolutionFields* const fields)
-{ // integrateJacobianAssembled
+pylith::faults::FaultCohesiveLagrange::integrateJacobian(
+ topology::Jacobian* jacobian,
+ const double t,
+ topology::SolutionFields* const fields)
+{ // integrateJacobian
assert(0 != jacobian);
assert(0 != fields);
assert(0 != _fields);
@@ -390,6 +403,10 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(restrictEvent);
#endif
@@ -414,7 +431,7 @@
indicesL.size(), &indicesL[0],
indicesP.size(), &indicesP[0],
&jacobianVertex[0],
- INSERT_VALUES);
+ ADD_VALUES);
// Values at negative vertex, entry L,N in Jacobian
jacobianVertex *= -1.0;
@@ -422,19 +439,22 @@
indicesL.size(), &indicesL[0],
indicesN.size(), &indicesN[0],
&jacobianVertex[0],
- INSERT_VALUES);
+ 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];
+ jacobianVertex[iDim*spaceDim+jDim] =
+ orientationVertex[jDim*spaceDim+iDim];
+
// Values at positive vertex, entry P,L in Jacobian
MatSetValues(jacobianMatrix,
indicesP.size(), &indicesP[0],
indicesL.size(), &indicesL[0],
&jacobianVertex[0],
- INSERT_VALUES);
+ ADD_VALUES);
// Values at negative vertex, entry L,N in Jacobian
jacobianVertex *= -1.0;
@@ -442,7 +462,7 @@
indicesN.size(), &indicesN[0],
indicesL.size(), &indicesL[0],
&jacobianVertex[0],
- INSERT_VALUES);
+ ADD_VALUES);
// Values at Lagrange vertex, entry L,L in Jacobian
jacobianVertex = 0.0;
@@ -450,10 +470,10 @@
indicesL.size(), &indicesL[0],
indicesL.size(), &indicesL[0],
&jacobianVertex[0],
- INSERT_VALUES);
+ ADD_VALUES);
#if defined(DETAILED_EVENT_LOGGING)
- PetscLogFlops(numVertices*(spaceDim*spaceDim*2));
+ PetscLogFlops(spaceDim*spaceDim*2);
_logger->eventBegin(updateEvent);
#endif
@@ -465,17 +485,16 @@
#endif
_needNewJacobian = false;
-} // integrateJacobianAssembled
+} // integrateJacobian
// ----------------------------------------------------------------------
-// Compute Jacobian matrix (A) associated with operator that do not
-// require assembly across cells, vertices, or processors.
+// Compute Jacobian matrix (A) associated with operator.
void
-pylith::faults::FaultCohesiveLagrange::integrateJacobianAssembled(
+pylith::faults::FaultCohesiveLagrange::integrateJacobian(
topology::Field<topology::Mesh>* jacobian,
const double t,
topology::SolutionFields* const fields)
-{ // integrateJacobianAssembled
+{ // integrateJacobian
assert(0 != jacobian);
assert(0 != fields);
assert(0 != _fields);
@@ -500,6 +519,12 @@
const ALE::Obj<RealSection>& jacobianSection = jacobian->section();
assert(!jacobianSection.isNull());
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", jacobianSection);
+ assert(!globalOrder.isNull());
+
_logger->eventEnd(setupEvent);
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(computeEvent);
@@ -509,6 +534,10 @@
for (int iVertex=0; iVertex < numVertices; ++iVertex) {
const int v_lagrange = _cohesiveVertices[iVertex].lagrange;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
assert(jacobianSection->getFiberDimension(v_lagrange) == spaceDim);
#if defined(DETAILED_EVENT_LOGGING)
@@ -526,9 +555,629 @@
#endif
_needNewJacobian = false;
-} // integrateJacobianAssembled
+} // integrateJacobian
// ----------------------------------------------------------------------
+// Integrate contributions to Jacobian matrix (A) associated with
+// operator.
+void
+pylith::faults::FaultCohesiveLagrange::calcPreconditioner(
+ PetscMat* const precondMatrix,
+ topology::Jacobian* const jacobian,
+ topology::SolutionFields* const fields)
+{ // calcPreconditioner
+ assert(0 != precondMatrix);
+ assert(0 != jacobian);
+ assert(0 != fields);
+ assert(0 != _fields);
+ assert(0 != _logger);
+
+ /** We have J = [A C^T]
+ * [C 0]
+ *
+ * We want to approximate -( C A^(-1) C^T)^(-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.
+ *
+ * If we approximate A(-1) by 1/diag(A), then we can write
+ * C A^(-1) C^T for a 2-D case as
+ *
+ * [-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:
+ * -1.0 / (R00^2 (Ai_nx + Ai_px) + R01^2 (Ai_ny + Ai_py))
+ *
+ * Term for DOF y of vertex L is:
+ * -1.0 / (R10^2 (Ai_nx + Ai_px) + R11^2 (Ai_ny + Ai_py))
+ *
+ * Translate DOF for global vertex L into DOF in split field for
+ * preconditioner.
+ */
+
+#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");
+ 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 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);
+ 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>& 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 =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ solutionSection);
+ assert(!globalOrder.isNull());
+
+ // Get Jacobian matrix
+ const PetscMat jacobianMatrix = jacobian->matrix();
+ assert(0 != jacobianMatrix);
+
+ const ALE::Obj<SieveMesh::order_type>& lagrangeGlobalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "faultDefault",
+ solutionSection, spaceDim);
+ assert(!lagrangeGlobalOrder.isNull());
+
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+
+ 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_negative = _cohesiveVertices[iVertex].negative;
+ const int v_positive = _cohesiveVertices[iVertex].positive;
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(restrictEvent);
+#endif
+
+ // Get orientations at fault cell's vertices.
+ orientationSection->restrictPoint(v_fault, &orientationVertex[0],
+ orientationVertex.size());
+
+ // Set global order indices
+ indicesN = indicesRel + globalOrder->getIndex(v_negative);
+ indicesP = indicesRel + globalOrder->getIndex(v_positive);
+
+ PetscErrorCode err = 0;
+
+ err = MatGetValues(jacobianMatrix,
+ indicesN.size(), &indicesN[0],
+ indicesN.size(), &indicesN[0],
+ &jacobianVertexN[0]); CHECK_PETSC_ERROR(err);
+ err = MatGetValues(jacobianMatrix,
+ indicesP.size(), &indicesP[0],
+ indicesP.size(), &indicesP[0],
+ &jacobianVertexP[0]); CHECK_PETSC_ERROR(err);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(restrictEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Compute inverse of Jacobian diagonals
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ jacobianInvVertexN[iDim] = 1.0/jacobianVertexN[iDim*spaceDim+iDim];
+ 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]
+ // Adiag^{-1}_{ii} = jacobianInvVertexN[i] + jacobianInvVertexP[i] (BRAD: Are you sure its not a minus sign here?)
+ // \sum_{j} C_{ij} Adiag^{-1}_{jj} C^T_{ji}
+ precondVertexL = 0.0;
+ for (int kDim=0; kDim < spaceDim; ++kDim) {
+ double value = 0.0;
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ value -=
+ orientationVertex[kDim*spaceDim+iDim] *
+ orientationVertex[kDim*spaceDim+iDim] *
+ (jacobianInvVertexN[iDim] + jacobianInvVertexP[iDim]);
+ if (fabs(value) > 1.0e-8)
+ precondVertexL[kDim] = 1.0 / value;
+ } // for
+
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ for (int iDim=0; iDim < spaceDim; ++iDim) {
+ std::cout << "Vertex " << v_lagrange << " J^{-1}_{nn}["<<iDim<<"] " << jacobianInvVertexN[iDim] << " J^{-1}_{pp}["<<iDim<<"] " << jacobianInvVertexP[iDim] << " M["<<iDim<<"] " << precondVertexL[iDim] << std::endl;
+ }
+
+ // Set global preconditioner index associated with Lagrange constraint vertex.
+ const int indexLprecond = lagrangeGlobalOrder->getIndex(v_lagrange);
+
+ // Set diagonal entries in preconditioned matrix.
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ MatSetValue(*precondMatrix,
+ indexLprecond + iDim,
+ indexLprecond + iDim,
+ precondVertexL[iDim],
+ INSERT_VALUES);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(spaceDim*spaceDim*4);
+ _logger->eventEnd(updateEvent);
+#endif
+
+ } // for
+
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(computeEvent);
+ PetscLogFlops(numVertices*(spaceDim*spaceDim*4));
+#endif
+
+#else // FULL PRECONDITIONER
+
+ // Compute -( [C] [A]^(-1) [C]^T )^-1 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);
+ double_array preconditionerInvCell(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
+ topology::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;
+ preconditionerInvCell = 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;
+
+ preconditionerInvCell[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 1
+ std::cout << "1/P_cell " << *c_iter << std::endl;
+ for(int i = 0; i < nrowsF; ++i) {
+ for(int j = 0; j < nrowsF; ++j) {
+ std::cout << " " << preconditionerInvCell[i*nrowsF+j];
+ }
+ std::cout << std::endl;
+ }
+#endif
+
+ // Invert (C Ai C^T)
+
+ // Transpose matrices so we can call LAPACK
+ for(int i = 0; i < nrowsF; ++i) {
+ for(int j = 0; j < i; ++j) {
+ PetscInt k = i*nrowsF+j;
+ PetscInt kp = j*nrowsF+i;
+ PetscScalar tmp;
+ tmp = preconditionerInvCell[k];
+ preconditionerInvCell[k] = preconditionerInvCell[kp];
+ preconditionerInvCell[kp] = tmp;
+ }
+ }
+ LAPACKgesvd_("A", "A", &elemRows, &elemRows, &preconditionerInvCell[0], &elemRows, &singularValuesN[0], &UN[0], &elemRows, &VNt[0], &elemRows, &work[0], &workSize, &berr);
+ CHECK_PETSC_ERROR_MSG(berr, "Inversion of preconditioner element matrix failed.");
+
+#if 1
+ for(int i = 0; i < nrowsF; ++i) {
+ std::cout << "sigmaN["<<i<<"]: " << singularValuesN[i] << " sigmaP["<<i<<"]: " << singularValuesP[i] << std::endl;
+ }
+ std::cout << "UN_cell " << *c_iter << std::endl;
+ for(int i = 0; i < nrowsF; ++i) {
+ for(int j = 0; j < nrowsF; ++j) {
+ std::cout << " " << UN[j*nrowsF+i];
+ }
+ std::cout << std::endl;
+ }
+ std::cout << "VNt_cell " << *c_iter << std::endl;
+ for(int i = 0; i < nrowsF; ++i) {
+ for(int j = 0; j < nrowsF; ++j) {
+ std::cout << " " << VNt[j*nrowsF+i];
+ }
+ std::cout << std::endl;
+ }
+#endif
+
+ // Row scale Vt by the inverse of the singular values
+ for(int i = 0; i < nrowsF; ++i) {
+ const PetscReal invN = singularValuesN[i] > 1.0e-10 ? 1.0/singularValuesN[i] : 0.0;
+ const PetscReal invP = singularValuesP[i] > 1.0e-10 ? 1.0/singularValuesP[i] : 0.0;
+
+ for(int j = 0; j < nrowsF; ++j) {
+ VNt[j*nrowsF+i] *= invN;
+ VPt[j*nrowsF+i] *= invP;
+ }
+ }
+ BLASgemm_("N", "N", &elemRows, &elemRows, &elemRows, &one, &UN[0], &elemRows, &VNt[0], &elemRows, &one, &preconditionerCell[0], &elemRows);
+
+ // Transpose matrices from LAPACK
+ for(int i = 0; i < nrowsF; ++i) {
+ for(int j = 0; j < i; ++j) {
+ PetscInt k = i*nrowsF+j;
+ PetscInt kp = j*nrowsF+i;
+ PetscScalar tmp;
+ tmp = preconditionerCell[k];
+ preconditionerCell[k] = preconditionerCell[kp];
+ preconditionerCell[kp] = tmp;
+ }
+ }
+
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#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
+
+// ----------------------------------------------------------------------
// Adjust solution from solver with lumped Jacobian to match Lagrange
// multiplier constraints.
void
@@ -590,17 +1239,30 @@
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 lagrangeIncrVertex(spaceDim);
+ double_array lagrangeTIncrVertex(spaceDim);
const ALE::Obj<RealSection>& dispTIncrSection = fields->get(
"dispIncr(t->t+dt)").section();
+ assert(!dispTIncrSection.isNull());
+ const ALE::Obj<RealSection>& dispTIncrAdjSection = fields->get(
+ "dispIncr adjust").section();
+ assert(!dispTIncrAdjSection.isNull());
+
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", jacobianSection);
+ assert(!globalOrder.isNull());
+
adjustSolnLumped_fn_type adjustSolnLumpedFn;
switch (spaceDim) { // switch
case 1:
@@ -634,6 +1296,10 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
+ // Compute contribution only if Lagrange constraint is local.
+ if (!globalOrder->isLocal(v_lagrange))
+ continue;
+
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventBegin(restrictEvent);
#endif
@@ -669,7 +1335,7 @@
#endif
CALL_MEMBER_FN(*this,
- adjustSolnLumpedFn)(&lagrangeIncrVertex,
+ adjustSolnLumpedFn)(&lagrangeTIncrVertex,
&dispTIncrVertexN, &dispTIncrVertexP,
slipVertex, orientationVertex,
dispTVertexN, dispTVertexP,
@@ -682,20 +1348,20 @@
#endif
// 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() ==
- dispTIncrSection->getFiberDimension(v_negative));
- dispTIncrSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+ dispTIncrAdjSection->getFiberDimension(v_negative));
+ dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
assert(dispTIncrVertexP.size() ==
- dispTIncrSection->getFiberDimension(v_positive));
- dispTIncrSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+ dispTIncrAdjSection->getFiberDimension(v_positive));
+ 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(lagrangeIncrVertex.size() ==
+ assert(lagrangeTIncrVertex.size() ==
dispTIncrSection->getFiberDimension(v_lagrange));
- dispTIncrSection->updatePoint(v_lagrange, &lagrangeIncrVertex[0]);
+ dispTIncrSection->updatePoint(v_lagrange, &lagrangeTIncrVertex[0]);
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(updateEvent);
@@ -835,7 +1501,6 @@
const ALE::Obj<SieveMesh::sieve_type>& sieve = mesh.sieveMesh()->getSieve();
assert(!sieve.isNull());
- typedef ALE::SieveAlg<SieveMesh> SieveAlg;
ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type> ncV(*sieve,
(size_t) pow(sieve->getMaxConeSize(), std::max(0, sieveMesh->depth())));
@@ -912,6 +1577,12 @@
_logger->registerEvent("FaIJ compute");
_logger->registerEvent("FaIJ restrict");
_logger->registerEvent("FaIJ update");
+
+ _logger->registerEvent("FaPr setup");
+ _logger->registerEvent("FaPr geometry");
+ _logger->registerEvent("FaPr compute");
+ _logger->registerEvent("FaPr restrict");
+ _logger->registerEvent("FaPr update");
} // initializeLogger
// ----------------------------------------------------------------------
@@ -991,7 +1662,6 @@
const ALE::Obj<SieveSubMesh::sieve_type>& sieve = faultSieveMesh->getSieve();
assert(!sieve.isNull());
- typedef ALE::SieveAlg<SieveSubMesh> SieveAlg;
ALE::ISieveVisitor::NConeRetriever<SieveMesh::sieve_type>
ncV(*sieve, (size_t) pow(sieve->getMaxConeSize(), std::max(0,
@@ -1130,7 +1800,6 @@
// 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);
@@ -1314,7 +1983,7 @@
// Adjust solution in lumped formulation to match slip for 1-D.
void
pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped1D(
- double_array* lagrangeIncr,
+ double_array* lagrangeTIncr,
double_array* dispTIncrN,
double_array* dispTIncrP,
const double_array& slip,
@@ -1326,7 +1995,7 @@
const double_array& jacobianN,
const double_array& jacobianP)
{ // _adjustSoln1D
- assert(0 != lagrangeIncr);
+ assert(0 != lagrangeTIncr);
assert(0 != dispTIncrN);
assert(0 != dispTIncrP);
@@ -1352,7 +2021,7 @@
(*dispTIncrP)[0] = -1.0 / jacobianP[0] * dlp;
// Update Lagrange multiplier.
- (*lagrangeIncr)[0] = dlp;
+ (*lagrangeTIncr)[0] = dlp;
PetscLogFlops(17);
} // _adjustSoln1D
@@ -1361,7 +2030,7 @@
// Adjust solution in lumped formulation to match slip for 2-D.
void
pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped2D(
- double_array* lagrangeIncr,
+ double_array* lagrangeTIncr,
double_array* dispTIncrN,
double_array* dispTIncrP,
const double_array& slip,
@@ -1373,7 +2042,7 @@
const double_array& jacobianN,
const double_array& jacobianP)
{ // _adjustSoln2D
- assert(0 != lagrangeIncr);
+ assert(0 != lagrangeTIncr);
assert(0 != dispTIncrN);
assert(0 != dispTIncrP);
@@ -1423,8 +2092,8 @@
(*dispTIncrP)[1] = -dly / jacobianP[0];
// Update Lagrange multiplier.
- (*lagrangeIncr)[0] = dlp;
- (*lagrangeIncr)[1] = dlq;
+ (*lagrangeTIncr)[0] = dlp;
+ (*lagrangeTIncr)[1] = dlq;
PetscLogFlops(41);
} // _adjustSoln2D
@@ -1433,7 +2102,7 @@
// Adjust solution in lumped formulation to match slip for 3-D.
void
pylith::faults::FaultCohesiveLagrange::_adjustSolnLumped3D(
- double_array* lagrangeIncr,
+ double_array* lagrangeTIncr,
double_array* dispTIncrN,
double_array* dispTIncrP,
const double_array& slip,
@@ -1445,7 +2114,7 @@
const double_array& jacobianN,
const double_array& jacobianP)
{ // _adjustSoln3D
- assert(0 != lagrangeIncr);
+ assert(0 != lagrangeTIncr);
assert(0 != dispTIncrN);
assert(0 != dispTIncrP);
@@ -1513,9 +2182,9 @@
(*dispTIncrP)[2] = -dlz / jacobianP[2];
// Update Lagrange multiplier.
- (*lagrangeIncr)[0] = dlp;
- (*lagrangeIncr)[1] = dlq;
- (*lagrangeIncr)[2] = dlr;
+ (*lagrangeTIncr)[0] = dlp;
+ (*lagrangeTIncr)[1] = dlq;
+ (*lagrangeTIncr)[2] = dlr;
PetscLogFlops(72);
} // _adjustSoln3D
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/faults/FaultCohesiveLagrange.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -117,43 +117,57 @@
void splitField(topology::Field<topology::Mesh>* field);
/** Integrate contributions to residual term (r) for operator that
- * do not require assembly across cells, vertices, or processors.
+ * require assembly processors.
*
* @param residual Field containing values for residual
* @param t Current time
* @param fields Solution fields
*/
virtual
- void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
+ void integrateResidual(const topology::Field<topology::Mesh>& residual,
const double t,
topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly across cells, vertices, or
- * processors.
+ * operator that require assembly across processors.
*
* @param jacobian Sparse matrix
* @param t Current time
* @param fields Solution fields
*/
virtual
- void integrateJacobianAssembled(topology::Jacobian* jacobian,
+ void integrateJacobian(topology::Jacobian* jacobian,
const double t,
topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly across cells, vertices, or
- * processors.
+ * operator that require assembly processors.
*
* @param jacobian Diagonal Jacobian matrix as a field.
* @param t Current time
* @param fields Solution fields
*/
virtual
- void integrateJacobianAssembled(topology::Field<topology::Mesh>* jacobian,
+ void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
const double t,
topology::SolutionFields* const fields);
+ /** Compute custom fault precoditioner using Schur complement.
+ *
+ * We have J = [A C^T]
+ * [C 0]
+ *
+ * We approximate C A^(-1) C^T.
+ *
+ * @param pc PETSc preconditioner structure.
+ * @param jacobian Sparse matrix for Jacobian of system.
+ * @param fields Solution fields
+ */
+ virtual
+ void calcPreconditioner(PetscMat* const precondMatrix,
+ topology::Jacobian* const jacobian,
+ topology::SolutionFields* const fields);
+
/** Adjust solution from solver with lumped Jacobian to match Lagrange
* multiplier constraints.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Constraint.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Constraint.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Constraint.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -53,6 +53,21 @@
*/
void normalizer(const spatialdata::units::Nondimensional& dim);
+ /** Set flag for setting constraints for total field solution or
+ * incremental field solution.
+ *
+ * @param flag True if using incremental solution, false otherwise.
+ */
+ virtual
+ void useSolnIncr(const bool flag);
+
+ /** Get number of constraints per location.
+ *
+ * @returns Number of constraints per location.
+ */
+ virtual
+ int numDimConstrained(void) const = 0;
+
/** Set number of degrees of freedom that are constrained at points in field.
*
* @param field Solution field
@@ -67,14 +82,6 @@
virtual
void setConstraints(const topology::Field<topology::Mesh>& field) = 0;
- /** Set flag for setting constraints for total field solution or
- * incremental field solution.
- *
- * @param flag True if using incremental solution, false otherwise.
- */
- virtual
- void useSolnIncr(const bool flag);
-
/** Set values in field.
*
* @param t Current time
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicit.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicit.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -319,6 +319,7 @@
// Compute B(transpose) * sigma, first computing strains
calcTotalStrainFn(&strainCell, basisDeriv, dispCell,
numBasis, numQuadPts);
+
const double_array& stressCell = _material->calcStress(strainCell, true);
#if defined(DETAILED_EVENT_LOGGING)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -249,7 +249,8 @@
quadPtsGlobal = 0.0;
for (int iBasis=0; iBasis < numBasis; ++iBasis)
for (int iDim=0; iDim < spaceDim; ++iDim)
- quadPtsGlobal[iDim] += 0.25 * coordinatesCell[iBasis*spaceDim+iDim];
+ quadPtsGlobal[iDim] +=
+ coordinatesCell[iBasis*spaceDim+iDim] / numBasis;
_normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
lengthScale);
@@ -545,7 +546,8 @@
quadPtsGlobal = 0.0;
for (int iBasis=0; iBasis < numBasis; ++iBasis)
for (int iDim=0; iDim < spaceDim; ++iDim)
- quadPtsGlobal[iDim] += 0.25 * coordinatesCell[iBasis*spaceDim+iDim];
+ quadPtsGlobal[iDim] +=
+ coordinatesCell[iBasis*spaceDim+iDim] / numBasis;
_normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
lengthScale);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTet4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -143,7 +143,7 @@
*/
double _volume(const double_array& coordinatesCell) const;
- /** Compute volume of tetrahedral cell.
+ /** Compute derivatives of basis functions of tetrahedral cell.
*
* @param coordinatesCell Coordinates of vertices of cell.
* @returns Derivatives of basis functions.
Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.cc (from rev 16839, short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitTri3.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.cc (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,915 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "ElasticityExplicitTri3.hh" // implementation of class methods
+
+#include "Quadrature.hh" // USES Quadrature
+
+#include "pylith/materials/ElasticMaterial.hh" // USES ElasticMaterial
+#include "pylith/topology/Field.hh" // USES Field
+#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/macrodefs.h" // USES CALL_MEMBER_FN
+#include "pylith/utils/lapack.h" // USES LAPACKdgesvd
+
+#include "petscmat.h" // USES PetscMat
+#include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimendional
+
+#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
+#include <cassert> // USES assert()
+#include <stdexcept> // USES std::runtime_error
+
+//#define DETAILED_EVENT_LOGGING
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+typedef pylith::topology::Mesh::RestrictVisitor RestrictVisitor;
+typedef pylith::topology::Mesh::UpdateAddVisitor UpdateAddVisitor;
+
+// ----------------------------------------------------------------------
+const int pylith::feassemble::ElasticityExplicitTri3::_spaceDim = 2;
+const int pylith::feassemble::ElasticityExplicitTri3::_cellDim = 2;
+const int pylith::feassemble::ElasticityExplicitTri3::_tensorSize = 3;
+const int pylith::feassemble::ElasticityExplicitTri3::_numBasis = 3;
+const int pylith::feassemble::ElasticityExplicitTri3::_numQuadPts = 1;
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::ElasticityExplicitTri3::ElasticityExplicitTri3(void) :
+ _dtm1(-1.0)
+{ // constructor
+ _basisDerivArray.resize(_numQuadPts*_numBasis*_spaceDim);
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::ElasticityExplicitTri3::~ElasticityExplicitTri3(void)
+{ // destructor
+ deallocate();
+} // destructor
+
+// ----------------------------------------------------------------------
+// Deallocate PETSc and local data structures.
+void
+pylith::feassemble::ElasticityExplicitTri3::deallocate(void)
+{ // deallocate
+ IntegratorElasticity::deallocate();
+} // deallocate
+
+// ----------------------------------------------------------------------
+// Set time step for advancing from time t to time t+dt.
+void
+pylith::feassemble::ElasticityExplicitTri3::timeStep(const double dt)
+{ // timeStep
+ if (_dt != -1.0)
+ _dtm1 = _dt;
+ else
+ _dtm1 = dt;
+ _dt = dt;
+ assert(_dt == _dtm1); // For now, don't allow variable time step
+ if (0 != _material)
+ _material->timeStep(_dt);
+} // timeStep
+
+// ----------------------------------------------------------------------
+// Set flag for setting constraints for total field solution or
+// incremental field solution.
+void
+pylith::feassemble::ElasticityExplicitTri3::useSolnIncr(const bool flag)
+{ // useSolnIncr
+ if (!flag)
+ throw std::logic_error("Non-incremental solution not supported for "
+ "explicit time integration of elasticity "
+ "equation.");
+} // useSolnIncr
+
+// ----------------------------------------------------------------------
+// Integrate constributions to residual term (r) for operator.
+void
+pylith::feassemble::ElasticityExplicitTri3::integrateResidual(
+ const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields)
+{ // integrateResidual
+ assert(0 != _quadrature);
+ assert(0 != _material);
+ assert(0 != _logger);
+ assert(0 != fields);
+
+ const int setupEvent = _logger->eventId("ElIR setup");
+ const int geometryEvent = _logger->eventId("ElIR geometry");
+ const int computeEvent = _logger->eventId("ElIR compute");
+ const int restrictEvent = _logger->eventId("ElIR restrict");
+ const int stateVarsEvent = _logger->eventId("ElIR stateVars");
+ const int stressEvent = _logger->eventId("ElIR stress");
+ const int updateEvent = _logger->eventId("ElIR update");
+
+ _logger->eventBegin(setupEvent);
+
+ // Get cell geometry information that doesn't depend on cell
+ assert(_quadrature->numQuadPts() == _numQuadPts);
+ const double_array& quadWts = _quadrature->quadWts();
+ assert(quadWts.size() == _numQuadPts);
+ assert(_quadrature->numBasis() == _numBasis);
+ assert(_quadrature->spaceDim() == _spaceDim);
+ assert(_quadrature->cellDim() == _cellDim);
+ assert(_material->tensorSize() == _tensorSize);
+ const int spaceDim = _spaceDim;
+ const int cellDim = _cellDim;
+ const int tensorSize = _tensorSize;
+ const int numBasis = _numBasis;
+ const int numQuadPts = _numQuadPts;
+ /** :TODO:
+ *
+ * If cellDim and spaceDim are different, we need to transform
+ * displacements into cellDim, compute action, and transform result
+ * back into spaceDim. We get this information from the Jacobian and
+ * inverse of the Jacobian.
+ */
+ if (cellDim != spaceDim)
+ throw std::logic_error("Integration for cells with spatial dimensions "
+ "different than the spatial dimension of the "
+ "domain not implemented yet.");
+
+ // Allocate vectors for cell values.
+ double_array strainCell(numQuadPts*tensorSize);
+ strainCell = 0.0;
+ double_array gravVec(spaceDim);
+ double_array quadPtsGlobal(numQuadPts*spaceDim);
+
+ // Get cell information
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const int materialId = _material->id();
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->getLabelStratum("material-id", materialId);
+ assert(!cells.isNull());
+ const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+ const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+ // Get sections
+ double_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 dispCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& dispSection =
+ fields->get("disp(t)").section();
+ assert(!dispSection.isNull());
+ RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
+
+ const ALE::Obj<RealSection>& residualSection = residual.section();
+ UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
+
+ double_array coordinatesCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& coordinates =
+ sieveMesh->getRealSection("coordinates");
+ assert(!coordinates.isNull());
+ RestrictVisitor coordsVisitor(*coordinates,
+ coordinatesCell.size(), &coordinatesCell[0]);
+
+ assert(0 != _normalizer);
+ const double lengthScale = _normalizer->lengthScale();
+ const double gravityScale =
+ _normalizer->pressureScale() / (_normalizer->lengthScale() *
+ _normalizer->densityScale());
+
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Loop over cells
+ for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(geometryEvent);
+#endif
+
+ // Compute geometry information for current cell
+ coordsVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+ const double area = _area(coordinatesCell);
+ assert(area > 0.0);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(geometryEvent);
+ _logger->eventBegin(stateVarsEvent);
+#endif
+
+ // Get state variables for cell.
+ _material->retrievePropsAndVars(*c_iter);
+
+ #if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(stateVarsEvent);
+ _logger->eventBegin(restrictEvent);
+#endif
+
+ // Reset element vector to zero
+ _resetCellVector();
+
+ // Restrict input fields to cell
+ accVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, accVisitor);
+
+ dispVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, dispVisitor);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(restrictEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ const double_array& density = _material->calcDensity();
+ assert(density.size() == 1);
+
+ // Compute body force vector if gravity is being used.
+ if (0 != _gravityField) {
+ const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
+ assert(0 != cs);
+
+ quadPtsGlobal = 0.0;
+ for (int iBasis=0; iBasis < numBasis; ++iBasis)
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ quadPtsGlobal[iDim] +=
+ coordinatesCell[iBasis*spaceDim+iDim] / numBasis;
+ _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+ lengthScale);
+
+ // Compute action for element body forces
+ const int err = _gravityField->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;
+ for (int iBasis=0; iBasis < numBasis; ++iBasis)
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
+ PetscLogFlops(numBasis*spaceDim*2 + numBasis*spaceDim*2);
+ } // if
+
+ // Compute action for inertial terms
+ const double 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)
+ _cellVector[iBasis*spaceDim+iDim] -=
+ wtVertex * accCell[jBasis*spaceDim+iDim];
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(3 + numBasis*numBasis*spaceDim*2);
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(stressEvent);
+#endif
+
+ // Compute B(transpose) * sigma, first computing strains
+ const double x0 = coordinatesCell[0];
+ const double y0 = coordinatesCell[1];
+
+ const double x1 = coordinatesCell[2];
+ const double y1 = coordinatesCell[3];
+
+ const double x2 = coordinatesCell[4];
+ const double y2 = coordinatesCell[5];
+
+ const double scaleB = 2.0 * area;
+ const double b0 = (y1 - y2) / scaleB;
+ const double c0 = (x2 - x1) / scaleB;
+
+ const double b1 = (y2 - y0) / scaleB;
+ const double c1 = (x0 - x2) / scaleB;
+
+ const double b2 = (y0 - y1) / scaleB;
+ const double c2 = (x1 - x0) / scaleB;
+
+ assert(strainCell.size() == 3);
+ strainCell[0] = b2*dispCell[4] + b1*dispCell[2] + b0*dispCell[0];
+
+ strainCell[1] = c2*dispCell[5] + c1*dispCell[3] + c0*dispCell[1];
+
+ strainCell[2] = (b2*dispCell[5] + c2*dispCell[4] + b1*dispCell[3] +
+ c1*dispCell[2] + b0*dispCell[1] + c0*dispCell[0]) / 2.0;
+
+
+ const double_array& stressCell = _material->calcStress(strainCell, true);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(34);
+ _logger->eventEnd(stressEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ assert(_cellVector.size() == 6);
+ assert(stressCell.size() == 3);
+ _cellVector[0] -= (c0*stressCell[2] + b0*stressCell[0]) * area;
+ _cellVector[1] -= (b0*stressCell[2] + c0*stressCell[1]) * area;
+ _cellVector[2] -= (c1*stressCell[2] + b1*stressCell[0]) * area;
+ _cellVector[3] -= (b1*stressCell[2] + c1*stressCell[1]) * area;
+ _cellVector[4] -= (c2*stressCell[2] + b2*stressCell[0]) * area;
+ _cellVector[5] -= (b2*stressCell[2] + c2*stressCell[1]) * area;
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(30);
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ // Assemble cell contribution into field
+ residualVisitor.clear();
+ sieveMesh->updateClosure(*c_iter, residualVisitor);
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(updateEvent);
+#endif
+ } // for
+
+#if !defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(cells->size()*(3 + numBasis*numBasis*spaceDim*2 + 34+30));
+ _logger->eventEnd(computeEvent);
+#endif
+} // integrateResidual
+
+// ----------------------------------------------------------------------
+// Integrate constributions to residual term (r) for operator.
+void
+pylith::feassemble::ElasticityExplicitTri3::integrateResidualLumped(
+ const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields)
+{ // integrateResidualLumped
+ /// Member prototype for _elasticityResidualXD()
+ typedef void (pylith::feassemble::ElasticityExplicitTri3::*elasticityResidual_fn_type)
+ (const double_array&);
+
+ assert(0 != _quadrature);
+ assert(0 != _material);
+ assert(0 != _logger);
+ assert(0 != fields);
+
+ const int setupEvent = _logger->eventId("ElIR setup");
+ const int geometryEvent = _logger->eventId("ElIR geometry");
+ const int computeEvent = _logger->eventId("ElIR compute");
+ const int restrictEvent = _logger->eventId("ElIR restrict");
+ const int stateVarsEvent = _logger->eventId("ElIR stateVars");
+ const int stressEvent = _logger->eventId("ElIR stress");
+ const int updateEvent = _logger->eventId("ElIR update");
+
+ _logger->eventBegin(setupEvent);
+
+ // Get cell geometry information that doesn't depend on cell
+ assert(_quadrature->numQuadPts() == _numQuadPts);
+ assert(_quadrature->numBasis() == _numBasis);
+ assert(_quadrature->spaceDim() == _spaceDim);
+ assert(_quadrature->cellDim() == _cellDim);
+ assert(_material->tensorSize() == _tensorSize);
+ const int spaceDim = _spaceDim;
+ const int cellDim = _cellDim;
+ const int tensorSize = _tensorSize;
+ const int numBasis = _numBasis;
+ const int numQuadPts = _numQuadPts;
+ /** :TODO:
+ *
+ * If cellDim and spaceDim are different, we need to transform
+ * displacements into cellDim, compute action, and transform result
+ * back into spaceDim. We get this information from the Jacobian and
+ * inverse of the Jacobian.
+ */
+ if (cellDim != spaceDim)
+ throw std::logic_error("Integration for cells with spatial dimensions "
+ "different than the spatial dimension of the "
+ "domain not implemented yet.");
+
+ // Allocate vectors for cell values.
+ double_array strainCell(numQuadPts*tensorSize);
+ strainCell = 0.0;
+ double_array gravVec(spaceDim);
+ double_array quadPtsGlobal(numQuadPts*spaceDim);
+
+ // Get cell information
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const int materialId = _material->id();
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->getLabelStratum("material-id", materialId);
+ assert(!cells.isNull());
+ const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+ const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+ const ALE::Obj<SieveMesh::sieve_type>& sieve = sieveMesh->getSieve();
+ assert(!sieve.isNull());
+
+ // Get sections
+ double_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 dispCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& dispSection =
+ fields->get("disp(t)").section();
+ assert(!dispSection.isNull());
+ RestrictVisitor dispVisitor(*dispSection, dispCell.size(), &dispCell[0]);
+
+ const ALE::Obj<RealSection>& residualSection = residual.section();
+ UpdateAddVisitor residualVisitor(*residualSection, &_cellVector[0]);
+
+ double_array coordinatesCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& coordinates =
+ sieveMesh->getRealSection("coordinates");
+ assert(!coordinates.isNull());
+ RestrictVisitor coordsVisitor(*coordinates,
+ coordinatesCell.size(), &coordinatesCell[0]);
+
+ assert(0 != _normalizer);
+ const double lengthScale = _normalizer->lengthScale();
+ const double gravityScale =
+ _normalizer->pressureScale() / (_normalizer->lengthScale() *
+ _normalizer->densityScale());
+
+ // Get parameters used in integration.
+ double_array valuesIJ(numBasis);
+
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Loop over cells
+ for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(restrictEvent);
+#endif
+
+ // Restrict input fields to cell
+#if 1
+ coordsVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+
+ accVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, accVisitor);
+
+ dispVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, dispVisitor);
+#else
+ coordsVisitor.clear();
+ sieve->orientedConeOpt(*c_iter, coordsVisitor, numBasis, spaceDim);
+
+ accVisitor.clear();
+ sieve->orientedConeOpt(*c_iter, accVisitor, numBasis, spaceDim);
+
+ dispVisitor.clear();
+ sieve->orientedConeOpt(*c_iter, dispVisitor, numBasis, spaceDim);
+#endif
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(restrictEvent);
+ _logger->eventBegin(geometryEvent);
+#endif
+
+ // Compute geometry information for current cell
+ const double area = _area(coordinatesCell);
+ assert(area > 0.0);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(geometryEvent);
+ _logger->eventBegin(stateVarsEvent);
+#endif
+
+ // Get state variables for cell.
+ _material->retrievePropsAndVars(*c_iter);
+
+ // Get density at quadrature points for this cell
+ const double_array& density = _material->calcDensity();
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(stateVarsEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Reset element vector to zero
+ _resetCellVector();
+
+ // Compute body force vector if gravity is being used.
+ if (0 != _gravityField) {
+ const spatialdata::geocoords::CoordSys* cs = fields->mesh().coordsys();
+ assert(0 != cs);
+
+ quadPtsGlobal = 0.0;
+ for (int iBasis=0; iBasis < numBasis; ++iBasis)
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ quadPtsGlobal[iDim] +=
+ coordinatesCell[iBasis*spaceDim+iDim] / numBasis;
+ _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+ lengthScale);
+
+ // Compute action for element body forces
+ const int err = _gravityField->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;
+ for (int iBasis=0; iBasis < numBasis; ++iBasis)
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ _cellVector[iBasis * spaceDim + iDim] += wtVertex * gravVec[iDim];
+ PetscLogFlops(numBasis*spaceDim*2 + numBasis*spaceDim*2);
+ } // if
+
+ // Compute action for inertial terms
+ const double wtVertex = density[0] * area / 3.0;
+ _cellVector -= wtVertex * accCell;
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(2 + numBasis*spaceDim*2);
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(stressEvent);
+#endif
+
+ // Compute B(transpose) * sigma, first computing strains
+ const double x0 = coordinatesCell[0];
+ const double y0 = coordinatesCell[1];
+
+ const double x1 = coordinatesCell[2];
+ const double y1 = coordinatesCell[3];
+
+ const double x2 = coordinatesCell[4];
+ const double y2 = coordinatesCell[5];
+
+ const double scaleB = 2.0 * area;
+ const double b0 = (y1 - y2) / scaleB;
+ const double c0 = (x2 - x1) / scaleB;
+
+ const double b1 = (y2 - y0) / scaleB;
+ const double c1 = (x0 - x2) / scaleB;
+
+ const double b2 = (y0 - y1) / scaleB;
+ const double c2 = (x1 - x0) / scaleB;
+
+ assert(strainCell.size() == 3);
+ strainCell[0] = b2*dispCell[4] + b1*dispCell[2] + b0*dispCell[0];
+
+ strainCell[1] = c2*dispCell[5] + c1*dispCell[3] + c0*dispCell[1];
+
+ strainCell[2] = (b2*dispCell[5] + c2*dispCell[4] + b1*dispCell[3] +
+ c1*dispCell[2] + b0*dispCell[1] + c0*dispCell[0]) / 2.0;
+
+ const double_array& stressCell = _material->calcStress(strainCell, true);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(34);
+ _logger->eventEnd(stressEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ assert(_cellVector.size() == 6);
+ assert(stressCell.size() == 3);
+ _cellVector[0] -= (c0*stressCell[2] + b0*stressCell[0]) * area;
+ _cellVector[1] -= (b0*stressCell[2] + c0*stressCell[1]) * area;
+ _cellVector[2] -= (c1*stressCell[2] + b1*stressCell[0]) * area;
+ _cellVector[3] -= (b1*stressCell[2] + c1*stressCell[1]) * area;
+ _cellVector[4] -= (c2*stressCell[2] + b2*stressCell[0]) * area;
+ _cellVector[5] -= (b2*stressCell[2] + c2*stressCell[1]) * area;
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(30);
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ // Assemble cell contribution into field
+ residualVisitor.clear();
+ sieveMesh->updateClosure(*c_iter, residualVisitor);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(updateEvent);
+#endif
+ } // for
+
+#if !defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(cells->size()*(2 + numBasis*spaceDim*2 + 34+30));
+ _logger->eventEnd(computeEvent);
+#endif
+} // integrateResidualLumped
+
+// ----------------------------------------------------------------------
+// Compute matrix associated with operator.
+void
+pylith::feassemble::ElasticityExplicitTri3::integrateJacobian(
+ topology::Jacobian* jacobian,
+ const double t,
+ topology::SolutionFields* fields)
+{ // integrateJacobian
+ assert(0 != _quadrature);
+ assert(0 != _material);
+ assert(0 != jacobian);
+ assert(0 != fields);
+
+ const int setupEvent = _logger->eventId("ElIJ setup");
+ const int geometryEvent = _logger->eventId("ElIJ geometry");
+ const int computeEvent = _logger->eventId("ElIJ compute");
+ const int restrictEvent = _logger->eventId("ElIJ restrict");
+ const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+ const int updateEvent = _logger->eventId("ElIJ update");
+
+ _logger->eventBegin(setupEvent);
+
+ // Get cell geometry information that doesn't depend on cell
+ const int numQuadPts = _quadrature->numQuadPts();
+ const double_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 " \
+ "different dimensions than the spatial dimension.");
+
+ // Get cell information
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const int materialId = _material->id();
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->getLabelStratum("material-id", materialId);
+ assert(!cells.isNull());
+ const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+ const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+ // Get sections
+ double_array dispCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& dispSection =
+ fields->get("disp(t)").section();
+ assert(!dispSection.isNull());
+
+ // Get sparse matrix
+ const PetscMat jacobianMat = jacobian->matrix();
+ assert(0 != jacobianMat);
+
+ // Get parameters used in integration.
+ const double dt = _dt;
+ const double dt2 = dt*dt;
+ assert(dt > 0);
+
+ const ALE::Obj<SieveMesh::order_type>& globalOrder =
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", dispSection);
+ assert(!globalOrder.isNull());
+ // We would need to request unique points here if we had an interpolated mesh
+ topology::Mesh::IndicesVisitor jacobianVisitor(*dispSection, *globalOrder,
+ (int) pow(sieveMesh->getSieve()->getMaxConeSize(),
+ sieveMesh->depth())*spaceDim);
+
+ double_array coordinatesCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& coordinates =
+ sieveMesh->getRealSection("coordinates");
+ assert(!coordinates.isNull());
+ topology::Mesh::RestrictVisitor coordsVisitor(*coordinates,
+ coordinatesCell.size(),
+ &coordinatesCell[0]);
+
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Loop over cells
+ for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(geometryEvent);
+#endif
+
+ // Compute geometry information for current cell
+ coordsVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+ const double area = _area(coordinatesCell);
+ assert(area > 0.0);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(geometryEvent);
+ _logger->eventBegin(stateVarsEvent);
+#endif
+
+ // Get state variables for cell.
+ _material->retrievePropsAndVars(*c_iter);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(stateVarsEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Reset element matrix to zero
+ _resetCellMatrix();
+
+ // Get material physical properties at quadrature points for this cell
+ const double_array& density = _material->calcDensity();
+ assert(density.size() == 1);
+
+ // Compute Jacobian for inertial terms
+ const double 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) {
+ const int iBlock = (iBasis*spaceDim + iDim) * (numBasis*spaceDim);
+ const int jBlock = (jBasis*spaceDim + iDim);
+ _cellMatrix[iBlock+jBlock] += wtVertex;
+ } // for
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(numQuadPts*(3+numBasis*numBasis*spaceDim*1));
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ // Assemble cell contribution into PETSc matrix.
+ jacobianVisitor.clear();
+ PetscErrorCode err = updateOperator(jacobianMat, *sieveMesh->getSieve(),
+ jacobianVisitor, *c_iter,
+ &_cellMatrix[0], ADD_VALUES);
+ CHECK_PETSC_ERROR_MSG(err, "Update to PETSc Mat failed.");
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(updateEvent);
+#endif
+ } // for
+
+#if !defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(cells->size()*(3+numBasis*numBasis*spaceDim*1));
+ _logger->eventEnd(computeEvent);
+#endif
+
+ _needNewJacobian = false;
+ _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+// ----------------------------------------------------------------------
+// Compute matrix associated with operator.
+void
+pylith::feassemble::ElasticityExplicitTri3::integrateJacobian(
+ topology::Field<topology::Mesh>* jacobian,
+ const double t,
+ topology::SolutionFields* fields)
+{ // integrateJacobian
+ assert(0 != _quadrature);
+ assert(0 != _material);
+ assert(0 != jacobian);
+ assert(0 != fields);
+
+ const int setupEvent = _logger->eventId("ElIJ setup");
+ const int geometryEvent = _logger->eventId("ElIJ geometry");
+ const int computeEvent = _logger->eventId("ElIJ compute");
+ const int restrictEvent = _logger->eventId("ElIJ restrict");
+ const int stateVarsEvent = _logger->eventId("ElIJ stateVars");
+ const int updateEvent = _logger->eventId("ElIJ update");
+
+ _logger->eventBegin(setupEvent);
+
+ // Get cell geometry information that doesn't depend on cell
+ assert(_quadrature->numBasis() == _numBasis);
+ assert(_quadrature->spaceDim() == _spaceDim);
+ assert(_quadrature->cellDim() == _cellDim);
+ assert(_material->tensorSize() == _tensorSize);
+ const int spaceDim = _spaceDim;
+ const int cellDim = _cellDim;
+ const int numBasis = _numBasis;
+ if (cellDim != spaceDim)
+ throw std::logic_error("Don't know how to integrate elasticity " \
+ "contribution to Jacobian matrix for cells with " \
+ "different dimensions than the spatial dimension.");
+
+ // Get cell information
+ const ALE::Obj<SieveMesh>& sieveMesh = fields->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ const int materialId = _material->id();
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->getLabelStratum("material-id", materialId);
+ assert(!cells.isNull());
+ const SieveMesh::label_sequence::iterator cellsBegin = cells->begin();
+ const SieveMesh::label_sequence::iterator cellsEnd = cells->end();
+
+ // Get parameters used in integration.
+ const double dt = _dt;
+ const double dt2 = dt*dt;
+ assert(dt > 0);
+
+ // Get sections
+ const ALE::Obj<RealSection>& jacobianSection = jacobian->section();
+ assert(!jacobianSection.isNull());
+ topology::Mesh::UpdateAddVisitor jacobianVisitor(*jacobianSection,
+ &_cellVector[0]);
+
+ double_array coordinatesCell(numBasis*spaceDim);
+ const ALE::Obj<RealSection>& coordinates =
+ sieveMesh->getRealSection("coordinates");
+ assert(!coordinates.isNull());
+ topology::Mesh::RestrictVisitor coordsVisitor(*coordinates,
+ coordinatesCell.size(),
+ &coordinatesCell[0]);
+
+ _logger->eventEnd(setupEvent);
+#if !defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(computeEvent);
+#endif
+ // Loop over cells
+ for (SieveMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+ // Compute geometry information for current cell
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventBegin(geometryEvent);
+#endif
+ coordsVisitor.clear();
+ sieveMesh->restrictClosure(*c_iter, coordsVisitor);
+ const double area = _area(coordinatesCell);
+ assert(area > 0.0);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(geometryEvent);
+ _logger->eventBegin(stateVarsEvent);
+#endif
+
+ // Get state variables for cell.
+ _material->retrievePropsAndVars(*c_iter);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(stateVarsEvent);
+ _logger->eventBegin(computeEvent);
+#endif
+
+ // Compute Jacobian for inertial terms
+ const double_array& density = _material->calcDensity();
+ _cellVector = density[0] * area / (3.0 * dt2);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(3);
+ _logger->eventEnd(computeEvent);
+ _logger->eventBegin(updateEvent);
+#endif
+
+ // Assemble cell contribution into lumped matrix.
+ jacobianVisitor.clear();
+ sieveMesh->updateClosure(*c_iter, jacobianVisitor);
+
+#if defined(DETAILED_EVENT_LOGGING)
+ _logger->eventEnd(updateEvent);
+#endif
+ } // for
+
+#if !defined(DETAILED_EVENT_LOGGING)
+ PetscLogFlops(cells->size()*3);
+ _logger->eventEnd(computeEvent);
+#endif
+
+ _needNewJacobian = false;
+ _material->resetNeedNewJacobian();
+} // integrateJacobian
+
+// ----------------------------------------------------------------------
+// Compute area of triangular cell.
+double
+pylith::feassemble::ElasticityExplicitTri3::_area(
+ const double_array& coordinatesCell) const
+{ // __area
+ assert(6 == coordinatesCell.size());
+
+ const double x0 = coordinatesCell[0];
+ const double y0 = coordinatesCell[1];
+
+ const double x1 = coordinatesCell[2];
+ const double y1 = coordinatesCell[3];
+
+ const double x2 = coordinatesCell[4];
+ const double y2 = coordinatesCell[5];
+
+ const double area = 0.5*((x1-x0)*(y2-y0) - (x2-x0)*(y1-y0));
+ PetscLogFlops(8);
+
+ return area;
+} // _area
+
+
+// End of file
Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.hh (from rev 16839, short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicitTri3.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.hh (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/ElasticityExplicitTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,180 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file libsrc/feassemble/ElasticityExplicitTri3.hh
+ *
+ * @brief Explicit time integration of dynamic elasticity equation
+ * using linear triangular finite-elements.
+ */
+
+#if !defined(pylith_feassemble_elasticityexplicittri3_hh)
+#define pylith_feassemble_elasticityexplicittri3_hh
+
+// Include directives ---------------------------------------------------
+#include "IntegratorElasticity.hh" // ISA IntegratorElasticity
+
+// ElasticityExplicitTri3 ---------------------------------------------------
+/**@brief Explicit time integration of the dynamic elasticity equation
+ * using linear triangular finite-elements.
+ *
+ * Note: This object operates on a single finite-element family, which
+ * is defined by the quadrature and a database of material property
+ * parameters.
+ *
+ * Computes contributions to terms A and r in
+ *
+ * A(t+dt) du(t) = b(t+dt, u(t), u(t-dt)) - A(t+dt) u(t),
+ *
+ * r(t+dt) = b(t+dt) - A(t+dt) (u(t) + du(t))
+ *
+ * where A(t) is a sparse matrix or vector, u(t+dt) is the field we
+ * want to compute at time t+dt, b is a vector that depends on the
+ * field at time t and t-dt, and u0 is zero at unknown DOF and set to
+ * the known values at the constrained DOF.
+ *
+ * Contributions from elasticity include the intertial and stiffness
+ * terms, so this object computes the following portions of A and r:
+ *
+ * A = 1/(dt*dt) [M]
+ *
+ * r = (1/(dt*dt) [M])(- {u(t+dt)} + 2/(dt*dt){u(t)} - {u(t-dt)}) - [K]{u(t)}
+ *
+ * Translational inertia.
+ * - Residual action over cell
+ * \f[
+ * \int_{V^e} \rho N^p \sum_q N^q u_i^q \, dV
+ * \f]
+ * - Jacobian action over cell
+ * \f[
+ * \int_{V^e} (\rho N^q N^q)_i \, dV
+ * \f]
+ *
+ * See governing equations section of user manual for more
+ * information.
+*/
+class pylith::feassemble::ElasticityExplicitTri3 : public IntegratorElasticity
+{ // ElasticityExplicitTri3
+ friend class TestElasticityExplicitTri3; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ ElasticityExplicitTri3(void);
+
+ /// Destructor
+ ~ElasticityExplicitTri3(void);
+
+ /// Deallocate PETSc and local data structures.
+ void deallocate(void);
+
+ /** Set time step for advancing from time t to time t+dt.
+ *
+ * @param dt Time step
+ */
+ void timeStep(const double dt);
+
+ /** Set flag for setting constraints for total field solution or
+ * incremental field solution.
+ *
+ * @param flag True if using incremental solution, false otherwise.
+ */
+ void useSolnIncr(const bool flag);
+
+ /** Integrate contributions to residual term (r) for operator.
+ *
+ * @param residual Field containing values for residual
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateResidual(const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields);
+
+ /** Integrate contributions to residual term (r) for operator.
+ *
+ * @param residual Field containing values for residual
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateResidualLumped(const topology::Field<topology::Mesh>& residual,
+ const double t,
+ topology::SolutionFields* const fields);
+
+ /** Integrate contributions to Jacobian matrix (A) associated with
+ * operator.
+ *
+ * @param jacobian Sparse matrix for Jacobian of system.
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateJacobian(topology::Jacobian* jacobian,
+ const double t,
+ topology::SolutionFields* const fields);
+
+ /** Integrate contributions to Jacobian matrix (A) associated with
+ * operator.
+ *
+ * @param jacobian Diagonal matrix (as field) for Jacobian of system.
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateJacobian(topology::Field<topology::Mesh>* jacobian,
+ const double t,
+ topology::SolutionFields* const fields);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ /** Compute area of triangular cell.
+ *
+ * @param coordinatesCell Coordinates of vertices of cell.
+ * @returns Area of cell.
+ */
+ double _area(const double_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;
+
+// PRIVATE MEMBERS //////////////////////////////////////////////////////
+private :
+
+ double_array _basisDerivArray; ///< Array of basis derivatives
+
+ double _dtm1; ///< Time step for t-dt1 -> t
+
+ static const int _spaceDim;
+ static const int _cellDim;
+ static const int _tensorSize;
+ static const int _numBasis;
+ static const int _numQuadPts;
+
+// NOT IMPLEMENTED //////////////////////////////////////////////////////
+private :
+
+ /// Not implemented.
+ ElasticityExplicitTri3(const ElasticityExplicitTri3&);
+
+ /// Not implemented
+ const ElasticityExplicitTri3& operator=(const ElasticityExplicitTri3&);
+
+}; // ElasticityExplicitTri3
+
+#endif // pylith_feassemble_elasticityexplicittri3_hh
+
+
+// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryLine3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryLine3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryLine3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -138,7 +138,7 @@
assert(0 != det);
assert(0 != vertices);
assert(0 != location);
- assert(2 == dim);
+ assert(3 == dim);
assert(spaceDim() == dim);
const double x0 = vertices[0];
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryQuad2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryQuad2D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryQuad2D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -194,16 +194,16 @@
const double 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) / 2.0;
- const double j1 = (f_3 + f_01 * p0) / 2.0;
- const double j2 = (g_1 + g_01 * p1) / 2.0;
- const double j3 = (g_3 + g_01 * p0) / 2.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;
- jacobian[iJ++] = j0;
- jacobian[iJ++] = j1;
- jacobian[iJ++] = j2;
- jacobian[iJ++] = j3;
- det[i] = j0*j3 - j1*j2;
+ jacobian[iJ++] = j00;
+ jacobian[iJ++] = j01;
+ jacobian[iJ++] = j10;
+ jacobian[iJ++] = j11;
+ det[i] = j00*j11 - j01*j10;
} // for
PetscLogFlops(10 + npts*19);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTet3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTet3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTet3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -225,6 +225,9 @@
jacobian[iJ++] = j3;
jacobian[iJ++] = j4;
jacobian[iJ++] = j5;
+ jacobian[iJ++] = j6;
+ jacobian[iJ++] = j7;
+ jacobian[iJ++] = j8;
det[i] = jdet;
} // for
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri2D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri2D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -158,19 +158,17 @@
const double y2 = vertices[5];
- const double j1 = (x1 - x0) / 2.0;
- const double j2 = (x2 - x0) / 2.0;
- const double j3 = (y1 - y0) / 2.0;
- const double j4 = (y2 - y0) / 2.0;
- const double jdet =
- jacobian[0]*jacobian[3] -
- jacobian[1]*jacobian[2];
+ 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;
for (int i=0, iJ=0; i < npts; ++i) {
- jacobian[iJ++] = j1;
- jacobian[iJ++] = j2;
- jacobian[iJ++] = j3;
- jacobian[iJ++] = j4;
+ jacobian[iJ++] = j00;
+ jacobian[iJ++] = j01;
+ jacobian[iJ++] = j10;
+ jacobian[iJ++] = j11;
det[i] = jdet;
} // for
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/GeometryTri3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -183,28 +183,28 @@
const double y2 = vertices[7];
const double z2 = vertices[8];
- const double j0 = (x1 - x0) / 2.0;
- const double j1 = (x2 - x0) / 2.0;
+ const double j00 = (x1 - x0) / 2.0;
+ const double j01 = (x2 - x0) / 2.0;
- const double j2 = (y1 - y0) / 2.0;
- const double j3 = (y2 - y0) / 2.0;
+ const double j10 = (y1 - y0) / 2.0;
+ const double j11 = (y2 - y0) / 2.0;
- const double j4 = (z1 - z0) / 2.0;
- const double j5 = (z2 - z0) / 2.0;
+ const double j20 = (z1 - z0) / 2.0;
+ const double j21 = (z2 - z0) / 2.0;
- const double jj00 = j0*j0 + j2*j2 + j4*j4;
- const double jj10 = j0*j1 + j2*j3 + j4*j5;
+ 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 = j1*j1 + j3*j3 + j5*j5;
+ const double jj11 = j01*j01 + j11*j11 + j21*j21;
const double jdet = sqrt(jj00*jj11 - jj01*jj10);
for (int i=0, iJ=0; i < npts; ++i) {
- jacobian[iJ++] = j0;
- jacobian[iJ++] = j1;
- jacobian[iJ++] = j2;
- jacobian[iJ++] = j3;
- jacobian[iJ++] = j4;
- jacobian[iJ++] = j5;
+ jacobian[iJ++] = j00;
+ jacobian[iJ++] = j01;
+ jacobian[iJ++] = j10;
+ jacobian[iJ++] = j11;
+ jacobian[iJ++] = j20;
+ jacobian[iJ++] = j21;
det[i] = jdet;
} // for
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -25,6 +25,7 @@
#include "pylith/topology/topologyfwd.hh" // USES Mesh, Field, SolutionFields
#include "pylith/utils/utilsfwd.hh" // HOLDSA EventLogger
+#include "pylith/utils/petscfwd.h" // USES PetscMat
#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
#include "spatialdata/units/unitsfwd.hh" // USES Nondimensional
@@ -108,11 +109,12 @@
virtual
bool needNewJacobian(void) const;
- /** Check whether integrator needs velocity.
- *
- * @returns True if integrator needs velocity for computation.
- */
- bool isJacobianSymmetric(void) const;
+ /** Check whether integrator generates a symmetric Jacobian.
+ *
+ * @returns True if integrator generates symmetric Jacobian.
+ */
+ virtual
+ bool isJacobianSymmetric(void) const;
/** Set flag for setting constraints for total field solution or
* incremental field solution.
@@ -147,18 +149,6 @@
const double t,
topology::SolutionFields* const fields);
- /** Integrate contributions to residual term (r) for operator that
- * do not require assembly over cells, vertices, or processors.
- *
- * @param residual Field containing values for residual
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateResidualAssembled(const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields);
-
/** Integrate contributions to residual term (r) for operator.
*
* @param residual Field containing values for residual
@@ -170,18 +160,6 @@
const double t,
topology::SolutionFields* const fields);
- /** Integrate contributions to residual term (r) for operator that
- * do not require assembly over cells, vertices, or processors.
- *
- * @param residual Field containing values for residual
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateResidualLumpedAssembled(const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields);
-
/** Integrate contributions to Jacobian matrix (A) associated with
* operator.
*
@@ -195,19 +173,6 @@
topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly over cells, vertices, or
- * processors
- *
- * @param jacobian Sparse matrix for Jacobian of system.
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateJacobianAssembled(topology::Jacobian* jacobian,
- const double t,
- topology::SolutionFields* const fields);
-
- /** Integrate contributions to Jacobian matrix (A) associated with
* operator.
*
* @param jacobian Diagonal matrix (as field) for Jacobian of system.
@@ -220,17 +185,16 @@
topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly over cells, vertices, or
- * processors
+ * operator.
*
- * @param jacobian Diagonal matrix (as field) for Jacobian of system.
- * @param t Current time
+ * @param precondMatrix Custom preconditioning matrix.
+ * @param jacobian Sparse matrix for Jacobian of system.
* @param fields Solution fields
*/
virtual
- void integrateJacobianAssembled(topology::Field<topology::Mesh>* jacobian,
- const double t,
- topology::SolutionFields* const fields);
+ void calcPreconditioner(PetscMat* const precondMatrix,
+ topology::Jacobian* const jacobian,
+ topology::SolutionFields* const fields);
/** Update state variables as needed.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.icc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Integrator.icc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -70,17 +70,6 @@
topology::SolutionFields* const fields) {
} // integrateResidual
-// Integrate contributions to residual term (r) for operator that
-// do not require assembly over cells, vertices, or processors.
-template<typename quadrature_type>
-inline
-void
-pylith::feassemble::Integrator<quadrature_type>::integrateResidualAssembled(
- const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields) {
-} // integrateResidualAssembled
-
// Integrate contributions to residual term (r) for operator.
template<typename quadrature_type>
inline
@@ -92,18 +81,6 @@
integrateResidual(residual, t, fields);
} // integrateResidual
-// Integrate contributions to residual term (r) for operator that
-// do not require assembly over cells, vertices, or processors.
-template<typename quadrature_type>
-inline
-void
-pylith::feassemble::Integrator<quadrature_type>::integrateResidualLumpedAssembled(
- const topology::Field<topology::Mesh>& residual,
- const double t,
- topology::SolutionFields* const fields) {
- integrateResidualAssembled(residual, t, fields);
-} // integrateResidualAssembled
-
// Integrate contributions to Jacobian matrix (A) associated with
// operator.
template<typename quadrature_type>
@@ -117,18 +94,6 @@
} // integrateJacobian
// Integrate contributions to Jacobian matrix (A) associated with
-// operator that do not require assembly over cells, vertices, or
-// processors
-template<typename quadrature_type>
-inline
-void
-pylith::feassemble::Integrator<quadrature_type>::integrateJacobianAssembled(
- topology::Jacobian* jacobian,
- const double t,
- topology::SolutionFields* const fields) {
-} // integrateJacobianAssembled
-
-// Integrate contributions to Jacobian matrix (A) associated with
// operator.
template<typename quadrature_type>
inline
@@ -141,16 +106,15 @@
} // integrateJacobian
// Integrate contributions to Jacobian matrix (A) associated with
-// operator that do not require assembly over cells, vertices, or
-// processors
+// operator.
template<typename quadrature_type>
inline
-void
-pylith::feassemble::Integrator<quadrature_type>::integrateJacobianAssembled(
- topology::Field<topology::Mesh>* jacobian,
- const double t,
- topology::SolutionFields* const fields) {
-} // integrateJacobianAssembled
+void
+pylith::feassemble::Integrator<quadrature_type>::calcPreconditioner(
+ PetscMat* const precondMatrix,
+ topology::Jacobian* const jacobian,
+ topology::SolutionFields* const fields) {
+} // calcPreconditioner
// Update state variables as needed.
template<typename quadrature_type>
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/IntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/IntegratorElasticity.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/IntegratorElasticity.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -121,6 +121,7 @@
// Initialize material.
_material->initialize(mesh, _quadrature);
+ _isJacobianSymmetric = _material->isJacobianSymmetric();
// Allocate vectors and matrices for cell values.
_initCellVector();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -19,6 +19,7 @@
Constraint.hh \
Constraint.icc \
ElasticityExplicit.hh \
+ ElasticityExplicitTri3.hh \
ElasticityExplicitTet4.hh \
ElasticityExplicitLgDeform.hh \
ElasticityImplicit.hh \
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -21,7 +21,7 @@
#include <cassert> // USES assert()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -76,8 +76,8 @@
for (int iBasis=0; iBasis < numBasis; ++iBasis)
_quadPts[iQuadPt] += basis[iQ+iBasis]*coordinatesCell[iBasis];
#else
- geometry.coordsRefToGlobal(&_quadPts[iQuadPt], &quadPtsRef[iQuadPt],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt], &quadPtsRef[iQuadPt],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -93,9 +93,8 @@
_jacobianDet[iQuadPt] = _jacobian[iQuadPt];
#else
// Compute Jacobian and determinant of Jacobian at quadrature point
- assert(0 != _geometry);
- geometry->jacobian(&_jacobian[iQuadPt], &_jacobianDet[iQuadPt],
- &coordinatesCell[0], &quadPtsRef[iQuadPt], spaceDim);
+ geometry.jacobian(&_jacobian[iQuadPt], &_jacobianDet[iQuadPt],
+ &coordinatesCell[0], &quadPtsRef[iQuadPt], spaceDim, 1);
_checkJacobianDet(_jacobianDet[iQuadPt], cell);
#endif
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din2D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din2D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -21,7 +21,7 @@
#include <cassert> // USES assert()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -81,9 +81,9 @@
valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
} // for
#else
- geometry.coordsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
- &quadPtsRef[iQuadPt*cellDim],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
+ &quadPtsRef[iQuadPt*cellDim],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -98,7 +98,7 @@
_jacobian[iQuadPt*spaceDim+iDim] +=
deriv * coordinatesCell[iBasis*spaceDim+iDim];
} // for
-
+
// Compute determinant of Jacobian at quadrature point
// |J| = sqrt(transpose(J) J)
double det = 0.0;
@@ -110,10 +110,11 @@
_jacobianDet[iQuadPt] = det;
#else
// Compute Jacobian and determinant of Jacobian at quadrature point
- geometry.jacobian(&_jacobian[iQuadPt*_cellDim*spaceDim],
+ geometry.jacobian(&_jacobian[iQuadPt*cellDim*spaceDim],
&_jacobianDet[iQuadPt],
- &coordinatesCell0], &quadPtsRef[iQuadPt*cellDim], spaceDim);
- _checkJacobianDet(_jacobianDet[iQuadPt], cell);
+ &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
+ spaceDim, 1);
+ _checkJacobianDet(_jacobianDet[iQuadPt], cell);
#endif
// Compute inverse of Jacobian at quadrature point
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature1Din3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -21,7 +21,7 @@
#include <cassert> // USES assert()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -82,9 +82,9 @@
valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
} // for
#else
- geometry.coordsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
- &quadPtsRef[iQuadPt*cellDim],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
+ &quadPtsRef[iQuadPt*cellDim],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -115,7 +115,8 @@
// Compute Jacobian and determinant of Jacobian at quadrature point
geometry.jacobian(&_jacobian[iQuadPt*cellDim*spaceDim],
&_jacobianDet[iQuadPt],
- &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim], spaceDim);
+ &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
+ spaceDim, 1);
_checkJacobianDet(_jacobianDet[iQuadPt], cell);
#endif
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -21,7 +21,7 @@
#include <cassert> // USES assert()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -79,9 +79,9 @@
valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
} // for
#else
- geometry.coordsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
- &quadPtsRef[iQuadPt*cellDim],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
+ &quadPtsRef[iQuadPt*cellDim],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -115,10 +115,17 @@
_jacobianDet[iQuadPt] = det;
#else
// Compute Jacobian and determinant of Jacobian at quadrature point
+ const int iJ = iQuadPt*cellDim*spaceDim;
+ const int i00 = iJ + 0*spaceDim + 0;
+ const int i01 = iJ + 0*spaceDim + 1;
+ const int i10 = iJ + 1*spaceDim + 0;
+ const int i11 = iJ + 1*spaceDim + 1;
geometry.jacobian(&_jacobian[iQuadPt*cellDim*spaceDim],
&_jacobianDet[iQuadPt],
- &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim], spaceDim);
+ &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
+ spaceDim, 1);
_checkJacobianDet(_jacobianDet[iQuadPt], cell);
+ const double det = _jacobianDet[iQuadPt];
#endif
// Compute inverse of Jacobian at quadrature point
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2Din3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature2Din3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -23,7 +23,7 @@
#include <cassert> // USES assert()
#include <stdexcept> // USES std::runtime_error()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -83,9 +83,9 @@
valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
} // for
#else
- geometry.coordsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
- &quadPtsRef[iQuadPt*cellDim],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
+ &quadPtsRef[iQuadPt*cellDim],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -136,9 +136,17 @@
_jacobianDet[iQuadPt] = det;
#else
// Compute Jacobian and determinant of Jacobian at quadrature point
+ const int iJ = iQuadPt*cellDim*spaceDim;
+ const int i00 = iJ + 0*cellDim + 0;
+ const int i01 = iJ + 0*cellDim + 1;
+ const int i10 = iJ + 1*cellDim + 0;
+ const int i11 = iJ + 1*cellDim + 1;
+ const int i20 = iJ + 2*cellDim + 0;
+ const int i21 = iJ + 2*cellDim + 1;
geometry.jacobian(&_jacobian[iQuadPt*cellDim*spaceDim],
&_jacobianDet[iQuadPt],
- &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim], spaceDim);
+ &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
+ spaceDim, 1);
_checkJacobianDet(_jacobianDet[iQuadPt], cell);
#endif
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/Quadrature3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -21,7 +21,7 @@
#include <cassert> // USES assert()
-#define ISOPARAMETRIC
+//#define ISOPARAMETRIC
// ----------------------------------------------------------------------
// Constructor
@@ -80,9 +80,9 @@
valueBasis * coordinatesCell[iBasis*spaceDim+iDim];
} // for
#else
- geometry.coordsRefToGlobal(&quadPts[iQuadPt*spaceDim],
- &quadPtsRef[iQuadPt*cellDim],
- &coordinatesCell[0], spaceDim);
+ geometry.ptsRefToGlobal(&_quadPts[iQuadPt*spaceDim],
+ &quadPtsRef[iQuadPt*cellDim],
+ &coordinatesCell[0], spaceDim, 1);
#endif
#if defined(ISOPARAMETRIC)
@@ -133,10 +133,22 @@
_jacobianDet[iQuadPt] = det;
#else
// Compute Jacobian and determinant of Jacobian at quadrature point
+ const int iJ = iQuadPt*cellDim*spaceDim;
+ const int i00 = iJ + 0*spaceDim + 0;
+ const int i01 = iJ + 0*spaceDim + 1;
+ const int i02 = iJ + 0*spaceDim + 2;
+ const int i10 = iJ + 1*spaceDim + 0;
+ const int i11 = iJ + 1*spaceDim + 1;
+ const int i12 = iJ + 1*spaceDim + 2;
+ const int i20 = iJ + 2*spaceDim + 0;
+ const int i21 = iJ + 2*spaceDim + 1;
+ const int i22 = iJ + 2*spaceDim + 2;
geometry.jacobian(&_jacobian[iQuadPt*cellDim*spaceDim],
&_jacobianDet[iQuadPt],
- &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim], spaceDim);
+ &coordinatesCell[0], &quadPtsRef[iQuadPt*cellDim],
+ spaceDim, 1);
_checkJacobianDet(_jacobianDet[iQuadPt], cell);
+ const double det = _jacobianDet[iQuadPt];
#endif
// Compute inverse of Jacobian at quadrature point
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/feassemblefwd.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/feassemblefwd.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/feassemblefwd.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -57,6 +57,7 @@
class ElasticityExplicit;
class ElasticityExplicitTet4;
+ class ElasticityExplicitTri3;
class IntegratorElasticityLgDeform;
class ElasticityImplicitLgDeform;
Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tet4_elasticity.wxm (from rev 16839, short/3D/PyLith/trunk/libsrc/feassemble/tet4_elasticity.wxm)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tet4_elasticity.wxm (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tet4_elasticity.wxm 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,54 @@
+/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
+/* [ Created with wxMaxima version 0.8.2 ] */
+
+/* [wxMaxima: input start ] */
+b : matrix([1,y1,z1],[1,y2,z2],[1,y3,z3]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+-determinant(b);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+c : matrix([x1, 1, z1],[x2,1,z2],[x3,1,z3]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+-determinant(c);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+d : matrix([x0, y0,1],[x1,y1,1],[x2,y2,1]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+determinant(d);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+B : matrix([b1,0,0,b2,0,0,b3,0,0,b4,0,0],
+[0,c1,0,0,c2,0,0,c3,0,0,c4,0],
+[0,0,d1,0,0,d2,0,0,d3,0,0,d4],
+[c1,b1,0,c2,b2,0,c3,b3,0,c4,b4,0],
+[0,d1,c1,0,d2,c2,0,d3,c3,0,d4,c4],
+[d1,0,b1,d2,0,b2,d3,0,b3,d4,0,b4]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+disp : matrix([dispTCell0,dispTCell1,dispTCell2,dispTCell3,dispTCell4,dispTCell5,dispTCell6,dispTCell7,dispTCell8,dispTCell9,dispTCell10,dispTCell11]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+B . transpose(disp);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+stress : matrix([stressCell0, stressCell1, stressCell2, stressCell3, stressCell4, stressCell5]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+transpose(B) . transpose(stress);
+/* [wxMaxima: input end ] */
+
+/* Maxima can't load/batch files which end with a comment! */
+"Created with wxMaxima"$
Copied: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tri3_elasticity.wxm (from rev 16839, short/3D/PyLith/trunk/libsrc/feassemble/tri3_elasticity.wxm)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tri3_elasticity.wxm (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/feassemble/tri3_elasticity.wxm 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,27 @@
+/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
+/* [ Created with wxMaxima version 0.8.2 ] */
+
+/* [wxMaxima: input start ] */
+B : matrix([b0,0,b1,0,b2,0],
+[0,c0,0,c1,0,c2],
+[c0,b0,c1,b1,c2,b2]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+disp : matrix([dispCell0,dispCell1,dispCell2,dispCell3,dispCell4,dispCell5]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+B . transpose(disp);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+stress : matrix([stressCell0, stressCell1, stressCell2]);
+/* [wxMaxima: input end ] */
+
+/* [wxMaxima: input start ] */
+transpose(B) . transpose(stress);
+/* [wxMaxima: input end ] */
+
+/* Maxima can't load/batch files which end with a comment! */
+"Created with wxMaxima"$
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/RateStateAgeing.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -286,7 +286,7 @@
double friction = 0.0;
double mu_f = 0.0;
- if (normalTraction < 0.0) {
+ if (normalTraction <= 0.0) {
// if fault is in compression
// Using Regularized Rate and State equation
const double f0 = properties[p_coef];
@@ -350,8 +350,6 @@
stateVars[s_state] = thetaTpdtVertex;
- std::cout << "STATEVAR before: " << thetaTVertex << ", after: " << thetaTpdtVertex << std::endl;
- std::cout << "SLIP RATE: " << slipRate << std::endl;
PetscLogFlops(6);
} // _updateStateVars
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/SlipWeakening.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/SlipWeakening.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/SlipWeakening.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -266,7 +266,7 @@
double friction = 0.0;
double mu_f = 0.0;
- if (normalTraction < 0.0) {
+ if (normalTraction <= 0.0) {
// if fault is in compression
if (stateVars[s_slipCum] < properties[p_d0]) {
// if/else linear slip-weakening form of mu_f
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/StaticFriction.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/StaticFriction.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/friction/StaticFriction.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -150,7 +150,7 @@
assert(_numPropsVertex == numProperties);
assert(0 == numStateVars);
- const double friction = (normalTraction < 0.0) ?
+ const double friction = (normalTraction <= 0.0) ?
-properties[p_coef] * normalTraction + properties[p_cohesion]:
properties[p_cohesion];
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -181,7 +181,7 @@
void
pylith::materials::DruckerPrager3D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
@@ -209,6 +209,9 @@
throw std::runtime_error(msg.str());
} // if
+ 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));
@@ -293,7 +296,7 @@
void
pylith::materials::DruckerPrager3D::_dbToStateVars(
double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToStateVars
assert(0 != stateValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/DruckerPrager3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -71,7 +71,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -95,7 +95,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize state variables..
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -103,7 +103,7 @@
void
pylith::materials::ElasticIsotropic3D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticIsotropic3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -69,7 +69,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -103,7 +103,7 @@
void
pylith::materials::ElasticPlaneStrain::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStrain.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -69,7 +69,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -103,7 +103,7 @@
void
pylith::materials::ElasticPlaneStress::_dbToProperties(
double* propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticPlaneStress.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -71,7 +71,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -103,7 +103,7 @@
void
pylith::materials::ElasticStrain1D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStrain1D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -70,7 +70,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -103,7 +103,7 @@
void
pylith::materials::ElasticStress1D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/ElasticStress1D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -71,7 +71,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -231,7 +231,7 @@
void
pylith::materials::GenMaxwellIsotropic3D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
@@ -364,7 +364,7 @@
void
pylith::materials::GenMaxwellIsotropic3D::_dbToStateVars(
double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToStateVars
assert(0 != stateValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/GenMaxwellIsotropic3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -81,7 +81,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -105,7 +105,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
// Note: We do not need to dimensionalize or nondimensionalize state
// variables because there are strains, which are dimensionless.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -49,6 +49,7 @@
_dimension(dimension),
_tensorSize(tensorSize),
_needNewJacobian(false),
+ _isJacobianSymmetric(true),
_dbProperties(0),
_dbInitialState(0),
_id(0),
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -150,6 +150,12 @@
*/
bool needNewJacobian(void) const;
+ /** Check whether material generates a symmetric Jacobian.
+ *
+ * @returns True if material generates symmetric Jacobian.
+ */
+ bool isJacobianSymmetric(void) const;
+
/// Reset flag indicating whether Jacobian matrix must be reformed for
/// current state.
void resetNeedNewJacobian(void);
@@ -202,7 +208,7 @@
*/
virtual
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const = 0;
+ const double_array& dbValues) = 0;
/** Nondimensionalize properties.
*
@@ -229,7 +235,7 @@
*/
virtual
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize state variables.
*
@@ -267,6 +273,7 @@
const int _dimension; ///< Spatial dimension associated with material.
const int _tensorSize; ///< Tensor size for material.
bool _needNewJacobian; ///< True if need to reform Jacobian, false otherwise.
+ bool _isJacobianSymmetric; ///< True if Jacobian is symmetric;
// PRIVATE METHODS ////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.icc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/Material.icc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -100,11 +100,18 @@
_needNewJacobian = false;
} // resetNeedNewJacobian
+// Check whether material generates a symmetric Jacobian.
+inline
+bool
+pylith::materials::Material::isJacobianSymmetric(void) const {
+ return _isJacobianSymmetric;
+} // isJacobianSymmetric
+
// Compute initial state variables from values in spatial database.
inline
void
pylith::materials::Material::_dbToStateVars(double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{}
// Nondimensionalize state variables.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -178,7 +178,7 @@
void
pylith::materials::MaxwellIsotropic3D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
@@ -279,7 +279,7 @@
void
pylith::materials::MaxwellIsotropic3D::_dbToStateVars(
double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToStateVars
assert(0 != stateValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellIsotropic3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -68,7 +68,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -92,7 +92,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
// Note: We do not need to dimensionalize or nondimensionalize state
// variables because there are strains, which are dimensionless.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -172,7 +172,7 @@
void
pylith::materials::MaxwellPlaneStrain::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
@@ -273,7 +273,7 @@
void
pylith::materials::MaxwellPlaneStrain::_dbToStateVars(
double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToStateVars
assert(0 != stateValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/MaxwellPlaneStrain.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -70,7 +70,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -94,7 +94,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
// Note: We do not need to dimensionalize or nondimensionalize state
// variables because there are strains, which are dimensionless.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -198,7 +198,7 @@
void
pylith::materials::PowerLaw3D::_dbToProperties(
double* const propValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToProperties
assert(0 != propValues);
const int numDBValues = dbValues.size();
@@ -312,7 +312,7 @@
void
pylith::materials::PowerLaw3D::_dbToStateVars(
double* const stateValues,
- const double_array& dbValues) const
+ const double_array& dbValues)
{ // _dbToStateVars
assert(0 != stateValues);
const int numDBValues = dbValues.size();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/materials/PowerLaw3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -96,7 +96,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -120,7 +120,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const double_array& dbValues) const;
+ const double_array& dbValues);
/** Nondimensionalize state variables..
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/DataWriterVTK.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/DataWriterVTK.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/DataWriterVTK.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -112,7 +112,7 @@
err = PetscViewerCreate(mesh.comm(), &_viewer);
CHECK_PETSC_ERROR(err);
- err = PetscViewerSetType(_viewer, PETSC_VIEWER_ASCII);
+ err = PetscViewerSetType(_viewer, PETSCVIEWERASCII);
CHECK_PETSC_ERROR(err);
err = PetscViewerSetFormat(_viewer, PETSC_VIEWER_ASCII_VTK);
CHECK_PETSC_ERROR(err);
@@ -121,7 +121,7 @@
const ALE::Obj<typename mesh_type::SieveMesh>& sieveMesh = mesh.sieveMesh();
- err = VTKViewer::writeHeader(_viewer);
+ err = VTKViewer::writeHeader(sieveMesh, _viewer);
CHECK_PETSC_ERROR(err);
//std::cout << "Wrote header for " << filename << std::endl;
err = VTKViewer::writeVertices(sieveMesh, _viewer);
@@ -133,8 +133,7 @@
} else {
const std::string labelName =
(sieveMesh->hasLabel("censored depth")) ? "censored depth" : "depth";
- err = VTKViewer::writeElements(sieveMesh, label, labelId, labelName,
- 0, _viewer);
+ err = VTKViewer::writeElements(sieveMesh, label, labelId, labelName, 0, _viewer);
CHECK_PETSC_ERROR(err);
} // if
//std::cout << "Wrote elements for " << filename << std::endl;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -31,7 +31,8 @@
// ----------------------------------------------------------------------
// Constructor
pylith::meshio::MeshIOCubit::MeshIOCubit(void) :
- _filename("")
+ _filename(""),
+ _useNodesetNames(true)
{ // constructor
} // constructor
@@ -291,6 +292,32 @@
bool ok = ns_prop1->get(&ids[0], counts);
delete[] counts; counts = 0;
+ string_vector groupNames(numGroups);
+ if (_useNodesetNames) {
+ NcVar* ns_names = ncfile.get_var("ns_names");
+ if (0 == ns_names)
+ throw std::runtime_error("Could not get variable 'ns_names'.");
+ long* counts = ns_names->edges();
+ if (ns_names->num_dims() != 2)
+ throw std::runtime_error("Expected variable 'ns_names' to have "
+ "2 dimensions.");
+ const int bufferSize = counts[1];
+ char* buffer = (bufferSize > 0) ? new char[bufferSize] : 0;
+ for (int i=0; i < numGroups; ++i) {
+ ns_names->set_cur(i);
+ bool ok = ns_names->get(buffer, 1, bufferSize, 0, 0, 0);
+ if (!ok) {
+ std::ostringstream msg;
+ msg << "Could not read name of nodeset " << ids[i] << ".";
+ throw std::runtime_error(msg.str());
+ } // if
+ groupNames[i] = buffer;
+ std::cout << "GROUP: '" << groupNames[i] << "'." << std::endl;
+ } // for
+ delete[] buffer; buffer = 0;
+ delete[] counts; counts = 0;
+ } // if
+
for (int iGroup=0; iGroup < numGroups; ++iGroup) {
std::valarray<int> points;
@@ -314,9 +341,13 @@
points -= 1; // use zero index
GroupPtType type = VERTEX;
- std::ostringstream name;
- name << ids[iGroup];
- _setGroup(name.str().c_str(), type, points);
+ if (_useNodesetNames)
+ _setGroup(groupNames[iGroup], type, points);
+ else {
+ std::ostringstream name;
+ name << ids[iGroup];
+ _setGroup(name.str().c_str(), type, points);
+ } // if/else
} // for
} // _readGroups
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -57,6 +57,12 @@
*/
const char* filename(void) const;
+ /** Set flag on whether to use nodeset ids or names.
+ *
+ * @param flag True to use node set names.
+ */
+ void useNodesetNames(const bool flag);
+
// PROTECTED METHODS ////////////////////////////////////////////////////
protected :
@@ -136,6 +142,7 @@
private :
std::string _filename; ///< Name of file
+ bool _useNodesetNames; ///< True to use node set names instead of ids.
}; // MeshIOCubit
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.icc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.icc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/meshio/MeshIOCubit.icc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -28,6 +28,13 @@
return _filename.c_str();
}
+// Set flag on whether to use nodeset ids or names.
+inline
+void
+pylith::meshio::MeshIOCubit::useNodesetNames(const bool flag) {
+ _useNodesetNames = flag;
+}
+
#endif
// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -32,6 +32,7 @@
_jacobian(0),
_jacobianLumped(0),
_fields(0),
+ _precondMatrix(0),
_isJacobianSymmetric(false)
{ // constructor
} // constructor
@@ -51,9 +52,51 @@
_jacobian = 0; // :TODO: Use shared pointer.
_jacobianLumped = 0; // :TODO: Use shared pointer.
_fields = 0; // :TODO: Use shared pointer.
+
+#if 0 // :KLUDGE: Assume Solver deallocates matrix.
+ PetscErrorCode err = 0;
+ if (0 != _precondMatrix) {
+ err = PetscObjectDereference((PetscObject) _precondMatrix);
+ _precondMatrix = 0; CHECK_PETSC_ERROR(err);
+ } // if
+#else
+ _precondMatrix = 0;
+#endif
} // deallocate
// ----------------------------------------------------------------------
+// Set flag for splitting fields.
+void
+pylith::problems::Formulation::splitFields(const bool flag)
+{ // splitFields
+ _splitFields = flag;
+} // splitFields
+
+// ----------------------------------------------------------------------
+// Get flag for splitting fields.
+bool
+pylith::problems::Formulation::splitFields(void) const
+{ // splitFields
+ return _splitFields;
+} // splitFields
+
+// ----------------------------------------------------------------------
+// Set flag for using custom preconditioner for Lagrange constraints.
+void
+pylith::problems::Formulation::useCustomConstraintPC(const bool flag)
+{ // useCustomConstraintPC
+ _useCustomConstraintPC = flag;
+} // useCustomConstraintPC
+
+// ----------------------------------------------------------------------
+// Get flag indicating use of custom conditioner for Lagrange constraints.
+bool
+pylith::problems::Formulation::useCustomConstraintPC(void) const
+{ // useCustomConstraintPC
+ return _useCustomConstraintPC;
+} // useCustomConstraintPC
+
+// ----------------------------------------------------------------------
// Return the fields
const pylith::topology::SolutionFields&
pylith::problems::Formulation::fields(void) const
@@ -96,6 +139,19 @@
} // submeshIntegrators
// ----------------------------------------------------------------------
+// Set handle to preconditioner.
+void
+pylith::problems::Formulation::customPCMatrix(PetscMat& mat)
+{ // preconditioner
+ _precondMatrix = mat;
+
+#if 0 // :KLUDGE: Assume solver deallocates matrix
+ PetscErrorCode err = 0;
+ err = PetscObjectReference((PetscObject) mat); CHECK_PETSC_ERROR(err);
+#endif
+} // preconditioner
+
+// ----------------------------------------------------------------------
// Initialize formulation.
void
pylith::problems::Formulation::initialize(void)
@@ -196,14 +252,6 @@
// Assemble residual.
residual.complete();
- // Add in contributions that do not require assembly.
- numIntegrators = _meshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _meshIntegrators[i]->integrateResidualAssembled(residual, _t, _fields);
- numIntegrators = _submeshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _submeshIntegrators[i]->integrateResidualAssembled(residual, _t, _fields);
-
// Update PETSc view of residual
if (0 != tmpResidualVec)
residual.scatterSectionToVector(*tmpResidualVec);
@@ -252,14 +300,6 @@
// Assemble residual.
residual.complete();
- // Add in contributions that do not require assembly.
- numIntegrators = _meshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _meshIntegrators[i]->integrateResidualLumpedAssembled(residual, _t, _fields);
- numIntegrators = _submeshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _submeshIntegrators[i]->integrateResidualLumpedAssembled(residual, _t, _fields);
-
// Update PETSc view of residual
if (0 != tmpResidualVec)
residual.scatterSectionToVector(*tmpResidualVec);
@@ -288,20 +328,9 @@
// Set jacobian to zero.
_jacobian->zero();
- // Add in contributions that do not require assembly.
+ // Add in contributions that require assembly.
int numIntegrators = _meshIntegrators.size();
for (int i=0; i < numIntegrators; ++i)
- _meshIntegrators[i]->integrateJacobianAssembled(_jacobian, _t, _fields);
- numIntegrators = _submeshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _submeshIntegrators[i]->integrateJacobianAssembled(_jacobian, _t, _fields);
-
- // Flush assembled portion.
- _jacobian->assemble("flush_assembly");
-
- // Add in contributions that require assembly.
- numIntegrators = _meshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
_meshIntegrators[i]->integrateJacobian(_jacobian, _t, _fields);
numIntegrators = _submeshIntegrators.size();
for (int i=0; i < numIntegrators; ++i)
@@ -310,6 +339,23 @@
// Assemble jacobian.
_jacobian->assemble("final_assembly");
+ if (0 != _precondMatrix) {
+ // Recalculate preconditioner.
+ numIntegrators = _meshIntegrators.size();
+ for (int i=0; i < numIntegrators; ++i)
+ _meshIntegrators[i]->calcPreconditioner(&_precondMatrix,
+ _jacobian, _fields);
+ numIntegrators = _submeshIntegrators.size();
+ for (int i=0; i < numIntegrators; ++i)
+ _submeshIntegrators[i]->calcPreconditioner(&_precondMatrix,
+ _jacobian, _fields);
+
+ MatAssemblyBegin(_precondMatrix, MAT_FINAL_ASSEMBLY);
+ MatAssemblyEnd(_precondMatrix, MAT_FINAL_ASSEMBLY);
+
+ std::cout << "Preconditioner Matrix" << std::endl;
+ MatView(_precondMatrix, PETSC_VIEWER_STDOUT_WORLD);
+ } // if
} // reformJacobian
// ----------------------------------------------------------------------
@@ -334,16 +380,6 @@
// Assemble jacbian.
_jacobianLumped->complete();
- // Add in contributions that do not require assembly.
- numIntegrators = _meshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _meshIntegrators[i]->integrateJacobianAssembled(_jacobianLumped,
- _t, _fields);
- numIntegrators = _submeshIntegrators.size();
- for (int i=0; i < numIntegrators; ++i)
- _submeshIntegrators[i]->integrateJacobianAssembled(_jacobianLumped,
- _t, _fields);
-
} // reformJacobian
// ----------------------------------------------------------------------
@@ -385,6 +421,16 @@
void
pylith::problems::Formulation::adjustSolnLumped(void)
{ // adjustSolnLumped
+ topology::Field<topology::Mesh>& solution = _fields->solution();
+
+ if (!_fields->hasField("dispIncr adjust")) {
+ _fields->add("dispIncr adjust", "dispIncr_adjust");
+ topology::Field<topology::Mesh>& adjust = _fields->get("dispIncr adjust");
+ adjust.cloneSection(solution);
+ } // for
+ topology::Field<topology::Mesh>& adjust = _fields->get("dispIncr adjust");
+ adjust.zero();
+
int numIntegrators = _meshIntegrators.size();
for (int i=0; i < numIntegrators; ++i)
_meshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
@@ -392,6 +438,9 @@
numIntegrators = _submeshIntegrators.size();
for (int i=0; i < numIntegrators; ++i)
_submeshIntegrators[i]->adjustSolnLumped(_fields, *_jacobianLumped);
+
+ adjust.complete();
+ solution += adjust;
} // adjustSolnLumped
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Formulation.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,7 +26,7 @@
#include "pylith/feassemble/feassemblefwd.hh" // USES Integrator
#include "pylith/topology/topologyfwd.hh" // USES Mesh, Field, SolutionFields
-#include "pylith/utils/petscfwd.h" // USES PetscVec, PetscMat, PetscSNES
+#include "pylith/utils/petscfwd.h" // USES PetscVec, PetscMat
#include "pylith/utils/array.hh" // HASA std::vector
@@ -55,6 +55,30 @@
/// Deallocate PETSc and local data structures.
void deallocate(void);
+ /** Set flag for splitting fields.
+ *
+ * @param flag True if splitting fields, false otherwise.
+ */
+ void splitFields(const bool flag);
+
+ /** Get flag for splitting fields.
+ *
+ * @returns flag True if splitting fields, false otherwise.
+ */
+ bool splitFields(void) const;
+
+ /** Set flag for using custom preconditioner for Lagrange constraints.
+ *
+ * @param flag True if using custom fault preconditioner, false otherwise.
+ */
+ void useCustomConstraintPC(const bool flag);
+
+ /** Get flag indicating use of custom conditioner for Lagrange constraints.
+ *
+ * @returns True if using custom fault preconditioner, false otherwise.
+ */
+ bool useCustomConstraintPC(void) const;
+
/** Get solution fields.
*
* @returns solution fields.
@@ -83,6 +107,12 @@
void submeshIntegrators(IntegratorSubMesh** integrators,
const int numIntegrators);
+ /** Set handle to preconditioner.
+ *
+ * @param pc PETSc preconditioner.
+ */
+ void customPCMatrix(PetscMat& mat);
+
/// Initialize formulation.
virtual
void initialize(void);
@@ -167,6 +197,7 @@
double _t; ///< Current time (nondimensional).
double _dt; ///< Current time step (nondimensional).
topology::Jacobian* _jacobian; ///< Handle to Jacobian of system.
+ PetscMat _precondMatrix; ///< Custom PETSc preconditioning matrix.
topology::Field<topology::Mesh>* _jacobianLumped; ///< Handle to lumped Jacobian of system.
topology::SolutionFields* _fields; ///< Handle to solution fields for system.
@@ -177,7 +208,11 @@
std::vector<IntegratorSubMesh*> _submeshIntegrators;
bool _isJacobianSymmetric; ///< Is system Jacobian symmetric?
+ bool _splitFields; ///< True if splitting fields.
+ /// True if using custom preconditioner for Lagrange constraints.
+ bool _useCustomConstraintPC;
+
// NOT IMPLEMENTED //////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -14,11 +14,26 @@
#include "Solver.hh" // implementation of class methods
+#include "Formulation.hh" // USES Formulation
+
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+
#include "pylith/utils/EventLogger.hh" // USES EventLogger
+#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
#include <cassert> // USES assert()
+#define FIELD_SPLIT
+
+#if defined(FIELD_SPLIT)
+#include <petscmesh_solvers.hh> // USES constructFieldSplit()
+#endif
+
// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
// Constructor
pylith::problems::Solver::Solver(void) :
_formulation(0),
@@ -54,5 +69,79 @@
_formulation = formulation;
} // initialize
+// ----------------------------------------------------------------------
+// Setup preconditioner for preconditioning with split fields.
+void
+pylith::problems::Solver::_setupFieldSplit(PetscPC* const pc,
+ PetscMat* const precondMatrix,
+ Formulation* const formulation,
+ const topology::SolutionFields& fields)
+{ // _setupFieldSplit
+ assert(0 != pc);
+ assert(0 != precondMatrix);
+ assert(0 != formulation);
+ PetscErrorCode err = 0;
+
+ const ALE::Obj<SieveMesh>& sieveMesh = fields.mesh().sieveMesh();
+ const topology::Field<topology::Mesh>& solution = fields.solution();
+ const ALE::Obj<RealSection>& solutionSection = solution.section();
+ assert(!solutionSection.isNull());
+
+ err = PCSetType(*pc, PCFIELDSPLIT); CHECK_PETSC_ERROR(err);
+ err = PCSetOptionsPrefix(*pc, "fs_"); CHECK_PETSC_ERROR(err);
+ err = PCSetFromOptions(*pc); CHECK_PETSC_ERROR(err);
+
+#if defined(FIELD_SPLIT)
+ constructFieldSplit(solutionSection,
+ sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default",
+ solutionSection),
+ solution.vector(), *pc);
+
+ const int spaceDim = sieveMesh->getDimension();
+ if (solutionSection->getNumSpaces() > spaceDim &&
+ formulation->useCustomConstraintPC()) {
+ // Get total number of DOF associated with constraints field split
+ const ALE::Obj<RealSection>& constraintSection =
+ solutionSection->getFibration(spaceDim);
+ assert(!constraintSection.isNull());
+
+ // :TODO: Is this assembled across processors?
+ const int ndof = constraintSection->size();
+
+ if (0 != *precondMatrix) {
+ err = MatDestroy(*precondMatrix); *precondMatrix = 0;
+ CHECK_PETSC_ERROR(err);
+ } // if
+ PetscInt nrows = ndof;
+ PetscInt ncols = ndof;
+
+ err = MatCreate(sieveMesh->comm(), precondMatrix); CHECK_PETSC_ERROR(err);
+ err = MatSetSizes(*precondMatrix, nrows, ncols,
+ PETSC_DECIDE, PETSC_DECIDE); CHECK_PETSC_ERROR(err);
+ err = MatSetType(*precondMatrix, MATAIJ);
+ err = MatSetFromOptions(*precondMatrix); CHECK_PETSC_ERROR(err);
+
+#if 1
+ // Allocate just the diagonal.
+ err = MatSeqAIJSetPreallocation(*precondMatrix, 1,
+ PETSC_NULL); CHECK_PETSC_ERROR(err);
+ err = MatMPIAIJSetPreallocation(*precondMatrix, 1, PETSC_NULL,
+ 0, PETSC_NULL); CHECK_PETSC_ERROR(err);
+#else
+ // Allocate full matrix (overestimate).
+ err = MatSeqAIJSetPreallocation(*precondMatrix, ncols,
+ PETSC_NULL); CHECK_PETSC_ERROR(err);
+ err = MatMPIAIJSetPreallocation(*precondMatrix, ncols, PETSC_NULL,
+ 0, PETSC_NULL); CHECK_PETSC_ERROR(err);
+#endif
+
+ // Set preconditioning matrix in formulation
+ formulation->customPCMatrix(*precondMatrix);
+ } // if
+
+#endif
+} // _setupFieldSplit
+
+
// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/Solver.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -25,6 +25,7 @@
#include "pylith/topology/topologyfwd.hh" // USES SolutionFields
#include "pylith/utils/utilsfwd.hh" // USES EventLogger
+#include "pylith/utils/petscfwd.h" // USES PetscMat
// Solver ---------------------------------------------------------
/** @brief Abstract C++ base class for using PETSc linear and
@@ -60,6 +61,22 @@
const topology::Jacobian& jacobian,
Formulation* const formulation);
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Setup preconditioner for preconditioning using split fields.
+ *
+ * @param pc PETSc preconditioner.
+ * @param precondMatrix Matrix for custom preconditioner.
+ * @param formulation Formulation of system of equations.
+ * @param fields Solution fields.
+ */
+ void
+ _setupFieldSplit(PetscPC* const pc,
+ PetscMat* const precondMatrix,
+ Formulation* const formulation,
+ const topology::SolutionFields& fields);
+
// PROTECTED MEMBERS ////////////////////////////////////////////////////
protected :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -23,16 +23,15 @@
#include "pylith/utils/petscerror.h" // USES CHECK_PETSC_ERROR
-#define FIELD_SPLIT
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
-#if defined(FIELD_SPLIT)
-#include <petscmesh_solvers.hh> // USES constructFieldSplit()
-#endif
-
// ----------------------------------------------------------------------
// Constructor
pylith::problems::SolverLinear::SolverLinear(void) :
- _ksp(0)
+ _ksp(0),
+ _precondMatrix(0)
{ // constructor
} // constructor
@@ -54,6 +53,11 @@
PetscErrorCode err = KSPDestroy(_ksp); _ksp = 0;
CHECK_PETSC_ERROR(err);
} // if
+
+ if (0 != _precondMatrix) {
+ PetscErrorCode err = MatDestroy(_precondMatrix); _precondMatrix = 0;
+ CHECK_PETSC_ERROR(err);
+ } // if
} // deallocate
// ----------------------------------------------------------------------
@@ -78,21 +82,11 @@
err = KSPSetInitialGuessNonzero(_ksp, PETSC_FALSE); CHECK_PETSC_ERROR(err);
err = KSPSetFromOptions(_ksp); CHECK_PETSC_ERROR(err);
- const topology::Field<topology::Mesh>& residual = fields.get("residual");
-
- // Check for fibration
- if (residual.section()->getNumSpaces() > 0) {
- const ALE::Obj<topology::Mesh::SieveMesh>& sieveMesh = fields.mesh().sieveMesh();
- PC pc;
-
+ if (formulation->splitFields()) {
+ PetscPC pc = 0;
err = KSPGetPC(_ksp, &pc); CHECK_PETSC_ERROR(err);
- err = PCSetType(pc, PCFIELDSPLIT); CHECK_PETSC_ERROR(err);
- err = PCSetOptionsPrefix(pc, "fs_"); CHECK_PETSC_ERROR(err);
- err = PCSetFromOptions(pc); CHECK_PETSC_ERROR(err);
-#if defined(FIELD_SPLIT)
- constructFieldSplit(residual.section(), sieveMesh->getFactory()->getGlobalOrder(sieveMesh, "default", residual.section()), residual.vector(), pc);
-#endif
- }
+ _setupFieldSplit(&pc, &_precondMatrix, formulation, fields);
+ } // if
} // initialize
// ----------------------------------------------------------------------
@@ -129,6 +123,34 @@
} // else
jacobian->resetValuesChanged();
+ // Update KSP operators with custom preconditioner if necessary.
+ const ALE::Obj<RealSection>& solutionSection = solution->section();
+ assert(!solutionSection.isNull());
+ const ALE::Obj<SieveMesh>& sieveMesh = solution->mesh().sieveMesh();
+ assert(!sieveMesh.isNull());
+ if (solutionSection->getNumSpaces() > sieveMesh->getDimension() &&
+ 0 != _precondMatrix) {
+
+ PetscPC pc = 0;
+ PetscKSP *ksps = 0;
+ PetscMat A = 0;
+ PetscInt num = 0;
+
+ err = KSPSetUp(_ksp); CHECK_PETSC_ERROR(err);
+ err = KSPGetPC(_ksp, &pc); CHECK_PETSC_ERROR(err);
+ err = PCFieldSplitGetSubKSP(pc, &num, &ksps); CHECK_PETSC_ERROR(err);
+ assert(solutionSection->getNumSpaces() == num);
+
+ MatStructure flag;
+ err = KSPGetOperators(ksps[num-1], &A,
+ PETSC_NULL, &flag); CHECK_PETSC_ERROR(err);
+ err = PetscObjectReference((PetscObject) A); CHECK_PETSC_ERROR(err);
+ err = KSPSetOperators(ksps[num-1], A, _precondMatrix,
+ flag); CHECK_PETSC_ERROR(err);
+ err = PetscFree(ksps); CHECK_PETSC_ERROR(err);
+ } // if
+
+
const PetscVec residualVec = residual.vector();
const PetscVec solutionVec = solution->vector();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/problems/SolverLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -79,6 +79,7 @@
private :
PetscKSP _ksp; ///< PETSc KSP linear solver.
+ PetscMat _precondMatrix; ///< Preconditioning matrix for Lagrange constraints.
// NOT IMPLEMENTED //////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Distributor.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Distributor.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/Distributor.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -277,10 +277,7 @@
newLabel);
newLabel->symmetrize();
#else
- // Get remote labels
- ALE::New::Completion<SieveMesh,SieveMesh::point_type>::scatterCones(origLabel, newLabel, sendMeshOverlap, recvMeshOverlap, renumbering);
- // Create local label
- newLabel->add(origLabel, newSieveMesh->getSieve(), renumbering);
+ DistributionType::distributeLabelV(newSieveMesh->getSieve(), origLabel, partition, renumbering, sendMeshOverlap, recvMeshOverlap, newLabel);
#if 0 // DEBUGGING
std::string serialName("Serial ");
std::string parallelName("Parallel ");
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/ReverseCuthillMcKee.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/ReverseCuthillMcKee.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/topology/ReverseCuthillMcKee.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
//sieveMesh->view("MESH AFTER RELABEL");
} // if
- //logger.stagePop();
+ //logger.stagePop();
} // reorder
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscerror.h
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscerror.h 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscerror.h 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,14 +26,11 @@
#define __FUNCT__ "<unknown>"
#endif
-#define CHECK_PETSC_ERROR(err) \
- if (err) { \
- PetscError(PETSC_COMM_SELF, __LINE__, __FUNCT__, __FILE__, __SDIR__, err, 0, " "); \
- throw std::runtime_error("PETSc error."); }
+#define CHECK_PETSC_ERROR(err) CHKERRXX(err)
#define CHECK_PETSC_ERROR_MSG(err, msg) \
if (err) { \
- PetscError(PETSC_COMM_SELF, __LINE__, __FUNCT__, __FILE__, __SDIR__, err, 0, " "); \
+ PetscError(PETSC_COMM_SELF, __LINE__, __FUNCT__, __FILE__, __SDIR__, err, PETSC_ERROR_IN_CXX, 0, " "); \
throw std::runtime_error(msg); }
#endif // pylith_utils_petscerror_h
Modified: short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscfwd.h
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscfwd.h 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/libsrc/utils/petscfwd.h 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,9 @@
/// forward declaration for PETSc SNES
typedef struct _p_SNES* PetscSNES;
+/// forward declaration for PETSc PC
+typedef struct _p_PC* PetscPC;
+
/// forward declaration for PETSc PetscErrorCode
typedef int PetscErrorCode;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/DirichletBC.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -36,6 +36,12 @@
virtual
void deallocate(void);
+ /** Get number of constraints per location.
+ *
+ * @returns Number of constraints per location.
+ */
+ int numDimConstrained(void) const;
+
/** Initialize boundary condition.
*
* @param mesh PETSc mesh
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/bc/PointForce.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -48,9 +48,9 @@
* @param t Current time
* @param fields Solution fields
*/
- void integrateResidualAssembled(const pylith::topology::Field<pylith::topology::Mesh>& residual,
- const double t,
- pylith::topology::SolutionFields* const fields);
+ void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
/** Verify configuration is acceptable.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveDyn.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -62,6 +62,21 @@
const double upDir[3],
const double normalDir[3]);
+ /** Integrate contributions to residual term (r) for operator that
+ * do not require assembly across processors.
+ *
+ * Initial tractions (if specified) are already assembled and
+ * contribute to the residual like Neumann boundary conditions.
+ *
+ * @param residual Field containing values for residual
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ virtual
+ void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
+
/** Update state variables as needed.
*
* @param t Current time
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveKin.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -74,9 +74,9 @@
* @param t Current time
* @param fields Solution fields
*/
- void integrateResidualAssembled(const pylith::topology::Field<pylith::topology::Mesh>& residual,
- const double t,
- pylith::topology::SolutionFields* const fields);
+ void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double 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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/faults/FaultCohesiveLagrange.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -58,41 +58,39 @@
void splitField(pylith::topology::Field<pylith::topology::Mesh>* field);
/** Integrate contributions to residual term (r) for operator that
- * do not require assembly across cells, vertices, or processors.
+ * do not require assembly across processors.
*
* @param residual Field containing values for residual
* @param t Current time
* @param fields Solution fields
*/
virtual
- void integrateResidualAssembled(const pylith::topology::Field<pylith::topology::Mesh>& residual,
- const double t,
- pylith::topology::SolutionFields* const fields);
+ void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly across cells, vertices, or
- * processors.
+ * operator that do not require assembly processors.
*
* @param jacobian Sparse matrix
* @param t Current time
* @param fields Solution fields
* @param mesh Finite-element mesh
*/
- void integrateJacobianAssembled(pylith::topology::Jacobian* jacobian,
- const double t,
- pylith::topology::SolutionFields* const fields);
+ void integrateJacobian(pylith::topology::Jacobian* jacobian,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly across cells, vertices, or
- * processors.
+ * operator that do not require assembly across processors.
*
* @param jacobian Diagonal Jacobian matrix as a field.
* @param t Current time
* @param fields Solution fields
*/
- void integrateJacobianAssembled(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
- const double t,
- pylith::topology::SolutionFields* const fields);
+ void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
/** Adjust solution from solver with lumped Jacobian to match Lagrange
* multiplier constraints.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Constraint.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,21 @@
virtual
void deallocate(void);
+ /** Set flag for setting constraints for total field solution or
+ * incremental field solution.
+ *
+ * @param flag True if using incremental solution, false otherwise.
+ */
+ virtual
+ void useSolnIncr(const bool flag);
+
+ /** Get number of constraints per location.
+ *
+ * @returns Number of constraints per location.
+ */
+ virtual
+ int numDimConstrained(void) const = 0;
+
/** Set manager of scales used to nondimensionalize problem.
*
* @param dim Nondimensionalizer.
@@ -56,14 +71,6 @@
virtual
void setConstraints(const pylith::topology::Field<pylith::topology::Mesh>& field) = 0;
- /** Set flag for setting constraints for total field solution or
- * incremental field solution.
- *
- * @param flag True if using incremental solution, false otherwise.
- */
- virtual
- void useSolnIncr(const bool flag);
-
/** Set values in field.
*
* @param t Current time
Copied: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i (from rev 16839, short/3D/PyLith/trunk/modulesrc/feassemble/ElasticityExplicitTri3.i)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/ElasticityExplicitTri3.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,98 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file modulesrc/feassemble/ElasticityExplicitTri3.i
+ *
+ * @brief Python interface to C++ ElasticityExplicitTri3 object.
+ */
+
+namespace pylith {
+ namespace feassemble {
+
+ class ElasticityExplicitTri3 : public IntegratorElasticity
+ { // ElasticityExplicitTri3
+
+ // PUBLIC MEMBERS /////////////////////////////////////////////////
+ public :
+
+ /// Constructor
+ ElasticityExplicitTri3(void);
+
+ /// Destructor
+ ~ElasticityExplicitTri3(void);
+
+ /// Deallocate PETSc and local data structures.
+ void deallocate(void);
+
+ /** Set time step for advancing from time t to time t+dt.
+ *
+ * @param dt Time step
+ */
+ void timeStep(const double dt);
+
+ /** Set flag for setting constraints for total field solution or
+ * incremental field solution.
+ *
+ * @param flag True if using incremental solution, false otherwise.
+ */
+ void useSolnIncr(const bool flag);
+
+ /** Integrate contributions to residual term (r) for operator.
+ *
+ * @param residual Field containing values for residual
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateResidual(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
+
+ /** Integrate contributions to residual term (r) for operator.
+ *
+ * @param residual Field containing values for residual
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateResidualLumped(const pylith::topology::Field<pylith::topology::Mesh>& residual,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
+
+ /** Integrate contributions to Jacobian matrix (A) associated with
+ * operator.
+ *
+ * @param jacobian Sparse matrix for Jacobian of system.
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateJacobian(pylith::topology::Jacobian* jacobian,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
+
+ /** Integrate contributions to Jacobian matrix (A) associated
+ * with operator that require assembly across cells, vertices,
+ * or processors.
+ *
+ * @param jacobian Diagonal Jacobian matrix as a field.
+ * @param t Current time
+ * @param fields Solution fields
+ */
+ void integrateJacobian(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
+ const double t,
+ pylith::topology::SolutionFields* const fields);
+
+ }; // ElasticityExplicitTri3
+
+ } // feassemble
+} // pylith
+
+
+// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Integrator.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -86,6 +86,13 @@
virtual
bool needNewJacobian(void) const;
+ /** Check whether integrator generates a symmetric Jacobian.
+ *
+ * @returns True if integrator generates symmetric Jacobian.
+ */
+ virtual
+ bool isJacobianSymmetric(void) const;
+
/** Set flag for setting constraints for total field solution or
* incremental field solution.
*
@@ -119,18 +126,6 @@
const double t,
pylith::topology::SolutionFields* const fields);
- /** Integrate contributions to residual term (r) for operator that
- * do not require assembly over cells, vertices, or processors.
- *
- * @param residual Field containing values for residual
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateResidualAssembled(const pylith::topology::Field<pylith::topology::Mesh>& residual,
- const double t,
- pylith::topology::SolutionFields* const fields);
-
/** Integrate contributions to Jacobian matrix (A) associated with
* operator.
*
@@ -144,19 +139,6 @@
pylith::topology::SolutionFields* const fields);
/** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly over cells, vertices, or
- * processors
- *
- * @param jacobian Sparse matrix for Jacobian of system.
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateJacobianAssembled(pylith::topology::Jacobian* jacobian,
- const double t,
- pylith::topology::SolutionFields* const fields);
-
- /** Integrate contributions to Jacobian matrix (A) associated with
* operator.
*
* @param jacobian Diagonal matrix (as field) for Jacobian of system.
@@ -168,19 +150,6 @@
const double t,
pylith::topology::SolutionFields* const fields);
- /** Integrate contributions to Jacobian matrix (A) associated with
- * operator that do not require assembly over cells, vertices, or
- * processors
- *
- * @param jacobian Diagonal matrix (as field) for Jacobian of system.
- * @param t Current time
- * @param fields Solution fields
- */
- virtual
- void integrateJacobianAssembled(pylith::topology::Field<pylith::topology::Mesh>* jacobian,
- const double t,
- pylith::topology::SolutionFields* const fields);
-
/** Update state variables as needed.
*
* @param t Current time
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,7 @@
IntegratorElasticity.i \
ElasticityImplicit.i \
ElasticityExplicit.i \
+ ElasticityExplicitTri3.i \
ElasticityExplicitTet4.i \
IntegratorElasticityLgDeform.i \
ElasticityImplicitLgDeform.i \
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/feassemble/feassemble.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
#include "pylith/feassemble/Quadrature.hh"
#include "pylith/feassemble/ElasticityImplicit.hh"
#include "pylith/feassemble/ElasticityExplicit.hh"
+#include "pylith/feassemble/ElasticityExplicitTri3.hh"
#include "pylith/feassemble/ElasticityExplicitTet4.hh"
#include "pylith/feassemble/ElasticityImplicitLgDeform.hh"
#include "pylith/feassemble/ElasticityExplicitLgDeform.hh"
@@ -85,6 +86,7 @@
%include "ElasticityImplicit.i"
%include "ElasticityExplicit.i"
%include "ElasticityExplicitTet4.i"
+%include "ElasticityExplicitTri3.i"
%include "IntegratorElasticityLgDeform.i"
%include "ElasticityImplicitLgDeform.i"
%include "ElasticityExplicitLgDeform.i"
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/DruckerPrager3D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,7 +54,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -78,7 +78,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize state variables..
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticIsotropic3D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStrain.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticPlaneStress.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStrain1D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/ElasticStress1D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -52,7 +52,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/GenMaxwellIsotropic3D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,7 +54,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -78,7 +78,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Compute density from properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/Material.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -120,6 +120,12 @@
/// current state.
void resetNeedNewJacobian(void);
+ /** Check whether integrator generates a symmetric Jacobian.
+ *
+ * @returns True if integrator generates symmetric Jacobian.
+ */
+ bool isJacobianSymmetric(void) const;
+
/** Get physical property or state variable field. Data is returned
* via the argument.
*
@@ -151,7 +157,7 @@
*/
virtual
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const = 0;
+ const pylith::double_array& dbValues) = 0;
/** Nondimensionalize properties.
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellIsotropic3D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,7 +54,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -78,7 +78,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
// Note: We do not need to dimensionalize or nondimensionalize state
// variables because there are strains, which are dimensionless.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/MaxwellPlaneStrain.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,7 +54,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -78,7 +78,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
// Note: We do not need to dimensionalize or nondimensionalize state
// variables because there are strains, which are dimensionless.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/materials/PowerLaw3D.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,7 +54,7 @@
* @param dbValues Array of database values.
*/
void _dbToProperties(double* const propValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize properties.
*
@@ -78,7 +78,7 @@
* @param dbValues Array of database values.
*/
void _dbToStateVars(double* const stateValues,
- const pylith::double_array& dbValues) const;
+ const pylith::double_array& dbValues);
/** Nondimensionalize state variables..
*
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/MeshIOCubit.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/MeshIOCubit.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/meshio/MeshIOCubit.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -46,6 +46,12 @@
*/
const char* filename(void) const;
+ /** Set flag on whether to use nodeset ids or names.
+ *
+ * @param flag True to use node set names.
+ */
+ void useNodesetNames(const bool flag);
+
// PROTECTED METHODS ////////////////////////////////////////////////////
protected :
Modified: short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/modulesrc/problems/Formulation.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -34,6 +34,32 @@
/// Deallocate PETSc and local data structures.
void deallocate(void);
+ /** Set flag for splitting fields.
+ *
+ * @param flag True if splitting fields, false otherwise.
+ */
+ void splitFields(const bool flag);
+
+ /** Get flag for splitting fields.
+ *
+ * @returns flag True if splitting fields, false otherwise.
+ */
+ bool splitFields(void) const;
+
+ /** Set flag for using custom Lagrange constraint preconditioner.
+ *
+ * @param flag True if using custom constraint precondition,
+ * false otherwise.
+ */
+ void useCustomConstraintPC(const bool flag);
+
+ /** Get flag indicating use of custom Lagrange constraint conditioner.
+ *
+ * @returns flag True if using custom constraint preconditioner,
+ * false otherwise.
+ */
+ bool useCustomConstraintPC(void) const;
+
/** Get solution fields.
*
* @returns solution fields.
Copied: short/3D/PyLith/branches/pylith-scecdynrup/playpen/faultpc (from rev 16839, short/3D/PyLith/trunk/playpen/faultpc)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,6 +44,7 @@
feassemble/Constraint.py \
feassemble/ElasticityExplicit.py \
feassemble/ElasticityExplicitTet4.py \
+ feassemble/ElasticityExplicitTri3.py \
feassemble/ElasticityExplicitLgDeform.py \
feassemble/ElasticityImplicit.py \
feassemble/ElasticityImplicitLgDeform.py \
@@ -118,6 +119,7 @@
problems/__init__.py \
problems/Explicit.py \
problems/ExplicitLumped.py \
+ problems/ExplicitLumpedTri3.py \
problems/ExplicitLumpedTet4.py \
problems/ExplicitLgDeform.py \
problems/Formulation.py \
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTet4.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTet4.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTet4.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -29,7 +29,7 @@
# PUBLIC METHODS /////////////////////////////////////////////////////
- def __init__(self, name="elasticityexplicit"):
+ def __init__(self, name="elasticityexplicittet4"):
"""
Constructor.
"""
Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTri3.py (from rev 16839, short/3D/PyLith/trunk/pylith/feassemble/ElasticityExplicitTri3.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTri3.py (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/ElasticityExplicitTri3.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,66 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/feassemble/ElasticityExplicitTri3.py
+##
+## @brief Python object for explicit time integration of dynamic
+## elasticity equation using finite-elements.
+##
+## Factory: integrator
+
+from IntegratorElasticity import IntegratorElasticity
+from feassemble import ElasticityExplicitTri3 as ModuleElasticityExplicitTri3
+
+# ElasticityExplicitTri3 class
+class ElasticityExplicitTri3(IntegratorElasticity, ModuleElasticityExplicitTri3):
+ """
+ Python object for explicit time integration of dynamic elasticity
+ equation using finite-elements.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="elasticityexplicittri3"):
+ """
+ Constructor.
+ """
+ IntegratorElasticity.__init__(self, name)
+ ModuleElasticityExplicitTri3.__init__(self)
+ self._loggingPrefix = "ElEx "
+ return
+
+
+ def initialize(self, totalTime, numTimeSteps, normalizer):
+ """
+ Do initialization.
+ """
+ logEvent = "%sinit" % self._loggingPrefix
+ self._eventLogger.eventBegin(logEvent)
+
+ IntegratorElasticity.initialize(self, totalTime, numTimeSteps, normalizer)
+ ModuleElasticityExplicitTri3.initialize(self, self.mesh)
+ self._initializeOutput(totalTime, numTimeSteps, normalizer)
+
+ self._eventLogger.eventEnd(logEvent)
+ return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def integrator():
+ """
+ Factory associated with ElasticityExplicitTri3.
+ """
+ return ElasticityExplicitTri3()
+
+
+# End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/FIATSimplex.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -185,8 +185,8 @@
elif 3 == spaceDim:
self.geometry = CellGeometry.GeometryPoint3D()
if None == self.geometry:
- raise ValueError("Could not set shape of cell for '%s' in spatial " \
- "dimension '%s'." % (self.name, spaceDim))
+ raise ValueError("Could not set shape '%s' of cell for '%s' in spatial " \
+ "dimension '%s'." % (name, self.name, spaceDim))
return
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Integrator.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Integrator.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/feassemble/Integrator.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -28,8 +28,6 @@
"useSolnIncr",
"integrateResidual",
"integrateJacobian",
- "integrateResidualAssembled",
- "integrateJacobianAssembled",
"preinitialize",
"verifyConfiguration",
"initialize",
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/meshio/MeshIOCubit.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -49,6 +49,9 @@
filename = pyre.inventory.str("filename", default="mesh.exo")
filename.meta['tip'] = "Name of Cubit Exodus file."
+ useNames = pyre.inventory.bool("use_nodeset_names", default=True)
+ useNames.meta['tip'] = "Use nodeset names instead of ids."
+
from spatialdata.geocoords.CSCart import CSCart
coordsys = pyre.inventory.facility("coordsys", family="coordsys",
factory=CSCart)
@@ -73,7 +76,8 @@
"""
MeshIOObj._configure(self)
self.coordsys = self.inventory.coordsys
- self.filename(self.inventory.filename)
+ ModuleMeshIOCubit.filename(self, self.inventory.filename)
+ ModuleMeshIOCubit.useNodesetNames(self, self.inventory.useNames)
return
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Explicit.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -92,8 +92,10 @@
logger.stagePop()
self._info.log("Creating Jacobian matrix.")
+ self._setJacobianMatrixType()
from pylith.topology.Jacobian import Jacobian
- self.jacobian = Jacobian(self.fields.solution(), self.matrixType)
+ self.jacobian = Jacobian(self.fields.solution(),
+ self.matrixType, self.blockMatrixOkay)
self.jacobian.zero() # TEMPORARY, to get correct memory usage
self._debug.log(resourceUsageString())
Copied: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumpedTri3.py (from rev 16839, short/3D/PyLith/trunk/pylith/problems/ExplicitLumpedTri3.py)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumpedTri3.py (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/ExplicitLumpedTri3.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file pylith/problems/ExplicitLumpedTri3.py
+##
+## @brief Python ExplicitLumpedTri3 object for solving equations using an
+## explicit formulation with a lumped Jacobian matrix that is stored
+## as a Field.
+##
+## Factory: pde_formulation
+
+from ExplicitLumped import ExplicitLumped
+from pylith.utils.profiling import resourceUsageString
+
+# ExplicitLumpedTri3 class
+class ExplicitLumpedTri3(ExplicitLumped):
+ """
+ Python ExplicitLumpedTri3 object for solving equations using an explicit
+ formulation.
+
+ The formulation has the general form, [A(t)] {u(t+dt)} = {b(t)},
+ where we want to solve for {u(t+dt)}, A(t) is usually constant
+ (i.e., independent of time), and {b(t)} usually depends on {u(t)}
+ and {u(t-dt)}.
+
+ Jacobian: A(t)
+ solution: u(t+dt)
+ residual: b(t) - A(t) \hat u(t+dt)
+ constant: b(t)
+
+ Factory: pde_formulation.
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="explicitlumpedtri3"):
+ """
+ Constructor.
+ """
+ ExplicitLumped.__init__(self, name)
+ return
+
+
+ def elasticityIntegrator(self):
+ """
+ Get integrator for elastic material.
+ """
+ from pylith.feassemble.ElasticityExplicitTri3 import ElasticityExplicitTri3
+ return ElasticityExplicitTri3()
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _configure(self):
+ """
+ Set members based using inventory.
+ """
+ ExplicitLumped._configure(self)
+ return
+
+
+# FACTORIES ////////////////////////////////////////////////////////////
+
+def pde_formulation():
+ """
+ Factory associated with ExplicitLumped.
+ """
+ return ExplicitLumpedTri3()
+
+
+# End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Formulation.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -58,9 +58,10 @@
## \b Properties
## @li \b matrix_type Type of PETSc sparse matrix.
## @li \b split_fields Split solution fields into displacements
- ## and Lagrange multipliers for separate preconditioning.
+ ## @li \b use_custom_constraint_pc Use custom preconditioner for
+ ## Lagrange constraints.
## @li \b view_jacobian Flag to output Jacobian matrix when it is
- ## reformed.
+ ## reformed.
##
## \b Facilities
## @li \b time_step Time step size manager.
@@ -73,10 +74,15 @@
matrixType = pyre.inventory.str("matrix_type", default="unknown")
matrixType.meta['tip'] = "Type of PETSc sparse matrix."
- splitFields = pyre.inventory.bool("split_fields", default=False)
- splitFields.meta['tip'] = "Split solution fields into displacements "\
+ useSplitFields = pyre.inventory.bool("split_fields", default=False)
+ useSplitFields.meta['tip'] = "Split solution fields into displacements "\
"and Lagrange multipliers for separate preconditioning."
+ useCustomConstraintPC = pyre.inventory.bool("use_custom_constraint_pc",
+ default=False)
+ useCustomConstraintPC.meta['tip'] = "Use custom preconditioner for " \
+ "Lagrange constraints."
+
viewJacobian = pyre.inventory.bool("view_jacobian", default=False)
viewJacobian.meta['tip'] = "Write Jacobian matrix to binary file."
@@ -279,7 +285,6 @@
"""
PetscComponent._configure(self)
self.matrixType = self.inventory.matrixType
- self.splitFields = self.inventory.splitFields
self.timeStep = self.inventory.timeStep
self.solver = self.inventory.solver
self.output = self.inventory.output
@@ -289,9 +294,46 @@
import journal
self._debug = journal.debug(self.name)
+
+ if self.inventory.useCustomConstraintPC and \
+ not self.inventory.useSplitFields:
+ print "WARNING: Request to use custom preconditioner for Lagrange " \
+ "constraints without splitting fields. " \
+ "Setting split fields flag to 'True'."
+ self.inventory.useSplitFields = True
+
+ ModuleFormulation.splitFields(self, self.inventory.useSplitFields)
+ ModuleFormulation.useCustomConstraintPC(self,
+ self.inventory.useCustomConstraintPC)
return
+ def _setJacobianMatrixType(self):
+ """
+ Determine appropriate PETSc matrix type for Jacobian matrix.
+ """
+ # Mapping from symmetric matrix type to nonsymmetric matrix type
+ matrixMap = {'sbaij': 'baij',
+ 'seqsbaij': 'seqbaij',
+ 'mpisbaij': 'mpibaij',
+ 'unknown': 'aij'}
+ isJacobianSymmetric = True
+ for integrator in self.integratorsMesh + self.integratorsSubMesh:
+ if not integrator.isJacobianSymmetric():
+ isJacobianSymmetric = False
+ if not isJacobianSymmetric:
+ if self.matrixType in matrixMap.keys():
+ print "WARNING: Jacobian matrix will not be symmetric.\n" \
+ " Switching matrix type from '%s' to '%s'." % \
+ (self.matrixType, matrixMap[self.matrixType])
+ self.matrixType = matrixMap[self.matrixType]
+ self.blockMatrixOkay = True
+ 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.
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/problems/Implicit.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -132,8 +132,10 @@
# 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.jacobian = Jacobian(self.fields.solution(),
+ self.matrixType, self.blockMatrixOkay)
self.jacobian.zero() # TEMPORARY, to get correct memory usage
self._debug.log(resourceUsageString())
Modified: short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Jacobian.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Jacobian.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/pylith/topology/Jacobian.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -25,7 +25,7 @@
# PUBLIC METHODS /////////////////////////////////////////////////////
- def __init__(self, field, matrixType="unknown"):
+ def __init__(self, field, matrixType="unknown", blockOkay=False):
"""
Constructor.
@@ -35,7 +35,8 @@
if matrixType == "unknown":
matrixType = "sbaij"
- ModuleJacobian.__init__(self, field, matrixType)
+ #print "MATRIX TYPE: %s, BLOCKOKAY: %s" % (matrixType, blockOkay)
+ ModuleJacobian.__init__(self, field, matrixType, blockOkay)
return
Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -27,7 +27,22 @@
materials/tests/TestPlaneStrainState.py \
materials/m4/ac_pkg_swig.m4 \
materials/m4/cit_numpy.m4 \
- materials/m4/cit_python.m4
+ materials/m4/cit_python.m4 \
+ friction/README \
+ friction/configure.ac \
+ friction/Makefile.am \
+ friction/ViscousFriction.hh \
+ friction/ViscousFriction.cc \
+ friction/ViscousFriction.i \
+ friction/frictioncontrib.i \
+ friction/__init__.py \
+ friction/ViscousFriction.py \
+ friction/tests/Makefile.am \
+ friction/tests/testcontrib.py \
+ friction/tests/TestViscousFriction.py \
+ friction/m4/ac_pkg_swig.m4 \
+ friction/m4/cit_numpy.m4 \
+ friction/m4/cit_python.m4
# End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/README
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/README 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/README 2010-05-30 21:53:47 UTC (rev 16840)
@@ -1,3 +1,6 @@
This directory contains templates for extending the functionality of
-PyLith. This includes creating user-defined bulk constitutive models
-(see the materials directory).
+PyLith.
+
+Directories
+ * friction - fault constitutive models
+ * materials - bulk constitutive models
Copied: short/3D/PyLith/branches/pylith-scecdynrup/templates/friction (from rev 16839, short/3D/PyLith/trunk/templates/friction)
Property changes on: short/3D/PyLith/branches/pylith-scecdynrup/templates/friction
___________________________________________________________________
Name: svn:externals
+ m4 http://geodynamics.org/svn/cig/cs/autoconf/trunk
Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -13,7 +13,7 @@
// See PlaneStrainState.hh for a description of each C++ function and
// its arguments.
-#include <portinfo> // machine specificinfo generated by configure
+#include <portinfo> // machine specific info generated by configure
#include "PlaneStrainState.hh" // implementation of object methods
Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/PlaneStrainState.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -20,7 +20,7 @@
# Import the SWIG module PlanseStrainState object and rename it
# ModulePlaneStrainState so that it doesn't clash with the local
-# Python class with the same name.
+# Python class of the same name.
from materialscontrib import PlaneStrainState as ModulePlaneStrainState
# PlaneStrainState class
Modified: short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/materialscontrib.i
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/materialscontrib.i 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/templates/materials/materialscontrib.i 2010-05-30 21:53:47 UTC (rev 16840)
@@ -10,7 +10,7 @@
// ======================================================================
//
-// Define the spatialdatacontrib SWIG interface module.
+// Define the materialscontrib SWIG interface module.
// Set module name
%module materialscontrib
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/axialdisp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/axialdisp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/axialdisp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[axialdisp.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[dislocation.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation2.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation2.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/dislocation2.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -31,6 +31,7 @@
[pylithapp.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_compression.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -28,6 +28,7 @@
[friction_compression.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_opening.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[friction_opening.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_sliding.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[friction_shear_sliding.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/friction_shear_stick.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[friction_shear_stick.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformrigidbody.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[lgdeformrigidbody.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformtraction.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformtraction.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/lgdeformtraction.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[lgdeformtraction.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/sheardisp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/sheardisp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/sheardisp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[sheardisp.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_compression.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -28,6 +28,7 @@
[slipweakening_compression.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_opening.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[slipweakening_opening.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_sliding.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[slipweakening_shear_sliding.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/quad4/slipweakening_shear_stick.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -35,6 +35,7 @@
# the mesh.
[slipweakening_shear_stick.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/axialdisp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/axialdisp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/axialdisp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[axialdisp.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -23,6 +23,7 @@
[dislocation.mesh_generator.reader]
filename = box_tri3_100m.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation2.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation2.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/dislocation2.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -23,6 +23,7 @@
[dislocation2.mesh_generator.reader]
filename = box_tri3_100m.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/sheardisp.cfg
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/sheardisp.cfg 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/tests_auto/2d/tri3/sheardisp.cfg 2010-05-30 21:53:47 UTC (rev 16840)
@@ -26,6 +26,7 @@
[sheardisp.mesh_generator.reader]
filename = mesh.exo
+use_nodeset_names = False
coordsys.space_dim = 2
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -120,6 +120,19 @@
} // testInitialize
// ----------------------------------------------------------------------
+// Test numDimConstrained().
+void
+pylith::bc::TestDirichletBC::testNumDimConstrained(void)
+{ // testNumDimConstrained
+ topology::Mesh mesh;
+ DirichletBC bc;
+ _initialize(&mesh, &bc);
+ CPPUNIT_ASSERT(0 != _data);
+
+ CPPUNIT_ASSERT_EQUAL(_data->numFixedDOF, bc.numDimConstrained());
+} // testNumDimConstrained
+
+// ----------------------------------------------------------------------
// Test setConstraintSizes().
void
pylith::bc::TestDirichletBC::testSetConstraintSizes(void)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBC.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -60,6 +60,9 @@
/// Test initialize().
void testInitialize(void);
+ /// Test numDimConstrained().
+ void testNumDimConstrained(void);
+
/// Test setConstraintSizes().
void testSetConstraintSizes(void);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestDirichletBCLine2, TestDirichletBC );
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testNumDimConstrained );
CPPUNIT_TEST( testSetConstraintSizes );
CPPUNIT_TEST( testSetConstraints );
CPPUNIT_TEST( testSetField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2b.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2b.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCLine2b.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -36,10 +36,13 @@
// CPPUNIT TEST SUITE /////////////////////////////////////////////////
CPPUNIT_TEST_SUB_SUITE( TestDirichletBCLine2b, TestDirichletBC );
+
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testNumDimConstrained );
CPPUNIT_TEST( testSetConstraintSizes );
CPPUNIT_TEST( testSetConstraints );
CPPUNIT_TEST( testSetField );
+
CPPUNIT_TEST_SUITE_END();
// PUBLIC METHODS /////////////////////////////////////////////////////
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCQuad4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCQuad4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestDirichletBCQuad4, TestDirichletBC );
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testNumDimConstrained );
CPPUNIT_TEST( testSetConstraintSizes );
CPPUNIT_TEST( testSetConstraints );
CPPUNIT_TEST( testSetField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTet4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTet4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestDirichletBCTet4, TestDirichletBC );
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testNumDimConstrained );
CPPUNIT_TEST( testSetConstraintSizes );
CPPUNIT_TEST( testSetConstraints );
CPPUNIT_TEST( testSetField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTri3.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestDirichletBCTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,6 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestDirichletBCTri3, TestDirichletBC );
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testNumDimConstrained );
CPPUNIT_TEST( testSetConstraintSizes );
CPPUNIT_TEST( testSetConstraints );
CPPUNIT_TEST( testSetField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -131,10 +131,10 @@
} // testInitialize
// ----------------------------------------------------------------------
-// Test integrateResidualAssembled().
+// Test integrateResidual().
void
-pylith::bc::TestPointForce::testIntegrateResidualAssembled(void)
-{ // testIntegrateResidualAssembled
+pylith::bc::TestPointForce::testIntegrateResidual(void)
+{ // testIntegrateResidual
topology::Mesh mesh;
PointForce bc;
_initialize(&mesh, &bc);
@@ -150,7 +150,7 @@
topology::SolutionFields fields(mesh);
const double t = _data->tResidual;
- bc.integrateResidualAssembled(residual, t, &fields);
+ bc.integrateResidual(residual, t, &fields);
const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
CPPUNIT_ASSERT(!sieveMesh.isNull());
@@ -174,7 +174,7 @@
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vals[i]/valsE[i], tolerance);
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
-} // testIntegrateResidualAssembled
+} // testIntegrateResidual
// ----------------------------------------------------------------------
// Test verifyConfiguration().
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForce.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -64,8 +64,8 @@
/// Test initialize().
void testInitialize(void);
- /// Test integrateResidualAssembled().
- void testIntegrateResidualAssembled(void);
+ /// Test integrateResidual().
+ void testIntegrateResidual(void);
/// Test verifyConfiguration().
void testVerifyConfiguration(void);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceHex8.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceHex8.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,7 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestPointForceHex8, TestPointForce );
CPPUNIT_TEST( testInitialize );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
+ CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testVerifyConfiguration );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceLine2.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceLine2.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,7 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestPointForceLine2, TestPointForce );
CPPUNIT_TEST( testInitialize );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
+ CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testVerifyConfiguration );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceQuad4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceQuad4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,7 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestPointForceQuad4, TestPointForce );
CPPUNIT_TEST( testInitialize );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
+ CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testVerifyConfiguration );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTet4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTet4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,7 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestPointForceTet4, TestPointForce );
CPPUNIT_TEST( testInitialize );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
+ CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testVerifyConfiguration );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTri3.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/TestPointForceTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -38,7 +38,7 @@
CPPUNIT_TEST_SUB_SUITE( TestPointForceTri3, TestPointForce );
CPPUNIT_TEST( testInitialize );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
+ CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testVerifyConfiguration );
CPPUNIT_TEST_SUITE_END();
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/AbsorbingDampersDataTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -18,10 +18,10 @@
const int pylith::bc::AbsorbingDampersDataTet4::_numBasis = 3;
const int pylith::bc::AbsorbingDampersDataTet4::_numQuadPts = 1;
const double pylith::bc::AbsorbingDampersDataTet4::_quadPts[] = {
- 0.3333333333333333, 0.3333333333333333
+ -0.3333333333333333, -0.3333333333333333
};
const double pylith::bc::AbsorbingDampersDataTet4::_quadWts[] = {
- 0.5,
+ 2.0,
};
const double pylith::bc::AbsorbingDampersDataTet4::_basis[] = {
0.3333333333333333,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/bc/data/NeumannDataTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -36,10 +36,10 @@
const int pylith::bc::NeumannDataTet4::_numBasis = 3;
const int pylith::bc::NeumannDataTet4::_numQuadPts = 1;
const double pylith::bc::NeumannDataTet4::_quadPts[] = {
- 0.3333333333333333, 0.3333333333333333
+ -0.3333333333333333, -0.3333333333333333
};
const double pylith::bc::NeumannDataTet4::_quadWts[] = {
- 0.5,
+ 2.0,
};
const double pylith::bc::NeumannDataTet4::_basis[] = {
0.3333333333333333,
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -252,95 +252,6 @@
const ALE::Obj<RealSection>& residualSection = residual.section();
CPPUNIT_ASSERT(!residualSection.isNull());
- const ALE::Obj<RealSection>& dispSection =
- fields.get("disp(t)").section();
- CPPUNIT_ASSERT(!dispSection.isNull());
-
- 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]);
-
- const double t = 2.134;
- const double dt = 0.01;
- fault.timeStep(dt);
- { // Integrate residual with disp (as opposed to disp increment).
- fault.useSolnIncr(false);
- fault.integrateResidual(residual, t, &fields);
-
- //residual.view("RESIDUAL"); // DEBUGGING
-
- // Check values
- iVertex = 0;
- const int fiberDimE = spaceDim;
- const double tolerance = 1.0e-06;
- 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);
- CPPUNIT_ASSERT(0 != vals);
-
- for (int i=0; i < fiberDimE; ++i) {
- const int index = iVertex*spaceDim+i;
- const double valE = 0.0;
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
- } // for
- } // for
- } // Integrate residual with disp (as opposed to disp increment).
-
- residual.zero();
- { // Integrate residual with disp increment.
- fault.useSolnIncr(true);
- fault.integrateResidual(residual, t, &fields);
-
- //residual.view("RESIDUAL"); // DEBUGGING
-
- // Check values
- iVertex = 0;
- const int fiberDimE = spaceDim;
- const double tolerance = 1.0e-06;
- 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);
- CPPUNIT_ASSERT(0 != vals);
-
- for (int i=0; i < fiberDimE; ++i) {
- const int index = iVertex*spaceDim+i;
- const double valE = 0.0;
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[i], tolerance);
- } // for
- } // for
- } // Integrate residual with disp increment.
-} // testIntegrateResidual
-
-// ----------------------------------------------------------------------
-// Test integrateResidualAssembled().
-void
-pylith::faults::TestFaultCohesiveKin::testIntegrateResidualAssembled(void)
-{ // testIntegrateResidualAssembled
- topology::Mesh mesh;
- FaultCohesiveKin fault;
- topology::SolutionFields fields(mesh);
- _initialize(&mesh, &fault, &fields);
-
- const int spaceDim = _data->spaceDim;
- topology::Field<topology::Mesh>& residual = fields.get("residual");
- const ALE::Obj<RealSection>& residualSection = residual.section();
- CPPUNIT_ASSERT(!residualSection.isNull());
-
const ALE::Obj<RealSection>& dispSection = fields.get("disp(t)").section();
CPPUNIT_ASSERT(!dispSection.isNull());
@@ -359,9 +270,10 @@
const double t = 2.134;
const double dt = 0.01;
fault.timeStep(dt);
+
{ // Integrate residual with disp (as opposed to disp increment).
fault.useSolnIncr(false);
- fault.integrateResidualAssembled(residual, t, &fields);
+ fault.integrateResidual(residual, t, &fields);
//residual.view("RESIDUAL"); // DEBUGGING
@@ -392,9 +304,9 @@
residual.zero();
{ // Integrate residual with disp increment.
fault.useSolnIncr(true);
- fault.integrateResidualAssembled(residual, t, &fields);
+ fault.integrateResidual(residual, t, &fields);
- //residual->view("RESIDUAL"); // DEBUGGING
+ //residual.view("RESIDUAL"); // DEBUGGING
// Check values
const double* valsE = _data->residualIncr;
@@ -419,7 +331,7 @@
} // for
} // for
} // Integrate residual with disp increment.
-} // testIntegrateResidualAssembled
+} // testIntegrateResidual
// ----------------------------------------------------------------------
// Test integrateJacobian().
@@ -431,87 +343,7 @@
topology::SolutionFields fields(mesh);
_initialize(&mesh, &fault, &fields);
- const ALE::Obj<RealSection>& dispSection = fields.get("disp(t)").section();
- CPPUNIT_ASSERT(!dispSection.isNull());
-
const int spaceDim = _data->spaceDim;
- 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]);
- } // for
-
- topology::Jacobian jacobian(fields.solution());
-
- const double t = 2.134;
- fault.integrateJacobian(&jacobian, t, &fields);
- CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
-
- jacobian.assemble("final_assembly");
-
- //MatView(jacobian, PETSC_VIEWER_STDOUT_WORLD); // DEBUGGING
-
- const double* valsE = _data->jacobian;
- const int nrowsE = dispSection->sizeWithBC();
- const int ncolsE = nrowsE;
-
- int nrows = 0;
- int ncols = 0;
- PetscMat jacobianMat = jacobian.matrix();
- MatGetSize(jacobianMat, &nrows, &ncols);
- CPPUNIT_ASSERT_EQUAL(nrowsE, nrows);
- CPPUNIT_ASSERT_EQUAL(ncolsE, ncols);
-
- PetscMat jDense;
- PetscMat jSparseAIJ;
- MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
- MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
-
- double_array vals(nrows*ncols);
- int_array rows(nrows);
- int_array cols(ncols);
- for (int iRow=0; iRow < nrows; ++iRow)
- rows[iRow] = iRow;
- 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;
- for (int iRow=0; iRow < nrows; ++iRow)
- for (int iCol=0; iCol < ncols; ++iCol) {
- const int index = ncols*iRow+iCol;
- const double valE = 0.0;
-#if 0 // DEBUGGING
- if (fabs(valE-vals[index]) > tolerance)
- std::cout << "ERROR: iRow: " << iRow << ", iCol: " << iCol
- << "valE: " << valE
- << ", val: " << vals[index]
- << std::endl;
-#endif // DEBUGGING
- CPPUNIT_ASSERT_DOUBLES_EQUAL(valE, vals[index], tolerance);
- } // for
- MatDestroy(jDense);
- MatDestroy(jSparseAIJ);
- CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
-} // testIntegrateJacobian
-
-// ----------------------------------------------------------------------
-// Test integrateJacobianAssembled().
-void
-pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianAssembled(void)
-{ // testIntegrateJacobianAssembled
- 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());
@@ -530,7 +362,7 @@
topology::Jacobian jacobian(fields.solution());
const double t = 2.134;
- fault.integrateJacobianAssembled(&jacobian, t, &fields);
+ fault.integrateJacobian(&jacobian, t, &fields);
CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
jacobian.assemble("final_assembly");
@@ -582,13 +414,13 @@
MatDestroy(jDense);
MatDestroy(jSparseAIJ);
CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
-} // testIntegrateJacobianAssembled
+} // testIntegrateJacobian
// ----------------------------------------------------------------------
-// Test integrateJacobianAssembled() with lumped Jacobian.
+// Test integrateJacobian() with lumped Jacobian.
void
-pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianAssembledLumped(void)
-{ // testIntegrateJacobianAssembledLumped
+pylith::faults::TestFaultCohesiveKin::testIntegrateJacobianLumped(void)
+{ // testIntegrateJacobianLumped
topology::Mesh mesh;
FaultCohesiveKin fault;
topology::SolutionFields fields(mesh);
@@ -601,7 +433,7 @@
jacobian.allocate();
const double t = 2.134;
- fault.integrateJacobianAssembled(&jacobian, t, &fields);
+ fault.integrateJacobian(&jacobian, t, &fields);
CPPUNIT_ASSERT_EQUAL(false, fault.needNewJacobian());
jacobian.complete();
@@ -651,7 +483,7 @@
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, jacobianVertex[iDim],
tolerance);
} // for
-} // testIntegrateJacobianAssembledLumped
+} // testIntegrateJacobianLumped
// ----------------------------------------------------------------------
// Test adjustSolnLumped().
@@ -690,7 +522,6 @@
topology::Field<topology::Mesh>& residual = fields.get("residual");
fault.integrateResidual(residual, t, &fields);
residual.complete();
- fault.integrateResidualAssembled(residual, t, &fields);
{ // setup disp increment
const ALE::Obj<RealSection>& dispIncrSection = fields.get("dispIncr(t->t+dt)").section();
@@ -721,8 +552,11 @@
} // setup disp
jacobian.complete();
- const topology::Field<topology::Mesh>& solution = fields.get("dispIncr(t->t+dt)");
+ topology::Field<topology::Mesh>& solution = fields.get("dispIncr(t->t+dt)");
fault.adjustSolnLumped(&fields, jacobian);
+ const topology::Field<topology::Mesh>& dispIncrAdj =
+ fields.get("dispIncr adjust");
+ solution += dispIncrAdj;
//solution.view("SOLUTION AFTER ADJUSTMENT"); // DEBUGGING
@@ -783,7 +617,7 @@
const double dt = 0.01;
fault.useSolnIncr(false);
fault.timeStep(dt);
- fault.integrateResidualAssembled(residual, t, &fields);
+ fault.integrateResidual(residual, t, &fields);
fault.updateStateVars(t, &fields);
CPPUNIT_ASSERT(0 != fault._faultMesh);
@@ -1103,6 +937,7 @@
fields->add("residual", "residual");
fields->add("disp(t)", "displacement");
fields->add("dispIncr(t->t+dt)", "displacement_increment");
+ fields->add("dispIncr adjust", "displacement_adjust");
fields->solutionName("dispIncr(t->t+dt)");
const int spaceDim = _data->spaceDim;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKin.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -92,18 +92,12 @@
/// Test integrateResidual().
void testIntegrateResidual(void);
- /// Test integrateResidualAssembled().
- void testIntegrateResidualAssembled(void);
-
/// Test integrateJacobian().
void testIntegrateJacobian(void);
- /// Test integrateJacobianAssembled().
- void testIntegrateJacobianAssembled(void);
+ /// Test integrateJacobian() with lumped Jacobian.
+ void testIntegrateJacobianLumped(void);
- /// Test integrateJacobianAssembled() with lumped Jacobian.
- void testIntegrateJacobianAssembledLumped(void);
-
/// Test adjustSolnLumped().
void testAdjustSolnLumped(void);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -39,10 +39,8 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -39,10 +39,8 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -39,10 +39,8 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsHex8.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsLine2.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -41,8 +41,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsQuad4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTet4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinSrcsTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST_SUITE_END();
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -39,10 +39,8 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ 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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ 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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -39,10 +39,8 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
- CPPUNIT_TEST( testIntegrateResidualAssembled );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testAdjustSolnLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -40,8 +40,7 @@
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST( testIntegrateResidual );
CPPUNIT_TEST( testIntegrateJacobian );
- CPPUNIT_TEST( testIntegrateJacobianAssembled );
- CPPUNIT_TEST( testIntegrateJacobianAssembledLumped );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
CPPUNIT_TEST( testUpdateStateVars );
CPPUNIT_TEST( testCalcTractionsChange );
CPPUNIT_TEST( testSplitField );
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveDynDataTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -42,11 +42,11 @@
const int pylith::faults::CohesiveDynDataTet4::_numQuadPts = 1;
const double pylith::faults::CohesiveDynDataTet4::_quadPts[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::faults::CohesiveDynDataTet4::_quadWts[] = {
- 5.00000000e-01,
+ 2.0,
};
const double pylith::faults::CohesiveDynDataTet4::_basis[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -176,9 +176,9 @@
+6.1, +4.1, // 13
+6.3, +4.3, // 15
+6.5, +4.5, // 17
- -0.3, -0.3, // 16
- 0.8, 0.8, // 17
- 0.6, 0.6, // 18
+ -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
};
const double pylith::faults::CohesiveKinDataQuad4e::_residualIncr[] = {
@@ -194,9 +194,9 @@
+6.1, +4.1, // 13
+6.3, +4.3, // 15
+6.5, +4.5, // 17
- -0.3, -0.3, // 16
- 0.8, 0.8, // 17
- 0.6, 0.6, // 18
+ -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
};
const double pylith::faults::CohesiveKinDataQuad4e::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -41,11 +41,11 @@
const int pylith::faults::CohesiveKinDataTet4::_numQuadPts = 1;
const double pylith::faults::CohesiveKinDataTet4::_quadPts[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::faults::CohesiveKinDataTet4::_quadWts[] = {
- 5.00000000e-01,
+ 2.0,
};
const double pylith::faults::CohesiveKinDataTet4::_basis[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -41,11 +41,11 @@
const int pylith::faults::CohesiveKinDataTet4e::_numQuadPts = 1;
const double pylith::faults::CohesiveKinDataTet4e::_quadPts[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::faults::CohesiveKinDataTet4e::_quadWts[] = {
- 5.00000000e-01,
+ 2.0,
};
const double pylith::faults::CohesiveKinDataTet4e::_basis[] = {
@@ -144,10 +144,10 @@
-7.0, -3.0, -5.0, // 11
-8.2, -4.2, -6.2, // 12
-8.4, -4.4, -6.4, // 13
- -0.5, -0.5, -0.5, // 14
- -0.6, -0.6, -0.6, // 15
- -0.7, -0.7, -0.7, // 16
- -0.8, -0.8, -0.8, // 17
+ -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
};
const double pylith::faults::CohesiveKinDataTet4e::_residualIncr[] = {
@@ -161,10 +161,10 @@
-7.0, -3.0, -5.0, // 11
-8.2, -4.2, -6.2, // 12
-8.4, -4.4, -6.4, // 13
- -0.5, -0.5, -0.5, // 14
- -0.6, -0.6, -0.6, // 15
- -0.7, -0.7, -0.7, // 16
- -0.8, -0.8, -0.8, // 17
+ -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
};
const double pylith::faults::CohesiveKinDataTet4e::_jacobian[] = {
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -41,11 +41,11 @@
const int pylith::faults::CohesiveKinDataTet4f::_numQuadPts = 1;
const double pylith::faults::CohesiveKinDataTet4f::_quadPts[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::faults::CohesiveKinDataTet4f::_quadWts[] = {
- 5.00000000e-01,
+ 2.0,
};
const double pylith::faults::CohesiveKinDataTet4f::_basis[] = {
@@ -136,9 +136,9 @@
+9.7, +7.7, +8.7, // 7
+9.9, +7.9, +8.9, // 8
+9.1, +7.1, +8.1, // 9
- 0.4, 0.4, 0.4, // 10
- 0.5, 0.5, 0.5, // 11
- -0.4, -0.4, -0.4, // 12
+ 0.4+1.82575588523, 0.4+-0.55566483464, 0.4+0.07938069066, // 10
+ 0.5+1.69682900001, 0.5+-0.56560966667, 0.5+0.14140241667, // 11
+ -0.4+1.51709826228, -0.4+-0.54615537442, -0.4+0.18205179147, // 12
};
const double pylith::faults::CohesiveKinDataTet4f::_residualIncr[] = {
@@ -150,9 +150,9 @@
+9.7, +7.7, +8.7, // 7
+9.9, +7.9, +8.9, // 8
+9.1, +7.1, +8.1, // 9
- 0.4, 0.4, 0.4, // 10
- 0.5, 0.5, 0.5, // 11
- -0.4, -0.4, -0.4, // 12
+ 0.4+1.82575588523, 0.4+-0.55566483464, 0.4+0.07938069066, // 10
+ 0.5+1.69682900001, 0.5+-0.56560966667, 0.5+0.14140241667, // 11
+ -0.4+1.51709826228, -0.4+-0.54615537442, -0.4+0.18205179147, // 12
};
const double pylith::faults::CohesiveKinDataTet4f::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -168,9 +168,9 @@
+1.4142135623730949, +11.030865786510143, // 10
+8.0, +6.0, // 11
-7.2, +9.2, // 12
- 0.0, +0.70710678118654757, // 13
- 0.6, 0.6, // 14
- -0.6, 0.6, // 15
+ 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
};
const double pylith::faults::CohesiveKinDataTri3d::_residualIncr[] = {
@@ -183,9 +183,9 @@
+1.4142135623730949, +11.030865786510143, // 10
+8.0, +6.0, // 11
-7.2, +9.2, // 12
- 0.0, +0.70710678118654757, // 13
- 0.6, 0.6, // 14
- -0.6, 0.6, // 15
+ 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
};
const double pylith::faults::CohesiveKinDataTri3d::_jacobian[] = {
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataHex8.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -176,10 +176,10 @@
+9.6,+5.6,+7.6, // 15
+9.8,+5.8,+7.8, // 16
+9.0,+5.0,+7.0, // 17
- 0.8, 0.8, 0.8, // 18 (constraint)
- 0.9, 0.9, 0.9, // 19 (constraint)
- 1.0, 1.0, 1.0, // 20 (constraint)
- 1.1, 1.1, 1.1, // 21 (constraint)
+ 0.8+1.82575588523+0.91680340354, 0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
+ 0.9+1.69682900001+0.62551316338, 0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
+ 1.0+1.51709826228+0.34903622931, 1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
+ 1.1+1.29378670385+0.12855127934, 1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_residualIncr[] = {
@@ -199,10 +199,10 @@
+9.6,+5.6,+7.6, // 15
+9.8,+5.8,+7.8, // 16
+9.0,+5.0,+7.0, // 17
- 0.8, 0.8, 0.8, // 18 (constraint)
- 0.9, 0.9, 0.9, // 19 (constraint)
- 1.0, 1.0, 1.0, // 20 (constraint)
- 1.1, 1.1, 1.1, // 21 (constraint)
+ 0.8+1.82575588523+0.91680340354, 0.8+-0.55566483464-0.27902712282, 0.8+0.07938069066+0.03986101755, // 18 (constraint)
+ 0.9+1.69682900001+0.62551316338, 0.9+-0.56560966667-0.20850438779, 0.9+0.14140241667+0.05212609695, // 19 (constraint)
+ 1.0+1.51709826228+0.34903622931, 1.0+-0.54615537442-0.12565304255, 1.0+0.18205179147+0.04188434752, // 20 (constraint)
+ 1.1+1.29378670385+0.12855127934, 1.1+-0.49761027071+-0.04944279975, 1.1+0.19904410828+0.01977711990, // 21 (constraint)
};
const double pylith::faults::CohesiveKinSrcsDataHex8::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataLine2.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -112,7 +112,7 @@
7.5,
0.0,
-7.5,
- -0.2
+ -0.2+1.89546413727+0.99414665414,
};
const double pylith::faults::CohesiveKinSrcsDataLine2::_residual[] = {
@@ -120,7 +120,7 @@
7.5,
0.0,
-7.5,
- -0.2
+ -0.2+1.89546413727+0.99414665414,
};
const double pylith::faults::CohesiveKinSrcsDataLine2::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataQuad4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -145,8 +145,8 @@
0.0, 0.0,
-9.8, -8.8, // 8
-9.0, -8.0, // 9
- -0.4, -0.4, // 10
- -0.5, -0.5, // 11
+ -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
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_residualIncr[] = {
@@ -158,8 +158,8 @@
0.0, 0.0,
-9.8, -8.8, // 8
-9.0, -8.0, // 9
- -0.4, -0.4, // 10
- -0.5, -0.5, // 11
+ -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
};
const double pylith::faults::CohesiveKinSrcsDataQuad4::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -41,11 +41,11 @@
const int pylith::faults::CohesiveKinSrcsDataTet4::_numQuadPts = 1;
const double pylith::faults::CohesiveKinSrcsDataTet4::_quadPts[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_quadWts[] = {
- 5.00000000e-01,
+ 2.0,
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_basis[] = {
@@ -136,9 +136,9 @@
-9.7, -7.7, -8.7, // 7
-9.9, -7.9, -8.9, // 4
-9.1, -7.1, -8.1, // 5
- -0.4, -0.4, -0.4, // 10
- -0.5, -0.5, -0.5, // 11
- 0.4, 0.4, 0.4, // 12
+ -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
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_residualIncr[] = {
@@ -150,9 +150,9 @@
-9.7, -7.7, -8.7, // 7
-9.9, -7.9, -8.9, // 4
-9.1, -7.1, -8.1, // 5
- -0.4, -0.4, -0.4, // 10
- -0.5, -0.5, -0.5, // 11
- 0.4, 0.4, 0.4, // 12
+ -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
};
const double pylith::faults::CohesiveKinSrcsDataTet4::_jacobian[] = {
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/CohesiveKinSrcsDataTri3.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -155,8 +155,8 @@
0.0, 0.0,
+9.6, +8.6, // 6
+9.8, +8.8, // 7
- 0.3, 0.3, // 8
- 0.4, 0.4, // 9
+ 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
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_residualIncr[] = {
@@ -166,8 +166,8 @@
0.0, 0.0,
+9.6, +8.6, // 6
+9.8, +8.8, // 7
- 0.3, 0.3, // 8
- 0.4, 0.4, // 9
+ 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
};
const double pylith::faults::CohesiveKinSrcsDataTri3::_jacobian[] = {
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/slipth.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/slipth.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/faults/data/slipth.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -5,8 +5,8 @@
slipMag = (finalSlip[0]**2+finalSlip[1]**2+finalSlip[2]**2)**0.5
-slipTime1 = 1.5
-slipTime2 = 1.5
+slipTime1 = 2.0
+slipTime2 = 0.7
t = 2.134
dt = 0.01
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/Makefile.am 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/Makefile.am 2010-05-30 21:53:47 UTC (rev 16840)
@@ -59,6 +59,7 @@
TestElasticityExplicitGrav2DQuadratic.cc \
TestElasticityExplicitGrav3DLinear.cc \
TestElasticityExplicitGrav3DQuadratic.cc \
+ TestElasticityExplicitTri3.cc \
TestElasticityExplicitTet4.cc \
TestElasticityImplicit.cc \
TestElasticityImplicit1DLinear.cc \
@@ -119,6 +120,7 @@
TestElasticityExplicitGrav2DQuadratic.hh \
TestElasticityExplicitGrav3DLinear.hh \
TestElasticityExplicitGrav3DQuadratic.hh \
+ TestElasticityExplicitTri3.hh \
TestElasticityExplicitTet4.hh \
TestElasticityImplicit.hh \
TestElasticityImplicit1DLinear.hh \
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTet4.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -231,7 +231,7 @@
const int size = residualSection->sizeWithBC();
CPPUNIT_ASSERT_EQUAL(sizeE, size);
-#if 1 // DEBUGGING
+#if 0 // DEBUGGING
residual.view("RESIDUAL");
std::cout << "EXPECTED RESIDUAL" << std::endl;
for (int i=0; i < size; ++i)
Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc (from rev 16839, short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,536 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticityExplicitTri3.hh" // Implementation of class methods
+
+#include "pylith/feassemble/ElasticityExplicitTri3.hh" // USES ElasticityExplicitTri3
+#include "data/ElasticityExplicitData2DLinear.hh"
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+
+#include "pylith/materials/ElasticPlaneStrain.hh" // USES ElasticPlaneStrain
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/spatialdb/GravityField.hh" // USES GravityField
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <math.h> // USES fabs()
+
+#include <stdexcept> // USES std::exception
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::feassemble::TestElasticityExplicitTri3 );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::feassemble::TestElasticityExplicitTri3::setUp(void)
+{ // setUp
+ _quadrature = new Quadrature<topology::Mesh>();
+ CPPUNIT_ASSERT(0 != _quadrature);
+ GeometryTri2D geometry;
+ _quadrature->refGeometry(&geometry);
+
+ _data = new ElasticityExplicitData2DLinear();
+ CPPUNIT_ASSERT(0 != _data);
+ _material = new materials::ElasticPlaneStrain;
+ CPPUNIT_ASSERT(0 != _material);
+ CPPUNIT_ASSERT_EQUAL(std::string("ElasticPlaneStrain"),
+ std::string(_data->matType));
+ _gravityField = 0;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::feassemble::TestElasticityExplicitTri3::tearDown(void)
+{ // tearDown
+ delete _data; _data = 0;
+ delete _quadrature; _quadrature = 0;
+ delete _material; _material = 0;
+ delete _gravityField; _gravityField = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::feassemble::TestElasticityExplicitTri3::testConstructor(void)
+{ // testConstructor
+ ElasticityExplicitTri3 integrator;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test timeStep().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testTimeStep(void)
+{ // testTimeStep
+ ElasticityExplicitTri3 integrator;
+
+ const double dt1 = 2.0;
+ integrator.timeStep(dt1);
+ CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
+ integrator.timeStep(dt1);
+ CPPUNIT_ASSERT_EQUAL(dt1, integrator._dtm1);
+ CPPUNIT_ASSERT_EQUAL(dt1, integrator._dt);
+} // testTimeStep
+
+// ----------------------------------------------------------------------
+// Test material().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testMaterial(void)
+{ // testMaterial
+ ElasticityExplicitTri3 integrator;
+
+ materials::ElasticPlaneStrain material;
+ const int id = 3;
+ const std::string label("my material");
+ material.id(id);
+ material.label(label.c_str());
+ integrator.material(&material);
+ 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;
+ integrator.timeStep(dt);
+ CPPUNIT_ASSERT_EQUAL(dt, integrator._material->timeStep());
+} // testMaterial
+
+// ----------------------------------------------------------------------
+// Test needNewJacobian().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testNeedNewJacobian(void)
+{ // testNeedNewJacobian
+ ElasticityExplicitTri3 integrator;
+
+ materials::ElasticPlaneStrain material;
+ integrator.material(&material);
+ CPPUNIT_ASSERT_EQUAL(true, integrator.needNewJacobian());
+ integrator._needNewJacobian = false;
+ CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+} // testNeedNewJacobian
+
+// ----------------------------------------------------------------------
+// Test useSolnIncr().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testUseSolnIncr(void)
+{ // testUseSolnIncr
+ ElasticityExplicitTri3 integrator;
+
+ materials::ElasticPlaneStrain material;
+ integrator.material(&material);
+ CPPUNIT_ASSERT_EQUAL(false, integrator._useSolnIncr);
+ try {
+ integrator.useSolnIncr(false);
+
+ // Should have thrown exception, so don't make it here.
+ CPPUNIT_ASSERT(false);
+ } catch (const std::logic_error& err) {
+ // Expect logic error so don't do anything.
+ } catch (...) {
+ CPPUNIT_ASSERT(false);
+ } // try/catch
+} // testUseSolnIncr
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testInitialize(void)
+{ // testInitialize
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testIntegrateResidual(void)
+{ // testIntegrateResidual
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+
+ topology::Field<topology::Mesh>& residual = fields.get("residual");
+ const double t = 1.0;
+ integrator.integrateResidual(residual, t, &fields);
+
+ const double* 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 int size = residualSection->sizeWithBC();
+ CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+#if 0 // DEBUGGING
+ residual.view("RESIDUAL");
+ std::cout << "EXPECTED RESIDUAL" << std::endl;
+ for (int i=0; i < size; ++i)
+ std::cout << " " << valsE[i] << std::endl;
+#endif // DEBUGGING
+
+ const double 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);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
+} // testIntegrateResidual
+
+// ----------------------------------------------------------------------
+// Test integrateResidual().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testIntegrateResidualLumped(void)
+{ // testIntegrateResidualLumped
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+
+ topology::Field<topology::Mesh>& residual = fields.get("residual");
+ const double t = 1.0;
+ integrator.integrateResidualLumped(residual, t, &fields);
+
+ const double* 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 int size = residualSection->sizeWithBC();
+ CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+#if 0 // DEBUGGING
+ residual.view("RESIDUAL");
+ std::cout << "EXPECTED RESIDUAL" << std::endl;
+ for (int i=0; i < size; ++i)
+ std::cout << " " << valsE[i] << std::endl;
+#endif // DEBUGGING
+
+ const double 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);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
+} // testIntegrateResidualLumped
+
+// ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testIntegrateJacobian(void)
+{ // testIntegrateJacobian
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+ integrator._needNewJacobian = true;
+
+ topology::Jacobian jacobian(fields.solution());
+
+ const double t = 1.0;
+ integrator.integrateJacobian(&jacobian, t, &fields);
+ CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+ jacobian.assemble("final_assembly");
+
+ const double* valsE = _data->valsJacobian;
+ const int nrowsE = _data->numVertices * _data->spaceDim;
+ const int ncolsE = _data->numVertices * _data->spaceDim;
+
+ const PetscMat jacobianMat = jacobian.matrix();
+
+ int nrows = 0;
+ int ncols = 0;
+ MatGetSize(jacobianMat, &nrows, &ncols);
+ CPPUNIT_ASSERT_EQUAL(nrowsE, nrows);
+ CPPUNIT_ASSERT_EQUAL(ncolsE, ncols);
+
+ PetscMat jDense;
+ PetscMat jSparseAIJ;
+ MatConvert(jacobianMat, MATSEQAIJ, MAT_INITIAL_MATRIX, &jSparseAIJ);
+ MatConvert(jSparseAIJ, MATSEQDENSE, MAT_INITIAL_MATRIX, &jDense);
+
+ double_array vals(nrows*ncols);
+ int_array rows(nrows);
+ int_array cols(ncols);
+ for (int iRow=0; iRow < nrows; ++iRow)
+ rows[iRow] = iRow;
+ 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;
+ 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);
+ } // for
+ MatDestroy(jDense);
+ MatDestroy(jSparseAIJ);
+} // testIntegrateJacobian
+
+// ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testIntegrateJacobianLumped(void)
+{ // testIntegrateJacobian
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+ integrator._needNewJacobian = true;
+
+ topology::Field<topology::Mesh> jacobian(mesh);
+ jacobian.label("Jacobian");
+ jacobian.vectorFieldType(topology::FieldBase::VECTOR);
+ jacobian.newSection(topology::FieldBase::VERTICES_FIELD, _data->spaceDim);
+ jacobian.allocate();
+
+ const double t = 1.0;
+ integrator.integrateJacobian(&jacobian, t, &fields);
+ CPPUNIT_ASSERT_EQUAL(false, integrator.needNewJacobian());
+ jacobian.complete();
+
+ const double* valsMatrixE = _data->valsJacobian;
+ const int sizeE = _data->numVertices * _data->spaceDim;
+ double_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;
+ for (int jBasis=0; jBasis < numBasis; ++jBasis)
+ value += valsMatrixE[indexRow + jBasis*spaceDim+iDim];
+ valsE[iBasis*spaceDim+iDim] = value;
+ } // for
+
+#if 0 // DEBUGGING
+ jacobian.view("JACOBIAN");
+ std::cout << "\n\nJACOBIAN FULL" << std::endl;
+ const int n = numBasis*spaceDim;
+ for (int i=0; i < n; ++i)
+ std::cout << " " << valsE[i] << "\n";
+#endif // DEBUGGING
+
+ const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
+ CPPUNIT_ASSERT(!jacobianSection.isNull());
+ const double* vals = jacobianSection->restrictSpace();
+ const int size = jacobianSection->sizeWithBC();
+ CPPUNIT_ASSERT_EQUAL(sizeE, size);
+
+ const double 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);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[i], vals[i], tolerance);
+} // testIntegrateJacobianLumped
+
+// ----------------------------------------------------------------------
+// Test updateStateVars().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testUpdateStateVars(void)
+{ // testUpdateStateVars
+ CPPUNIT_ASSERT(0 != _data);
+
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+
+ const double t = 1.0;
+ integrator.updateStateVars(t, &fields);
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Test StableTimeStep().
+void
+pylith::feassemble::TestElasticityExplicitTri3::testStableTimeStep(void)
+{ // testStableTimeStep
+ topology::Mesh mesh;
+ ElasticityExplicitTri3 integrator;
+ topology::SolutionFields fields(mesh);
+ _initialize(&mesh, &integrator, &fields);
+
+ const double stableTimeStep = integrator.stableTimeStep(mesh);
+ CPPUNIT_ASSERT_EQUAL(1.0e+30, stableTimeStep);
+} // testStableTimeStep
+
+// ----------------------------------------------------------------------
+// Initialize elasticity integrator.
+void
+pylith::feassemble::TestElasticityExplicitTri3::_initialize(
+ topology::Mesh* mesh,
+ ElasticityExplicitTri3* const integrator,
+ topology::SolutionFields* fields)
+{ // _initialize
+ CPPUNIT_ASSERT(0 != mesh);
+ CPPUNIT_ASSERT(0 != integrator);
+ CPPUNIT_ASSERT(0 != _data);
+ CPPUNIT_ASSERT(0 != _quadrature);
+ CPPUNIT_ASSERT(0 != _material);
+
+ const int spaceDim = _data->spaceDim;
+ const double dt = _data->dt;
+
+ // Setup mesh
+ mesh->createSieveMesh(_data->cellDim);
+ const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
+ ALE::Obj<SieveMesh::sieve_type> sieve =
+ new SieveMesh::sieve_type(mesh->comm());
+ CPPUNIT_ASSERT(!sieve.isNull());
+
+ // Cells and vertices
+ const bool interpolate = false;
+ ALE::Obj<ALE::Mesh::sieve_type> s =
+ new ALE::Mesh::sieve_type(sieve->comm(), sieve->debug());
+
+ ALE::SieveBuilder<ALE::Mesh>::buildTopology(s,
+ _data->cellDim, _data->numCells,
+ const_cast<int*>(_data->cells),
+ _data->numVertices,
+ interpolate, _data->numBasis);
+ std::map<ALE::Mesh::point_type,ALE::Mesh::point_type> renumbering;
+ ALE::ISieveConverter::convertSieve(*s, *sieve, renumbering);
+ sieveMesh->setSieve(sieve);
+ sieveMesh->stratify();
+ ALE::SieveBuilder<SieveMesh>::buildCoordinates(sieveMesh, spaceDim,
+ _data->vertices);
+
+ // Material ids
+ const ALE::Obj<SieveMesh::label_sequence>& cells =
+ sieveMesh->heightStratum(0);
+ CPPUNIT_ASSERT(!cells.isNull());
+ const ALE::Obj<SieveMesh::label_type>& labelMaterials =
+ sieveMesh->createLabel("material-id");
+ CPPUNIT_ASSERT(!labelMaterials.isNull());
+ int i = 0;
+ for(SieveMesh::label_sequence::iterator e_iter=cells->begin();
+ e_iter != cells->end();
+ ++e_iter)
+ sieveMesh->setValue(labelMaterials, *e_iter, _data->matId);
+
+ // Setup quadrature
+ _quadrature->initialize(_data->basis, _data->numQuadPts, _data->numBasis,
+ _data->basisDerivRef, _data->numQuadPts,
+ _data->numBasis, _data->cellDim,
+ _data->quadPts, _data->numQuadPts, _data->cellDim,
+ _data->quadWts, _data->numQuadPts,
+ spaceDim);
+
+ spatialdata::units::Nondimensional normalizer;
+ spatialdata::geocoords::CSCart cs;
+ cs.setSpaceDim(spaceDim);
+ cs.initialize();
+ mesh->coordsys(&cs);
+ mesh->nondimensionalize(normalizer);
+
+ // Setup material
+ spatialdata::spatialdb::SimpleIOAscii iohandler;
+ iohandler.filename(_data->matDBFilename);
+ spatialdata::spatialdb::SimpleDB dbProperties;
+ dbProperties.ioHandler(&iohandler);
+
+ _material->id(_data->matId);
+ _material->label(_data->matLabel);
+ _material->dbProperties(&dbProperties);
+ _material->normalizer(normalizer);
+
+ integrator->quadrature(_quadrature);
+ integrator->gravityField(_gravityField);
+ integrator->timeStep(_data->dt);
+ integrator->material(_material);
+ integrator->initialize(*mesh);
+
+ // Setup fields
+ CPPUNIT_ASSERT(0 != fields);
+ fields->add("residual", "residual");
+ fields->add("dispIncr(t->t+dt)", "displacement_increment");
+ fields->add("disp(t)", "displacement");
+ fields->add("disp(t-dt)", "displacement");
+ fields->add("acceleration(t)", "acceleration");
+ fields->solutionName("dispIncr(t->t+dt)");
+
+ topology::Field<topology::Mesh>& residual = fields->get("residual");
+ residual.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
+ residual.allocate();
+ residual.zero();
+ fields->copyLayout("residual");
+
+ const int fieldSize = spaceDim * _data->numVertices;
+ topology::Field<topology::Mesh>& dispIncr = fields->get("dispIncr(t->t+dt)");
+ topology::Field<topology::Mesh>& dispT = fields->get("disp(t)");
+ topology::Field<topology::Mesh>& dispTmdt = fields->get("disp(t-dt)");
+ const ALE::Obj<RealSection>& dispIncrSection =
+ fields->get("dispIncr(t->t+dt)").section();
+ const ALE::Obj<RealSection>& dispTSection =
+ fields->get("disp(t)").section();
+ const ALE::Obj<RealSection>& dispTmdtSection =
+ fields->get("disp(t-dt)").section();
+ const ALE::Obj<RealSection>& accSection =
+ fields->get("acceleration(t)").section();
+ CPPUNIT_ASSERT(!dispIncrSection.isNull());
+ CPPUNIT_ASSERT(!dispTSection.isNull());
+ CPPUNIT_ASSERT(!dispTmdtSection.isNull());
+ CPPUNIT_ASSERT(!accSection.isNull());
+
+ double_array accVertex(spaceDim);
+
+ const int offset = _data->numCells;
+ for (int iVertex=0; iVertex < _data->numVertices; ++iVertex) {
+ dispIncrSection->updatePoint(iVertex+offset,
+ &_data->fieldTIncr[iVertex*spaceDim]);
+ dispTSection->updatePoint(iVertex+offset,
+ &_data->fieldT[iVertex*spaceDim]);
+ dispTmdtSection->updatePoint(iVertex+offset,
+ &_data->fieldTmdt[iVertex*spaceDim]);
+
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ accVertex[iDim] = (_data->fieldTIncr[iVertex*spaceDim+iDim] -
+ _data->fieldT[iVertex*spaceDim+iDim] +
+ _data->fieldTmdt[iVertex*spaceDim+iDim]) / (dt*dt);
+ accSection->updatePoint(iVertex+offset, &accVertex[0]);
+ } // for
+} // _initialize
+
+
+// End of file
Copied: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.hh (from rev 16839, short/3D/PyLith/trunk/unittests/libtests/feassemble/TestElasticityExplicitTri3.hh)
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.hh (rev 0)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/TestElasticityExplicitTri3.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -0,0 +1,133 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/feassemble/TestElasticityExplicitTri3.hh
+ *
+ * @brief C++ TestElasticityExplicitTri3 object
+ *
+ * C++ unit testing for ElasticityExplicitTri3.
+ */
+
+#if !defined(pylith_feassemble_testelasticityexplicittri3_hh)
+#define pylith_feassemble_testelasticityexplicittri3_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/feassemble/feassemblefwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SolutionFields
+#include "pylith/materials/materialsfwd.hh" // USES ElasticMaterial
+
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES GravityField
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace feassemble {
+ class TestElasticityExplicitTri3;
+ class ElasticityExplicitData;
+ } // feassemble
+} // pylith
+
+/// C++ unit testing for ElasticityExplicitTri3
+class pylith::feassemble::TestElasticityExplicitTri3 : public CppUnit::TestFixture
+{ // class TestElasticityExplicitTri3
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestElasticityExplicitTri3 );
+
+ CPPUNIT_TEST( testConstructor );
+ CPPUNIT_TEST( testTimeStep );
+ CPPUNIT_TEST( testMaterial );
+ CPPUNIT_TEST( testNeedNewJacobian );
+ CPPUNIT_TEST( testUseSolnIncr );
+ CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testIntegrateResidual );
+ CPPUNIT_TEST( testIntegrateResidualLumped );
+ CPPUNIT_TEST( testIntegrateJacobian );
+ CPPUNIT_TEST( testIntegrateJacobianLumped );
+ CPPUNIT_TEST( testUpdateStateVars );
+ CPPUNIT_TEST( testStableTimeStep );
+
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Setup testing data.
+ void setUp(void);
+
+ /// Tear down testing data.
+ void tearDown(void);
+
+ /// Test constructor.
+ void testConstructor(void);
+
+ /// Test timeStep().
+ void testTimeStep(void);
+
+ /// Test material().
+ void testMaterial(void);
+
+ /// Test needNewJacobian().
+ void testNeedNewJacobian(void);
+
+ /// Test useSolnIncr().
+ void testUseSolnIncr(void);
+
+ /// Test initialize().
+ void testInitialize(void);
+
+ /// Test integrateResidual().
+ void testIntegrateResidual(void);
+
+ /// Test integrateResidualLumped().
+ void testIntegrateResidualLumped(void);
+
+ /// Test integrateJacobian().
+ void testIntegrateJacobian(void);
+
+ /// Test integrateJacobianLumped().
+ void testIntegrateJacobianLumped(void);
+
+ /// Test updateStateVars().
+ void testUpdateStateVars(void);
+
+ /// Test StableTimeStep().
+ void testStableTimeStep(void);
+
+ // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+ ElasticityExplicitData* _data; ///< Data for testing.
+ materials::ElasticMaterial* _material; ///< Elastic material.
+ Quadrature<topology::Mesh>* _quadrature; ///< Quadrature information.
+ spatialdata::spatialdb::GravityField* _gravityField; ///< Gravity field.
+
+ // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+ /** Initialize elasticity integrator.
+ *
+ * @param mesh Finite-element mesh to initialize.
+ * @param integrator ElasticityIntegrator to initialize.
+ * @param fields Solution fields.
+ */
+ void _initialize(topology::Mesh* mesh,
+ ElasticityExplicitTri3* const integrator,
+ topology::SolutionFields* const fields);
+
+}; // class TestElasticityExplicitTri3
+
+#endif // pylith_feassemble_testelasticityexplicittri3_hh
+
+
+// End of file
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_basis[] = {
@@ -94,42 +94,42 @@
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidual[] = {
- -1.66799924e+10, 3.09147184e+10,
- -2.30534754e+09, -2.72120571e+10,
- 1.89829337e+10, -3.70346338e+09,
+ -6.67199697e+10, 1.23658874e+11,
+ -9.22139015e+09, -1.08848229e+11,
+ 7.59317348e+10, -1.48138535e+10,
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobian[] = {
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsResidualLumped[] = {
- -1.66797633e+10, 3.09149858e+10,
- -2.30569129e+09, -2.72130502e+10,
- 1.89830483e+10, -3.70273769e+09,
+ -6.67190530e+10, 1.23659943e+11,
+ -9.22276515e+09, -1.08852201e+11,
+ 7.59321932e+10, -1.48109508e+10,
};
const double pylith::feassemble::ElasticityExplicitData2DLinear::_valsJacobianLumped[] = {
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
};
pylith::feassemble::ElasticityExplicitData2DLinear::ElasticityExplicitData2DLinear(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -511,9 +511,9 @@
const double 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,
2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
+ 2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
1.20947917e+07, 1.20947917e+07, 1.20947917e+07,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_basis[] = {
@@ -94,42 +94,42 @@
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidual[] = {
- -1.66799924e+10, 1.94563851e+10,
- -2.30534754e+09, -3.86703905e+10,
- 1.89829337e+10, -1.51617967e+10,
+ -6.67199697e+10, 7.78255404e+10,
+ -9.22139015e+09, -1.54681562e+11,
+ 7.59317348e+10, -6.06471869e+10,
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobian[] = {
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsResidualLumped[] = {
- -1.66797633e+10, 1.94566525e+10,
- -2.30569129e+09, -3.86713835e+10,
- 1.89830483e+10, -1.51610710e+10,
+ -6.67190530e+10, 7.78266098e+10,
+ -9.22276515e+09, -1.54685534e+11,
+ 7.59321932e+10, -6.06442841e+10,
};
const double pylith::feassemble::ElasticityExplicitGravData2DLinear::_valsJacobianLumped[] = {
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
};
pylith::feassemble::ElasticityExplicitGravData2DLinear::ElasticityExplicitGravData2DLinear(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitGravData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -511,9 +511,9 @@
const double 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,
2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
+ 2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
1.20947917e+07, 1.20947917e+07, 1.20947917e+07,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_basis[] = {
@@ -94,42 +94,42 @@
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidual[] = {
- -1.30908158e+11, 1.45826462e+11,
- 4.13431858e+10, -1.44671497e+11,
- 8.95625655e+10, -1.15576609e+09,
+ -5.23632630e+11, 5.83305846e+11,
+ 1.65372743e+11, -5.78685990e+11,
+ 3.58250262e+11, -4.62306437e+09,
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobian[] = {
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsResidualLumped[] = {
- -1.30907928e+11, 1.45826729e+11,
- 4.13428421e+10, -1.44672491e+11,
- 8.95626801e+10, -1.15504040e+09,
+ -5.23631714e+11, 5.83306915e+11,
+ 1.65371368e+11, -5.78689962e+11,
+ 3.58250720e+11, -4.62016160e+09,
};
const double pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::_valsJacobianLumped[] = {
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
};
pylith::feassemble::ElasticityExplicitLgDeformData2DLinear::ElasticityExplicitLgDeformData2DLinear(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -511,9 +511,9 @@
const double pylith::feassemble::ElasticityExplicitLgDeformData3DQuadratic::_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,
2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
+ 2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
1.20947917e+07, 1.20947917e+07, 1.20947917e+07,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_basis[] = {
@@ -94,42 +94,42 @@
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidual[] = {
- -1.30908158e+11, 1.34368128e+11,
- 4.13431858e+10, -1.56129831e+11,
- 8.95625655e+10, -1.26140994e+10,
+ -5.23632630e+11, 5.37472513e+11,
+ 1.65372743e+11, -6.24519323e+11,
+ 3.58250262e+11, -5.04563977e+10,
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobian[] = {
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 3.81944444e+05, 0.00000000e+00,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
- 0.00000000e+00, 3.81944444e+05,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 1.52777778e+06, 0.00000000e+00,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
+ 0.00000000e+00, 1.52777778e+06,
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsResidualLumped[] = {
- -1.30907928e+11, 1.34368396e+11,
- 4.13428421e+10, -1.56130824e+11,
- 8.95626801e+10, -1.26133737e+10,
+ -5.23631714e+11, 5.37473582e+11,
+ 1.65371368e+11, -6.24523296e+11,
+ 3.58250720e+11, -5.04534949e+10,
};
const double pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::_valsJacobianLumped[] = {
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
- 1.14583333e+06, 1.14583333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
+ 4.58333333e+06, 4.58333333e+06,
};
pylith::feassemble::ElasticityExplicitLgDeformGravData2DLinear::ElasticityExplicitLgDeformGravData2DLinear(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityExplicitLgDeformGravData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -511,9 +511,9 @@
const double pylith::feassemble::ElasticityExplicitLgDeformGravData3DQuadratic::_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,
2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
+ 2.40117188e+06, 2.40117188e+06, 2.40117188e+06,
1.20947917e+07, 1.20947917e+07, 1.20947917e+07,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
8.35963542e+06, 8.35963542e+06, 8.35963542e+06,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData1DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata1dlinear_hh)
#define pylith_feassemble_elasticityimplicitdata1dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData1DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData1DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata1dquadratic_hh)
#define pylith_feassemble_elasticityimplicitdata1dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData2DLinear.hh"
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityImplicitData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityImplicitData2DLinear::_basis[] = {
@@ -94,30 +94,30 @@
};
const double pylith::feassemble::ElasticityImplicitData2DLinear::_valsResidual[] = {
- -2.62107244e+10, 7.10820313e+10,
- -7.87159091e+09, -6.58203125e+10,
- 3.40823153e+10, -5.26171875e+09,
+ -1.04842898e+11, 2.84328125e+11,
+ -3.14863636e+10, -2.63281250e+11,
+ 1.36329261e+11, -2.10468750e+10,
};
const double pylith::feassemble::ElasticityImplicitData2DLinear::_valsJacobian[] = {
- 1.08927557e+10, -6.13991477e+09,
- -3.99715909e+09, 1.83948864e+09,
- -6.89559659e+09, 4.30042614e+09,
- -6.13991477e+09, 1.89893466e+10,
- 2.07386364e+09, -1.54673295e+10,
- 4.06605114e+09, -3.52201705e+09,
- -3.99715909e+09, 2.07386364e+09,
- 5.42045455e+09, 1.61931818e+09,
- -1.42329545e+09, -3.69318182e+09,
- 1.83948864e+09, -1.54673295e+10,
- 1.61931818e+09, 1.48664773e+10,
- -3.45880682e+09, 6.00852273e+08,
- -6.89559659e+09, 4.06605114e+09,
- -1.42329545e+09, -3.45880682e+09,
- 8.31889205e+09, -6.07244318e+08,
- 4.30042614e+09, -3.52201705e+09,
- -3.69318182e+09, 6.00852273e+08,
- -6.07244318e+08, 2.92116477e+09,
+ 4.35710227e+10, -2.45596591e+10,
+ -1.59886364e+10, 7.35795455e+09,
+ -2.75823864e+10, 1.72017045e+10,
+ -2.45596591e+10, 7.59573864e+10,
+ 8.29545455e+09, -6.18693182e+10,
+ 1.62642045e+10, -1.40880682e+10,
+ -1.59886364e+10, 8.29545455e+09,
+ 2.16818182e+10, 6.47727273e+09,
+ -5.69318182e+09, -1.47727273e+10,
+ 7.35795455e+09, -6.18693182e+10,
+ 6.47727273e+09, 5.94659091e+10,
+ -1.38352273e+10, 2.40340909e+09,
+ -2.75823864e+10, 1.62642045e+10,
+ -5.69318182e+09, -1.38352273e+10,
+ 3.32755682e+10, -2.42897727e+09,
+ 1.72017045e+10, -1.40880682e+10,
+ -1.47727273e+10, 2.40340909e+09,
+ -2.42897727e+09, 1.16846591e+10,
};
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata2dlinear_hh)
#define pylith_feassemble_elasticityimplicitdata2dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData2DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData2DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata2dquadratic_hh)
#define pylith_feassemble_elasticityimplicitdata2dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData3DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata3dlinear_hh)
#define pylith_feassemble_elasticityimplicitdata3dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitData3DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitData3DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitdata3dquadratic_hh)
#define pylith_feassemble_elasticityimplicitdata3dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData1DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata1dlinear_hh)
#define pylith_feassemble_elasticityimplicitgravdata1dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData1DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData1DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata1dquadratic_hh)
#define pylith_feassemble_elasticityimplicitgravdata1dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData2DLinear.hh"
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_basis[] = {
@@ -94,30 +94,30 @@
};
const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsResidual[] = {
- -2.62107244e+10, 5.96236979e+10,
- -7.87159091e+09, -7.72786458e+10,
- 3.40823153e+10, -1.67200521e+10,
+ -1.04842898e+11, 2.38494792e+11,
+ -3.14863636e+10, -3.09114583e+11,
+ 1.36329261e+11, -6.68802083e+10,
};
const double pylith::feassemble::ElasticityImplicitGravData2DLinear::_valsJacobian[] = {
- 1.08927557e+10, -6.13991477e+09,
- -3.99715909e+09, 1.83948864e+09,
- -6.89559659e+09, 4.30042614e+09,
- -6.13991477e+09, 1.89893466e+10,
- 2.07386364e+09, -1.54673295e+10,
- 4.06605114e+09, -3.52201705e+09,
- -3.99715909e+09, 2.07386364e+09,
- 5.42045455e+09, 1.61931818e+09,
- -1.42329545e+09, -3.69318182e+09,
- 1.83948864e+09, -1.54673295e+10,
- 1.61931818e+09, 1.48664773e+10,
- -3.45880682e+09, 6.00852273e+08,
- -6.89559659e+09, 4.06605114e+09,
- -1.42329545e+09, -3.45880682e+09,
- 8.31889205e+09, -6.07244318e+08,
- 4.30042614e+09, -3.52201705e+09,
- -3.69318182e+09, 6.00852273e+08,
- -6.07244318e+08, 2.92116477e+09,
+ 4.35710227e+10, -2.45596591e+10,
+ -1.59886364e+10, 7.35795455e+09,
+ -2.75823864e+10, 1.72017045e+10,
+ -2.45596591e+10, 7.59573864e+10,
+ 8.29545455e+09, -6.18693182e+10,
+ 1.62642045e+10, -1.40880682e+10,
+ -1.59886364e+10, 8.29545455e+09,
+ 2.16818182e+10, 6.47727273e+09,
+ -5.69318182e+09, -1.47727273e+10,
+ 7.35795455e+09, -6.18693182e+10,
+ 6.47727273e+09, 5.94659091e+10,
+ -1.38352273e+10, 2.40340909e+09,
+ -2.75823864e+10, 1.62642045e+10,
+ -5.69318182e+09, -1.38352273e+10,
+ 3.32755682e+10, -2.42897727e+09,
+ 1.72017045e+10, -1.40880682e+10,
+ -1.47727273e+10, 2.40340909e+09,
+ -2.42897727e+09, 1.16846591e+10,
};
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata2dlinear_hh)
#define pylith_feassemble_elasticityimplicitgravdata2dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData2DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData2DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata2dquadratic_hh)
#define pylith_feassemble_elasticityimplicitgravdata2dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData3DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata3dlinear_hh)
#define pylith_feassemble_elasticityimplicitgravdata3dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#include "ElasticityImplicitGravData3DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitGravData3DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticity.
+// This file was generated from python application elasticityapp.
#if !defined(pylith_feassemble_elasticityimplicitgravdata3dquadratic_hh)
#define pylith_feassemble_elasticityimplicitgravdata3dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData1DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata1dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData1DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData1DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata1dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata1dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData2DLinear.hh"
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_basis[] = {
@@ -94,30 +94,30 @@
};
const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsResidual[] = {
- -3.65540787e+11, 1.05895913e+12,
- 9.00343192e+10, -1.09679715e+12,
- 2.75506468e+11, 3.78380237e+10,
+ -1.46216315e+12, 4.23583651e+12,
+ 3.60137277e+11, -4.38718860e+12,
+ 1.10202587e+12, 1.51352095e+11,
};
const double pylith::feassemble::ElasticityImplicitLgDeformData2DLinear::_valsJacobian[] = {
- 4.36313261e+11, -1.48699027e+11,
- -2.81223194e+11, 8.77736676e+10,
- -1.55090067e+11, 6.09253592e+10,
- -1.48699027e+11, 7.56519651e+11,
- 9.16706846e+10, -6.28762859e+11,
- 5.70283422e+10, -1.27756792e+11,
- -2.81223194e+11, 9.16706846e+10,
- 2.80835568e+11, -2.94466026e+10,
- 3.87626315e+08, -6.22240820e+10,
- 8.77736676e+10, -6.28762859e+11,
- -2.94466026e+10, 6.55682896e+11,
- -5.83270649e+10, -2.69200376e+10,
- -1.55090067e+11, 5.70283422e+10,
- 3.87626315e+08, -5.83270649e+10,
- 1.54702440e+11, 1.29872276e+09,
- 6.09253592e+10, -1.27756792e+11,
- -6.22240820e+10, -2.69200376e+10,
- 1.29872276e+09, 1.54676830e+11,
+ 1.74525304e+12, -5.94796107e+11,
+ -1.12489278e+12, 3.51094670e+11,
+ -6.20360267e+11, 2.43701437e+11,
+ -5.94796107e+11, 3.02607860e+12,
+ 3.66682739e+11, -2.51505144e+12,
+ 2.28113369e+11, -5.11027168e+11,
+ -1.12489278e+12, 3.66682739e+11,
+ 1.12334227e+12, -1.17786411e+11,
+ 1.55050526e+09, -2.48896328e+11,
+ 3.51094670e+11, -2.51505144e+12,
+ -1.17786411e+11, 2.62273159e+12,
+ -2.33308260e+11, -1.07680150e+11,
+ -6.20360267e+11, 2.28113369e+11,
+ 1.55050526e+09, -2.33308260e+11,
+ 6.18809761e+11, 5.19489106e+09,
+ 2.43701437e+11, -5.11027168e+11,
+ -2.48896328e+11, -1.07680150e+11,
+ 5.19489106e+09, 6.18707319e+11,
};
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata2dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata2dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData2DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData2DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata2dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata2dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData3DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata3dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata3dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformData3DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformData3DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformdata3dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformdata3dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData1DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata1dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata1dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData1DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData1DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata1dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata1dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData2DLinear.hh"
@@ -62,7 +62,7 @@
};
const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_basis[] = {
@@ -94,30 +94,30 @@
};
const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsResidual[] = {
- -3.65540787e+11, 1.04750079e+12,
- 9.00343192e+10, -1.10825548e+12,
- 2.75506468e+11, 2.63796904e+10,
+ -1.46216315e+12, 4.19000317e+12,
+ 3.60137277e+11, -4.43302194e+12,
+ 1.10202587e+12, 1.05518761e+11,
};
const double pylith::feassemble::ElasticityImplicitLgDeformGravData2DLinear::_valsJacobian[] = {
- 4.36313261e+11, -1.48699027e+11,
- -2.81223194e+11, 8.77736676e+10,
- -1.55090067e+11, 6.09253592e+10,
- -1.48699027e+11, 7.56519651e+11,
- 9.16706846e+10, -6.28762859e+11,
- 5.70283422e+10, -1.27756792e+11,
- -2.81223194e+11, 9.16706846e+10,
- 2.80835568e+11, -2.94466026e+10,
- 3.87626315e+08, -6.22240820e+10,
- 8.77736676e+10, -6.28762859e+11,
- -2.94466026e+10, 6.55682896e+11,
- -5.83270649e+10, -2.69200376e+10,
- -1.55090067e+11, 5.70283422e+10,
- 3.87626315e+08, -5.83270649e+10,
- 1.54702440e+11, 1.29872276e+09,
- 6.09253592e+10, -1.27756792e+11,
- -6.22240820e+10, -2.69200376e+10,
- 1.29872276e+09, 1.54676830e+11,
+ 1.74525304e+12, -5.94796107e+11,
+ -1.12489278e+12, 3.51094670e+11,
+ -6.20360267e+11, 2.43701437e+11,
+ -5.94796107e+11, 3.02607860e+12,
+ 3.66682739e+11, -2.51505144e+12,
+ 2.28113369e+11, -5.11027168e+11,
+ -1.12489278e+12, 3.66682739e+11,
+ 1.12334227e+12, -1.17786411e+11,
+ 1.55050526e+09, -2.48896328e+11,
+ 3.51094670e+11, -2.51505144e+12,
+ -1.17786411e+11, 2.62273159e+12,
+ -2.33308260e+11, -1.07680150e+11,
+ -6.20360267e+11, 2.28113369e+11,
+ 1.55050526e+09, -2.33308260e+11,
+ 6.18809761e+11, 5.19489106e+09,
+ 2.43701437e+11, -5.11027168e+11,
+ -2.48896328e+11, -1.07680150e+11,
+ 5.19489106e+09, 6.18707319e+11,
};
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata2dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata2dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData2DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData2DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata2dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata2dquadratic_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData3DLinear.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DLinear.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata3dlinear_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata3dlinear_hh
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#include "ElasticityImplicitLgDeformGravData3DQuadratic.hh"
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/ElasticityImplicitLgDeformGravData3DQuadratic.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -11,7 +11,7 @@
//
// DO NOT EDIT THIS FILE
-// This file was generated from python application integratorelasticitylgdeform.
+// This file was generated from python application elasticitylgdeformapp.
#if !defined(pylith_feassemble_elasticityimplicitlgdeformgravdata3dquadratic_hh)
#define pylith_feassemble_elasticityimplicitlgdeformgravdata3dquadratic_hh
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/Quadrature2DLinear.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/Quadrature2DLinear.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/Quadrature2DLinear.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -67,7 +67,7 @@
self.quadPtsRef = numpy.array( [[-1.0/3.0, -1.0/3.0]], dtype=numpy.float64)
#self.quadPtsRef = numpy.array( [[1.0/3.0, 1.0/3.0]], dtype=numpy.float64)
- self.quadWts = numpy.array([0.5], dtype=numpy.float64)
+ self.quadWts = numpy.array([2.0], dtype=numpy.float64)
self.numBasis = 3
self.numQuadPts = 1
self.spaceDim = 2
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,20 +44,20 @@
};
const double pylith::feassemble::QuadratureData2DLinear::_quadPtsRef[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2DLinear::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::QuadratureData2DLinear::_quadPts[] = {
- -5.33333333e-01, 3.33333333e-01,
+ -1.66666667e-01, -3.33333333e-02,
};
const double pylith::feassemble::QuadratureData2DLinear::_basis[] = {
- -3.33333333e-01, 6.66666667e-01,
- 6.66666667e-01,};
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
const double pylith::feassemble::QuadratureData2DLinear::_basisDerivRef[] = {
-5.00000000e-01, -5.00000000e-01,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -25,7 +25,7 @@
const int pylith::feassemble::QuadratureData2DQuadratic::_numBasis = 6;
-const int pylith::feassemble::QuadratureData2DQuadratic::_numQuadPts = 3;
+const int pylith::feassemble::QuadratureData2DQuadratic::_numQuadPts = 6;
const double pylith::feassemble::QuadratureData2DQuadratic::_vertices[] = {
-1.00000000e+00, -1.00000000e+00,
@@ -50,35 +50,68 @@
};
const double pylith::feassemble::QuadratureData2DQuadratic::_quadPtsRef[] = {
+ -7.50000000e-01, -7.50000000e-01,
+ 7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01, 7.50000000e-01,
0.00000000e+00, -7.50000000e-01,
-7.50000000e-01, 0.00000000e+00,
- -7.50000000e-01, -7.50000000e-01,
+ 2.50000000e-01, 2.50000000e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_quadWts[] = {
- 6.66666667e-01, 6.66666667e-01, 6.66666667e-01,
+ 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_quadPts[] = {
+ -8.12500000e-01, -6.62500000e-01,
+ 6.87500000e-01, 2.37500000e-01,
+ -1.18750000e+00, 4.62500000e-01,
-6.25000000e-02, -2.12500000e-01,
-1.00000000e+00, -1.00000000e-01,
- -8.12500000e-01, -6.62500000e-01,
+ -6.25000000e-02, 6.87500000e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_basis[] = {
+ 3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02, 6.25000000e-02,
+ 3.75000000e-01, 3.75000000e-01,
+ 0.00000000e+00, 6.56250000e-01,
+ -9.37500000e-02, 4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ 0.00000000e+00, -9.37500000e-02,
+ 6.56250000e-01, 4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
-9.37500000e-02, 0.00000000e+00,
-9.37500000e-02, 2.50000000e-01,
1.87500000e-01, 7.50000000e-01,
-9.37500000e-02, -9.37500000e-02,
0.00000000e+00, 2.50000000e-01,
7.50000000e-01, 1.87500000e-01,
- 3.75000000e-01, -9.37500000e-02,
- -9.37500000e-02, 6.25000000e-02,
- 3.75000000e-01, 3.75000000e-01,
+ 3.75000000e-01, 1.56250000e-01,
+ 1.56250000e-01, 1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, -2.50000000e-01,
+ 2.50000000e-01, 2.50000000e-01,
+ -2.50000000e-01, 1.25000000e+00,
+ 1.25000000e+00, -2.50000000e-01,
+ 5.00000000e-01, 5.00000000e-01,
+ 1.25000000e+00, 0.00000000e+00,
+ 0.00000000e+00, -2.50000000e-01,
+ 2.50000000e-01, 1.75000000e+00,
-2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ 5.00000000e-01, 5.00000000e-01,
+ -2.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, 1.25000000e+00,
+ 1.75000000e+00, 2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
5.00000000e-01, 0.00000000e+00,
0.00000000e+00, -2.50000000e-01,
2.50000000e-01, 1.00000000e+00,
@@ -90,16 +123,34 @@
1.00000000e+00, 2.50000000e-01,
-1.00000000e+00, -2.50000000e-01,
5.00000000e-01, -2.50000000e-01,
- -1.00000000e+00, -1.00000000e+00,
- -2.50000000e-01, 0.00000000e+00,
- 0.00000000e+00, -2.50000000e-01,
- 2.50000000e-01, 2.50000000e-01,
- -2.50000000e-01, 1.25000000e+00,
- 1.25000000e+00, -2.50000000e-01,
+ 1.00000000e+00, 1.00000000e+00,
+ 7.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, 7.50000000e-01,
+ 1.25000000e+00, 1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_basisDeriv[] = {
+ -1.66666667e-01, -1.38888889e+00,
+ -2.08333333e-01, -6.94444444e-02,
+ 1.66666667e-01, -2.77777778e-01,
+ 4.16666667e-02, 3.47222222e-01,
+ -1.04166667e+00, 1.31944444e+00,
+ 1.20833333e+00, 6.94444444e-02,
+ 8.33333333e-02, 6.94444444e-01,
+ 1.04166667e+00, 3.47222222e-01,
+ 1.66666667e-01, -2.77777778e-01,
+ -9.58333333e-01, 2.01388889e+00,
-4.16666667e-02, -3.47222222e-01,
+ -2.91666667e-01, -2.43055556e+00,
+ 8.33333333e-02, 6.94444444e-01,
+ -2.08333333e-01, -6.94444444e-02,
+ -8.33333333e-01, 1.38888889e+00,
+ 1.29166667e+00, 7.63888889e-01,
+ -2.91666667e-01, -2.43055556e+00,
+ -4.16666667e-02, -3.47222222e-01,
+ -4.16666667e-02, -3.47222222e-01,
4.16666667e-01, 1.38888889e-01,
1.66666667e-01, -2.77777778e-01,
-4.58333333e-01, 1.18055556e+00,
@@ -111,12 +162,12 @@
6.66666667e-01, 5.55555556e-01,
-6.66666667e-01, -5.55555556e-01,
5.83333333e-01, -1.38888889e-01,
- -1.66666667e-01, -1.38888889e+00,
- -2.08333333e-01, -6.94444444e-02,
- 1.66666667e-01, -2.77777778e-01,
- 4.16666667e-02, 3.47222222e-01,
- -1.04166667e+00, 1.31944444e+00,
- 1.20833333e+00, 6.94444444e-02,
+ 1.66666667e-01, 1.38888889e+00,
+ 6.25000000e-01, 2.08333333e-01,
+ -5.00000000e-01, 8.33333333e-01,
+ 2.08333333e-01, 1.73611111e+00,
+ 1.25000000e-01, -2.29166667e+00,
+ -6.25000000e-01, -1.87500000e+00,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_jacobian[] = {
@@ -126,10 +177,16 @@
6.00000000e-01, 7.50000000e-01,
1.00000000e+00, -2.50000000e-01,
6.00000000e-01, 7.50000000e-01,
+ 1.00000000e+00, -2.50000000e-01,
+ 6.00000000e-01, 7.50000000e-01,
+ 1.00000000e+00, -2.50000000e-01,
+ 6.00000000e-01, 7.50000000e-01,
+ 1.00000000e+00, -2.50000000e-01,
+ 6.00000000e-01, 7.50000000e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianDet[] = {
- 9.00000000e-01, 9.00000000e-01, 9.00000000e-01,
+ 9.00000000e-01, 9.00000000e-01, 9.00000000e-01, 9.00000000e-01, 9.00000000e-01, 9.00000000e-01,
};
const double pylith::feassemble::QuadratureData2DQuadratic::_jacobianInv[] = {
@@ -139,6 +196,12 @@
-6.66666667e-01, 1.11111111e+00,
8.33333333e-01, 2.77777778e-01,
-6.66666667e-01, 1.11111111e+00,
+ 8.33333333e-01, 2.77777778e-01,
+ -6.66666667e-01, 1.11111111e+00,
+ 8.33333333e-01, 2.77777778e-01,
+ -6.66666667e-01, 1.11111111e+00,
+ 8.33333333e-01, 2.77777778e-01,
+ -6.66666667e-01, 1.11111111e+00,
};
pylith::feassemble::QuadratureData2DQuadratic::QuadratureData2DQuadratic(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXY.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,20 +44,20 @@
};
const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPtsRef[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXY::_quadPts[] = {
- -6.66666667e-01, 0.00000000e+00, 6.66666667e-01,
+ -3.33333333e-01, 0.00000000e+00, 3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basis[] = {
- -3.33333333e-01, 6.66666667e-01,
- 6.66666667e-01,};
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
const double pylith::feassemble::QuadratureData2Din3DLinearXY::_basisDerivRef[] = {
-5.00000000e-01, -5.00000000e-01,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXYZ.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,20 +44,20 @@
};
const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPtsRef[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_quadPts[] = {
- -6.66666667e-01, 0.00000000e+00, 6.66666667e-01,
+ -3.33333333e-01, 0.00000000e+00, 3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basis[] = {
- -3.33333333e-01, 6.66666667e-01,
- 6.66666667e-01,};
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
const double pylith::feassemble::QuadratureData2Din3DLinearXYZ::_basisDerivRef[] = {
-5.00000000e-01, -5.00000000e-01,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearXZ.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,20 +44,20 @@
};
const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPtsRef[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_quadPts[] = {
- -6.66666667e-01, 0.00000000e+00, 6.66666667e-01,
+ -3.33333333e-01, 0.00000000e+00, 3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basis[] = {
- -3.33333333e-01, 6.66666667e-01,
- 6.66666667e-01,};
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
const double pylith::feassemble::QuadratureData2Din3DLinearXZ::_basisDerivRef[] = {
-5.00000000e-01, -5.00000000e-01,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DLinearYZ.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -44,20 +44,20 @@
};
const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPtsRef[] = {
- 3.33333333e-01, 3.33333333e-01,
+ -3.33333333e-01, -3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadWts[] = {
- 5.00000000e-01,
+ 2.00000000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_quadPts[] = {
- 0.00000000e+00, 6.66666667e-01, 6.66666667e-01,
+ 0.00000000e+00, 3.33333333e-01, 3.33333333e-01,
};
const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basis[] = {
- -3.33333333e-01, 6.66666667e-01,
- 6.66666667e-01,};
+ 3.33333333e-01, 3.33333333e-01,
+ 3.33333333e-01,};
const double pylith::feassemble::QuadratureData2Din3DLinearYZ::_basisDerivRef[] = {
-5.00000000e-01, -5.00000000e-01,
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData2Din3DQuadratic.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -25,7 +25,7 @@
const int pylith::feassemble::QuadratureData2Din3DQuadratic::_numBasis = 6;
-const int pylith::feassemble::QuadratureData2Din3DQuadratic::_numQuadPts = 3;
+const int pylith::feassemble::QuadratureData2Din3DQuadratic::_numQuadPts = 6;
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_vertices[] = {
2.00000000e+00, -5.00000000e-01, -5.00000000e-01,
@@ -50,35 +50,68 @@
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadPtsRef[] = {
+ -7.50000000e-01, -7.50000000e-01,
+ 7.50000000e-01, -7.50000000e-01,
+ -7.50000000e-01, 7.50000000e-01,
0.00000000e+00, -7.50000000e-01,
-7.50000000e-01, 0.00000000e+00,
- -7.50000000e-01, -7.50000000e-01,
+ 2.50000000e-01, 2.50000000e-01,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_quadWts[] = {
- 6.66666667e-01, 6.66666667e-01, 6.66666667e-01,
+ 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01, 3.33333333e-01,
};
const double 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,
9.37500000e-01, 1.31250000e+00, 6.25000000e-02,
5.62500000e-01, 1.87500000e-01, 8.12500000e-01,
- 1.50000000e+00, 0.00000000e+00, -1.25000000e-01,
+ -5.00000000e-01, 2.00000000e+00, 1.37500000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basis[] = {
+ 3.75000000e-01, -9.37500000e-02,
+ -9.37500000e-02, 6.25000000e-02,
+ 3.75000000e-01, 3.75000000e-01,
+ 0.00000000e+00, 6.56250000e-01,
+ -9.37500000e-02, 4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
+ 0.00000000e+00, -9.37500000e-02,
+ 6.56250000e-01, 4.37500000e-01,
+ -0.00000000e+00, -0.00000000e+00,
-9.37500000e-02, 0.00000000e+00,
-9.37500000e-02, 2.50000000e-01,
1.87500000e-01, 7.50000000e-01,
-9.37500000e-02, -9.37500000e-02,
0.00000000e+00, 2.50000000e-01,
7.50000000e-01, 1.87500000e-01,
- 3.75000000e-01, -9.37500000e-02,
- -9.37500000e-02, 6.25000000e-02,
- 3.75000000e-01, 3.75000000e-01,
+ 3.75000000e-01, 1.56250000e-01,
+ 1.56250000e-01, 1.56250000e+00,
+ -6.25000000e-01, -6.25000000e-01,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_basisDerivRef[] = {
+ -1.00000000e+00, -1.00000000e+00,
+ -2.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, -2.50000000e-01,
+ 2.50000000e-01, 2.50000000e-01,
+ -2.50000000e-01, 1.25000000e+00,
+ 1.25000000e+00, -2.50000000e-01,
+ 5.00000000e-01, 5.00000000e-01,
+ 1.25000000e+00, 0.00000000e+00,
+ 0.00000000e+00, -2.50000000e-01,
+ 2.50000000e-01, 1.75000000e+00,
-2.50000000e-01, -2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ 5.00000000e-01, 5.00000000e-01,
+ -2.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, 1.25000000e+00,
+ 1.75000000e+00, 2.50000000e-01,
+ -1.75000000e+00, -1.75000000e+00,
+ -2.50000000e-01, -2.50000000e-01,
+ -2.50000000e-01, -2.50000000e-01,
5.00000000e-01, 0.00000000e+00,
0.00000000e+00, -2.50000000e-01,
2.50000000e-01, 1.00000000e+00,
@@ -90,16 +123,34 @@
1.00000000e+00, 2.50000000e-01,
-1.00000000e+00, -2.50000000e-01,
5.00000000e-01, -2.50000000e-01,
- -1.00000000e+00, -1.00000000e+00,
- -2.50000000e-01, 0.00000000e+00,
- 0.00000000e+00, -2.50000000e-01,
- 2.50000000e-01, 2.50000000e-01,
- -2.50000000e-01, 1.25000000e+00,
- 1.25000000e+00, -2.50000000e-01,
+ 1.00000000e+00, 1.00000000e+00,
+ 7.50000000e-01, 0.00000000e+00,
+ 0.00000000e+00, 7.50000000e-01,
+ 1.25000000e+00, 1.25000000e+00,
+ -1.25000000e+00, -1.75000000e+00,
+ -1.75000000e+00, -1.25000000e+00,
};
const double 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,
+ -1.87500000e-01, 6.25000000e-02, 1.76470588e-01,
+ -1.12500000e+00, -6.25000000e-01, 1.05882353e+00,
+ 3.75000000e-01, 8.75000000e-01, -3.52941176e-01,
+ -3.75000000e-01, 1.25000000e-01, 3.52941176e-01,
+ 1.56250000e-01, 7.81250000e-01, -1.47058824e-01,
+ 2.18750000e-01, 9.37500000e-02, -2.05882353e-01,
+ -1.50000000e+00, -5.00000000e-01, 1.41176471e+00,
1.87500000e-01, -6.25000000e-02, -1.76470588e-01,
+ 1.31250000e+00, -4.37500000e-01, -1.23529412e+00,
+ -3.75000000e-01, 1.25000000e-01, 3.52941176e-01,
+ -3.12500000e-02, -1.56250000e-01, 2.94117647e-02,
+ -1.09375000e+00, -4.68750000e-01, 1.02941176e+00,
+ 0.00000000e+00, 1.00000000e+00, 2.77555756e-17,
+ 1.31250000e+00, -4.37500000e-01, -1.23529412e+00,
+ 1.87500000e-01, -6.25000000e-02, -1.76470588e-01,
+ 1.87500000e-01, -6.25000000e-02, -1.76470588e-01,
6.25000000e-02, 3.12500000e-01, -5.88235294e-02,
2.18750000e-01, 9.37500000e-02, -2.05882353e-01,
-8.43750000e-01, -2.18750000e-01, 7.94117647e-01,
@@ -111,12 +162,12 @@
-9.37500000e-02, 5.31250000e-01, 8.82352941e-02,
9.37500000e-02, -5.31250000e-01, -8.82352941e-02,
2.81250000e-01, 4.06250000e-01, -2.64705882e-01,
- 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,
- -1.87500000e-01, 6.25000000e-02, 1.76470588e-01,
- -1.12500000e+00, -6.25000000e-01, 1.05882353e+00,
- 3.75000000e-01, 8.75000000e-01, -3.52941176e-01,
+ -7.50000000e-01, 2.50000000e-01, 7.05882353e-01,
+ 9.37500000e-02, 4.68750000e-01, -8.82352941e-02,
+ -6.56250000e-01, -2.81250000e-01, 6.17647059e-01,
+ -9.37500000e-01, 3.12500000e-01, 8.82352941e-01,
+ 1.37500000e+00, -1.25000000e-01, -1.29411765e+00,
+ 8.75000000e-01, -6.25000000e-01, -8.23529412e-01,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobian[] = {
@@ -129,10 +180,19 @@
-7.50000000e-01, -1.25000000e+00,
1.75000000e+00, 2.50000000e-01,
2.50000000e-01, 1.25000000e+00,
+ -7.50000000e-01, -1.25000000e+00,
+ 1.75000000e+00, 2.50000000e-01,
+ 2.50000000e-01, 1.25000000e+00,
+ -7.50000000e-01, -1.25000000e+00,
+ 1.75000000e+00, 2.50000000e-01,
+ 2.50000000e-01, 1.25000000e+00,
+ -7.50000000e-01, -1.25000000e+00,
+ 1.75000000e+00, 2.50000000e-01,
+ 2.50000000e-01, 1.25000000e+00,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianDet[] = {
- 2.98433410e+00, 2.98433410e+00, 2.98433410e+00,
+ 2.98433410e+00, 2.98433410e+00, 2.98433410e+00, 2.98433410e+00, 2.98433410e+00, 2.98433410e+00,
};
const double pylith::feassemble::QuadratureData2Din3DQuadratic::_jacobianInv[] = {
@@ -142,6 +202,12 @@
-8.75000000e-01, -3.75000000e-01, 8.23529412e-01,
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,
+ -8.75000000e-01, -3.75000000e-01, 8.23529412e-01,
+ 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,
+ -8.75000000e-01, -3.75000000e-01, 8.23529412e-01,
};
pylith::feassemble::QuadratureData2Din3DQuadratic::QuadratureData2Din3DQuadratic(void)
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 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/feassemble/data/QuadratureData3DLinear.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -54,11 +54,11 @@
};
const double pylith::feassemble::QuadratureData3DLinear::_quadPts[] = {
- 8.25000000e-01, 2.25000000e-01, 4.50000000e-01,
+ 5.75000000e-01, -2.75000000e-01, 2.00000000e-01,
};
const double pylith::feassemble::QuadratureData3DLinear::_basis[] = {
- -2.50000000e-01, 2.50000000e-01, 2.50000000e-01,
+ 2.50000000e-01, 2.50000000e-01, 2.50000000e-01,
2.50000000e-01,};
const double pylith::feassemble::QuadratureData3DLinear::_basisDerivRef[] = {
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -211,5 +211,17 @@
CPPUNIT_ASSERT(material.hasStateVar("plastic_strain"));
} // testHasStateVar
+// ----------------------------------------------------------------------
+// Test _dbToProperties().
+void
+pylith::materials::TestDruckerPrager3D::testDBToProperties(void)
+{ // testDBToProperties
+ CPPUNIT_ASSERT(0 != _material);
+
+ TestMaterial::testDBToProperties();
+ CPPUNIT_ASSERT_EQUAL(false, _material->isJacobianSymmetric());
+} // testDBToProperties
+
+
// End of file
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestDruckerPrager3D.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -109,6 +109,9 @@
/// Test hasStateVar()
void testHasStateVar(void);
+ /// Test _dbToProperties() and check flag for symmetry of Jacobian.
+ void testDBToProperties(void);
+
}; // class TestDruckerPrager3D
#endif // pylith_materials_testdruckerprager3d_hh
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -145,6 +145,20 @@
} // testNeedNewJacobian
// ----------------------------------------------------------------------
+// Test isJacobianSymmetric()
+void
+pylith::materials::TestMaterial::testIsJacobianSymmetric(void)
+{ // testIsJacobianSymmetric
+ ElasticIsotropic3D material;
+
+ CPPUNIT_ASSERT_EQUAL(true, material.isJacobianSymmetric());
+
+ bool flag = false;
+ material._isJacobianSymmetric = flag;
+ CPPUNIT_ASSERT_EQUAL(flag, material.isJacobianSymmetric());
+} // testIsJacobianSymmetric
+
+// ----------------------------------------------------------------------
// Test initialize()
void
pylith::materials::TestMaterial::testInitialize(void)
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.hh
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.hh 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/materials/TestMaterial.hh 2010-05-30 21:53:47 UTC (rev 16840)
@@ -47,6 +47,7 @@
CPPUNIT_TEST( testDBStateVars );
CPPUNIT_TEST( testNormalizer );
CPPUNIT_TEST( testNeedNewJacobian );
+ CPPUNIT_TEST( testIsJacobianSymmetric );
CPPUNIT_TEST( testInitialize );
CPPUNIT_TEST_SUITE_END();
@@ -75,6 +76,9 @@
/// Test needNewJacobian()
void testNeedNewJacobian(void);
+ /// Test isJacobianSymmetric()
+ void testIsJacobianSymmetric(void);
+
/// Test initialize()
void testInitialize(void);
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIOCubit.cc
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIOCubit.cc 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/libtests/meshio/TestMeshIOCubit.cc 2010-05-30 21:53:47 UTC (rev 16840)
@@ -118,6 +118,7 @@
{ // _testRead
MeshIOCubit iohandler;
iohandler.filename(filename);
+ iohandler.useNodesetNames(false);
// Read mesh
topology::Mesh mesh;
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/bc/TestDirichletBC.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -80,6 +80,17 @@
return
+ def test_numDimConstrained(self):
+ """
+ Test numDimConstrained().
+ """
+
+ (mesh, bc, field) = self._initialize()
+
+ self.assertEqual(1, bc.numDimConstrained())
+ return
+
+
def test_setConstraintSizes(self):
"""
Test setConstraintSizes().
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestMaterial.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestMaterial.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/materials/TestMaterial.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -116,6 +116,16 @@
return
+ def testIsJacobianSymmetric(self):
+ """
+ Test isJacobianSymmetric().
+ """
+ # Default should be True.
+ self.failUnless(self.material.isJacobianSymmetric())
+
+ return
+
+
def test_preinitialize(self):
"""
Test preinitialize().
Modified: short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestMeshIOCubit.py
===================================================================
--- short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestMeshIOCubit.py 2010-05-30 20:58:53 UTC (rev 16839)
+++ short/3D/PyLith/branches/pylith-scecdynrup/unittests/pytests/meshio/TestMeshIOCubit.py 2010-05-30 21:53:47 UTC (rev 16840)
@@ -60,6 +60,7 @@
# For now, we only test reading the file.
io = MeshIOCubit()
io.inventory.filename = filenameIn
+ io.inventory.useNames = False
io._configure()
from spatialdata.units.Nondimensional import Nondimensional
More information about the CIG-COMMITS
mailing list