[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