[cig-commits] r19184 - in short/3D/PyLith/trunk: . doc/releasenotes examples/3d/hex8 libsrc/pylith/faults pylith/tests tests/3d/cyclicfriction tests_auto/2d/quad4 unittests/libtests/faults unittests/libtests/friction unittests/pytests/meshio
brad at geodynamics.org
brad at geodynamics.org
Thu Nov 10 17:04:52 PST 2011
Author: brad
Date: 2011-11-10 17:04:52 -0800 (Thu, 10 Nov 2011)
New Revision: 19184
Modified:
short/3D/PyLith/trunk/README
short/3D/PyLith/trunk/doc/releasenotes/announce_v1.6.2.txt
short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg
short/3D/PyLith/trunk/examples/3d/hex8/step12.cfg
short/3D/PyLith/trunk/examples/3d/hex8/step13.cfg
short/3D/PyLith/trunk/examples/3d/hex8/step14.cfg
short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc
short/3D/PyLith/trunk/pylith/tests/Fault.py
short/3D/PyLith/trunk/tests/3d/cyclicfriction/pylithapp.cfg
short/3D/PyLith/trunk/tests_auto/2d/quad4/friction_opening.cfg
short/3D/PyLith/trunk/tests_auto/2d/quad4/slipweakening_opening.cfg
short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDyn.cc
short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
short/3D/PyLith/trunk/unittests/pytests/meshio/Makefile.am
Log:
Merge from trunk.
Modified: short/3D/PyLith/trunk/README
===================================================================
--- short/3D/PyLith/trunk/README 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/README 2011-11-11 01:04:52 UTC (rev 19184)
@@ -78,7 +78,56 @@
- Fixed bug in writing tensor data for Xdmf files. Switched Tensor
to Tensor6 to account for symmetry.
+ - Fixed bug in writing HDF5 files in parallel when one processor
+ does not write any information (e.g., faults and boundary
+ conditions).
+ - Added dimensioning of time dataset in HDF5 files. The units are
+ now seconds rather than nondimensional time.
+
+ - Fixed memory allocation error (std::bad_alloc) when a processor
+ did not contain cells for a boundary condition or output. This bug
+ did not show up on all architectures.
+
+ - Increased robustness of spontaneous rupture (fault friction)
+ implementation to broaden the range of conditions it can
+ handle. The implementation now properly handles cases with fault
+ opening and cases with zero shear or normal tractions.
+
+
+* Internal changes
+
+ - Fault implementation
+
+ Several changes have been made to the fault implementation, but
+ none of these affect the user interface. The runtime performance
+ is nearly identical with improved accuracy for spontaneous rupture
+ (fault friction) simulations. These changes involved switching to
+ using tractions (non-integrated quantities) for the Lagrange
+ multipliers in the global coordinate system rather than integrated
+ quantities in the fault coordinate system. Additionally, initial
+ fault tractions are associated with the fault vertices and their
+ interpolation uses the finite-element basis functions.
+
+ - Distribution of mesh among processors
+
+ The data structures used to distribute the mesh among processors
+ have been improved. This reduces memory use and runtime for this
+ stage of the simulations.
+
+
+KNOWN ISSUES
+
+ The custom line search used with the PETSc nonlinear solver (SNES)
+ has difficulty handling some loading cases. In cases where the
+ direction of the line search tends to be nearly orthogonal to the
+ residual, the rate of convergence in the SNES iterations is
+ extremely slow. In other cases the nonlinear solver gets stuck in a
+ local minimum. We plan to improve the line search algorithm in a
+ future release in order to resolve this issue and improve the rate
+ of convergence in spontaneous rupture simulations.
+
+
----------------------------------------------------------------------
Version 1.6.1
----------------------------------------------------------------------
Modified: short/3D/PyLith/trunk/doc/releasenotes/announce_v1.6.2.txt
===================================================================
--- short/3D/PyLith/trunk/doc/releasenotes/announce_v1.6.2.txt 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/doc/releasenotes/announce_v1.6.2.txt 2011-11-11 01:04:52 UTC (rev 19184)
@@ -19,6 +19,28 @@
RELEASE NOTES
+* Bug fixes
+
+ - Fixed bug in writing tensor data for Xdmf files. Switched Tensor
+ to Tensor6 to account for symmetry.
+
+ - Fixed bug in writing HDF5 files in parallel when one processor
+ does not write any information (e.g., faults and boundary
+ conditions).
+
+ - Added dimensioning of time dataset in HDF5 files. The units are
+ now seconds rather than nondimensional time.
+
+ - Fixed memory allocation error (std::bad_alloc) when a processor
+ did not contain cells for a boundary condition or output. This bug
+ did not show up on all architectures.
+
+ - Increased robustness of spontaneous rupture (fault friction)
+ implementation to broaden the range of conditions it can
+ handle. The implementation now properly handles cases with fault
+ opening and cases with zero shear or normal tractions.
+
+
* Internal changes
- Fault implementation
@@ -40,32 +62,13 @@
stage of the simulations.
-* Bug fixes
-
- - Fixed bug in writing HDF5 files in parallel when one processor
- does not write any information (e.g., faults and boundary
- conditions).
-
- - Added dimensioning of time dataset in HDF5 files. The units are
- now seconds rather than nondimensional time.
-
- - Fixed memory allocation error (std::bad_alloc) when a processor
- did not contain cells for a boundary condition or output. This bug
- did not show up on all architectures.
-
- - Increased robustness of spontaneous rupture (fault friction)
- implementation to broaden the range of conditions it can
- handle. The implementation now properly handles cases with fault
- opening and cases with zero shear or normal tractions.
-
-
KNOWN ISSUES
The custom line search used with the PETSc nonlinear solver (SNES)
- has difficulty handling cases with fault opening when the fault
- normal tractions are much larger than the fault shear tractions. The
+ has difficulty handling some loading cases. In cases where the
direction of the line search tends to be nearly orthogonal to the
- residual, resulting in extremely poor convergence. We plan to
- improve the line search algorithm in a future release in order to
- resolve this issue and improve the rate of convergence in
- spontaneous rupture simulations.
+ residual, the rate of convergence in the SNES iterations is
+ extremely slow. In other cases the nonlinear solver gets stuck in a
+ local minimum. We plan to improve the line search algorithm in a
+ future release in order to resolve this issue and improve the rate
+ of convergence in spontaneous rupture simulations.
Modified: short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/examples/3d/hex8/pylithapp.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -82,7 +82,7 @@
sub_pc_factor_shift_type = nonzero
# Convergence parameters.
-ksp_rtol = 1.0e-8
+ksp_rtol = 1.0e-10
ksp_atol = 1.0e-20
ksp_max_it = 100
ksp_gmres_restart = 50
@@ -93,10 +93,11 @@
ksp_converged_reason = true
# Nonlinear solver monitoring options.
-snes_rtol = 1.0e-8
-snes_atol = 1.0e-18
+snes_rtol = 1.0e-10
+snes_atol = 1.0e-9
snes_max_it = 100
snes_monitor = true
+snes_ls_monitor = true
snes_view = true
snes_converged_reason = true
Modified: short/3D/PyLith/trunk/examples/3d/hex8/step12.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/step12.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/examples/3d/hex8/step12.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -88,7 +88,7 @@
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_initial.data = [-0.5*m,0.0*m]
db_rate = spatialdata.spatialdb.UniformDB
db_rate.label = Dirichlet rate BC on +x
@@ -156,10 +156,6 @@
#friction_ksp_view = true
friction_ksp_converged_reason = true
-# Reduce convergence tolerances.
-ksp_rtol = 1.0e-12
-ksp_atol = 1.0e-15
-
# ----------------------------------------------------------------------
# output
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/trunk/examples/3d/hex8/step13.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/step13.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/examples/3d/hex8/step13.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -136,7 +136,7 @@
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]
+friction.db_properties.data = [0.6,0.4,0.2*m,0.0*Pa]
# ----------------------------------------------------------------------
# PETSc settings
@@ -156,10 +156,6 @@
#friction_ksp_view = true
friction_ksp_converged_reason = true
-# Reduce convergence tolerances.
-ksp_rtol = 1.0e-12
-ksp_atol = 1.0e-15
-
# ----------------------------------------------------------------------
# output
# ----------------------------------------------------------------------
Modified: short/3D/PyLith/trunk/examples/3d/hex8/step14.cfg
===================================================================
--- short/3D/PyLith/trunk/examples/3d/hex8/step14.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/examples/3d/hex8/step14.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -118,6 +118,7 @@
[pylithapp.timedependent.interfaces.fault]
# The label corresponds to the name of the nodeset in CUBIT.
label = fault
+zero_tolerance = 1.0e-12
# Use the rate-and-state aging friction model.
friction = pylith.friction.RateStateAgeing
Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc 2011-11-11 01:04:52 UTC (rev 19184)
@@ -661,11 +661,16 @@
for (SieveSubMesh::label_sequence::iterator v_iter = fVertices2Begin;
v_iter != fVertices2EndNew;
++v_iter) {
+ assert(coordinates->getFiberDimension(*v_iter) ==
+ coordinates->getFiberDimension(vertexRenumber[*v_iter]));
coordinates->updatePoint(vertexRenumber[*v_iter],
coordinates->restrictPoint(*v_iter));
- if (constraintCell)
+ if (constraintCell) {
+ assert(coordinates->getFiberDimension(*v_iter) ==
+ coordinates->getFiberDimension(vertexLagrangeRenumber[*v_iter]));
coordinates->updatePoint(vertexLagrangeRenumber[*v_iter],
coordinates->restrictPoint(*v_iter));
+ } // if
} // for
if (debug)
coordinates->view("Coordinates with shadow vertices");
Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-11-11 01:04:52 UTC (rev 19184)
@@ -2210,7 +2210,9 @@
} else {
// friction exceeds value necessary to stick
// no changes to solution
- assert(0.0 == slipRateMag);
+ if (iterating) {
+ assert(0.0 == slipRateMag);
+ } // if
} // if/else
} else {
// if in tension, then traction is zero.
@@ -2270,7 +2272,9 @@
} else {
// else friction exceeds value necessary, so stick
// no changes to solution
- assert(0.0 == slipRateMag);
+ if (iterating) {
+ assert(0.0 == slipRateMag);
+ } // if
} // if/else
} else {
// if in tension, then traction is zero.
Modified: short/3D/PyLith/trunk/pylith/tests/Fault.py
===================================================================
--- short/3D/PyLith/trunk/pylith/tests/Fault.py 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/pylith/tests/Fault.py 2011-11-11 01:04:52 UTC (rev 19184)
@@ -58,7 +58,7 @@
testcase.assertEqual(dimE, dim)
scale = 1.0
- if name == "traction_change":
+ if name == "traction_change" or name == "traction":
scale *= normalizer.pressureScale().value
for i in xrange(dim):
Modified: short/3D/PyLith/trunk/tests/3d/cyclicfriction/pylithapp.cfg
===================================================================
--- short/3D/PyLith/trunk/tests/3d/cyclicfriction/pylithapp.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/tests/3d/cyclicfriction/pylithapp.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -183,7 +183,7 @@
# Nonlinear solver monitoring options.
snes_rtol = 1.0e-8
snes_atol = 1.0e-7
-snes_max_it = 50
+snes_max_it = 100
snes_monitor = true
snes_ls_monitor = true
#snes_view = true
Modified: short/3D/PyLith/trunk/tests_auto/2d/quad4/friction_opening.cfg
===================================================================
--- short/3D/PyLith/trunk/tests_auto/2d/quad4/friction_opening.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/tests_auto/2d/quad4/friction_opening.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -124,6 +124,7 @@
sub_pc_factor_shift_type = nonzero
ksp_rtol = 1.0e-8
+ksp_atol = 1.0e-12
ksp_max_it = 100
ksp_gmres_restart = 50
#ksp_monitor = true
@@ -131,8 +132,10 @@
#ksp_converged_reason = true
snes_rtol = 1.0e-8
+snes_atol = 1.0e-9
snes_max_it = 100
#snes_monitor = true
+#snes_ls_monitor = true
#snes_view = true
#snes_converged_reason = true
Modified: short/3D/PyLith/trunk/tests_auto/2d/quad4/slipweakening_opening.cfg
===================================================================
--- short/3D/PyLith/trunk/tests_auto/2d/quad4/slipweakening_opening.cfg 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/tests_auto/2d/quad4/slipweakening_opening.cfg 2011-11-11 01:04:52 UTC (rev 19184)
@@ -123,8 +123,12 @@
sub_pc_factor_shift_type = nonzero
ksp_rtol = 1.0e-8
+ksp_atol = 1.0e-12
ksp_max_it = 100
ksp_gmres_restart = 50
+
+snes_rtol = 1.0e-8
+snes_atol = 1.0e-9
snes_max_it = 200
#ksp_monitor = true
Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDyn.cc 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDyn.cc 2011-11-11 01:04:52 UTC (rev 19184)
@@ -232,7 +232,7 @@
fields.get("dispIncr(t->t+dt)").section();
CPPUNIT_ASSERT(!dispIncrSection.isNull());
- dispIncrSection->view("DISP INCREMENT"); // DEBUGGING
+ //dispIncrSection->view("DISP INCREMENT"); // DEBUGGING
// Get expected values
const PylithScalar* valsE = _data->fieldIncrStick; // No change in dispIncr
@@ -751,7 +751,7 @@
mesh->coordsys(&cs);
mesh->nondimensionalize(normalizer);
- const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
+ const PylithScalar upDir[3] = { 0.0, 0.0, 1.0 };
fault->initialize(*mesh, upDir);
Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc 2011-11-11 01:04:52 UTC (rev 19184)
@@ -777,10 +777,10 @@
const int numCorners = 2;
const int numQuadPts = 2;
const int spaceDim = 2;
- const PylithScalar basis[] = { 0.75, 0.25, 0.25, 0.75 };
- const PylithScalar basisDeriv[] = { -0.5, 0.5, -0.5, 0.5 };
- const PylithScalar quadPtsRef[] = { -0.5, 0.5 };
- const PylithScalar quadWts[] = { 1.0, 1.0 };
+ const PylithScalar basis[4] = { 1.0, 0.0, 0.0, 1.0 };
+ const PylithScalar basisDeriv[4] = { -0.5, 0.5, -0.5, 0.5 };
+ const PylithScalar quadPtsRef[2] = { -1.0, 1.0 };
+ const PylithScalar quadWts[2] = { 1.0, 1.0 };
quadrature.initialize(basis, numQuadPts, numCorners,
basisDeriv, numQuadPts, numCorners, cellDim,
quadPtsRef, numQuadPts, cellDim,
@@ -811,8 +811,9 @@
friction->normalizer(normalizer);
fault->frictionModel(friction);
- const PylithScalar upDir[] = { 0.0, 0.0, 1.0 };
+ const PylithScalar upDir[3] = { 0.0, 0.0, 1.0 };
fault->initialize(*mesh, upDir);
+ fault->verifyConfiguration(*mesh);
} // _initialize
Modified: short/3D/PyLith/trunk/unittests/pytests/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/meshio/Makefile.am 2011-11-11 00:53:50 UTC (rev 19183)
+++ short/3D/PyLith/trunk/unittests/pytests/meshio/Makefile.am 2011-11-11 01:04:52 UTC (rev 19184)
@@ -37,6 +37,7 @@
TestOutputSolnSubset.py \
TestDataWriterVTK.py \
TestDataWriterHDF5.py \
+ TestDataWriterHDF5Ext.py \
TestSingleOutput.py \
TestXdmf.py
More information about the CIG-COMMITS
mailing list