[cig-commits] r19146 - in short/3D/PyLith/branches/v1.6-stable: libsrc/pylith/faults tests/3d/cyclicfriction
brad at geodynamics.org
brad at geodynamics.org
Wed Nov 2 22:52:54 PDT 2011
Author: brad
Date: 2011-11-02 22:52:54 -0700 (Wed, 02 Nov 2011)
New Revision: 19146
Modified:
short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc
short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg
Log:
Enabled updating relative displacement from displacement field (fixed bug in calculation).
Modified: short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-11-03 03:11:45 UTC (rev 19145)
+++ short/3D/PyLith/branches/v1.6-stable/libsrc/pylith/faults/FaultCohesiveDyn.cc 2011-11-03 05:52:54 UTC (rev 19146)
@@ -327,23 +327,36 @@
// Compute slip (in fault coordinates system) from relative displacement.
double slipNormal = 0.0;
+ double tractionNormal = 0.0;
const int indexN = spaceDim - 1;
for (int jDim=0; jDim < spaceDim; ++jDim) {
slipNormal +=
orientationVertex[indexN*spaceDim+jDim] * dispRelVertex[jDim];
+ tractionNormal +=
+ orientationVertex[indexN*spaceDim+jDim] * dispTpdtVertexL[jDim];
} // for
residualVertexN = 0.0;
residualVertexL = 0.0;
- if (slipNormal <= _zeroTolerance) { // if no opening
+ if (slipNormal < _zeroTolerance ||
+ tractionNormal < -_zeroTolerance) { // if no opening
// Initial (external) tractions oppose (internal) tractions
// associated with Lagrange multiplier.
residualVertexN = areaVertex * (dispTpdtVertexL - initialTractionsVertex);
+#if 1 // DEBUGGING
for (int iDim=0; iDim < spaceDim; ++iDim) {
residualVertexL[iDim] = -areaVertex *
(dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim] - dispRelVertex[iDim]);
+ if (fabs(dispTpdtVertexP[iDim] - dispTpdtVertexN[iDim] - dispRelVertex[iDim]) > _zeroTolerance) {
+ std::cout << "Inconsistent relative displacement"
+ << ", dispRel["<<iDim<<"]: " << dispRelVertex[iDim]
+ << ", dispN["<<iDim<<"]: " << dispTpdtVertexN[iDim]
+ << ", dispP["<<iDim<<"]: " << dispTpdtVertexP[iDim]
+ << std::endl;
+ } // if
} // for
+#endif
} // if
residualVertexP = -residualVertexN;
@@ -804,7 +817,7 @@
// Compute current estimate of slip.
for (int iDim=0; iDim < spaceDim; ++iDim) {
- slipVertex[iDim] = slipVertex[iDim] + dSlipVertex[iDim];
+ slipVertex[iDim] += dSlipVertex[iDim];
} // for
// Update relative displacement from slip.
@@ -843,7 +856,7 @@
assert(dispRelVertex.size() ==
dispRelSection->getFiberDimension(v_fault));
dispRelSection->updatePoint(v_fault, &dispRelVertex[0]);
-
+
// Update Lagrange multiplier increment.
assert(dLagrangeTpdtVertex.size() ==
dispTIncrSection->getFiberDimension(v_lagrange));
@@ -1211,7 +1224,6 @@
9 + // updates
spaceDim*9));
-
#if !defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(computeEvent);
#endif
@@ -1564,7 +1576,6 @@
const int spaceDim = _quadrature->spaceDim();
// Get section information
-#if 0 // TEMPORARY test case
const ALE::Obj<RealSection>& dispTSection =
fields.get("disp(t)").section();
assert(!dispTSection.isNull());
@@ -1577,7 +1588,6 @@
const ALE::Obj<RealSection>& dispRelSection =
_fields->get("relative disp").section();
assert(!dispRelSection.isNull());
-#endif
const ALE::Obj<RealSection>& velocitySection =
fields.get("velocity(t)").section();
@@ -1594,7 +1604,6 @@
const int v_negative = _cohesiveVertices[iVertex].negative;
const int v_positive = _cohesiveVertices[iVertex].positive;
-#if 0 // TEMPORARY test case
// Get displacement values
assert(spaceDim == dispTSection->getFiberDimension(v_negative));
const double* dispTVertexN = dispTSection->restrictPoint(v_negative);
@@ -1619,14 +1628,13 @@
const double value =
dispTVertexP[iDim] + dispTIncrVertexP[iDim]
- dispTVertexN[iDim] - dispTIncrVertexN[iDim];
- dispRelVertex[iDim] = value > _zeroTolerance ? value : 0.0;
+ dispRelVertex[iDim] = fabs(value) > _zeroTolerance ? value : 0.0;
} // for
// Update relative displacement field.
assert(dispRelVertex.size() ==
dispRelSection->getFiberDimension(v_fault));
dispRelSection->updatePoint(v_fault, &dispRelVertex[0]);
-#endif
// Get velocity values
assert(spaceDim == velocitySection->getFiberDimension(v_negative));
Modified: short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg
===================================================================
--- short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg 2011-11-03 03:11:45 UTC (rev 19145)
+++ short/3D/PyLith/branches/v1.6-stable/tests/3d/cyclicfriction/pylithapp.cfg 2011-11-03 05:52:54 UTC (rev 19146)
@@ -171,8 +171,8 @@
# Convergence parameters.
ksp_rtol = 1.0e-8
ksp_atol = 1.0e-10
-ksp_max_it = 200
-ksp_gmres_restart = 70
+ksp_max_it = 100
+ksp_gmres_restart = 50
# Linear solver monitoring options.
ksp_monitor = true
@@ -182,7 +182,7 @@
# Nonlinear solver monitoring options.
snes_rtol = 1.0e-8
snes_atol = 1.0e-8
-snes_max_it = 200
+snes_max_it = 30
snes_monitor = true
snes_ls_monitor = true
#snes_view = true
More information about the CIG-COMMITS
mailing list