[cig-commits] r16585 - short/3D/PyLith/trunk/libsrc/faults
brad at geodynamics.org
brad at geodynamics.org
Tue Apr 27 16:08:36 PDT 2010
Author: brad
Date: 2010-04-27 16:08:36 -0700 (Tue, 27 Apr 2010)
New Revision: 16585
Modified:
short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
Log:
Fixed sensitivity solve KSP prefix setting and setting options (set prefix then set options). Fixed bug in friction implementation (no need to include sliding case where traction is less than friction and slip is nonzero).
Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc 2010-04-27 02:03:12 UTC (rev 16584)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc 2010-04-27 23:08:36 UTC (rev 16585)
@@ -1536,10 +1536,6 @@
// Setup PETSc KSP linear solver.
if (0 == _ksp) {
PetscErrorCode err = 0;
- if (0 != _ksp) {
- err = KSPDestroy(_ksp); _ksp = 0;
- CHECK_PETSC_ERROR(err);
- } // if
err = KSPCreate(_faultMesh->comm(), &_ksp); CHECK_PETSC_ERROR(err);
err = KSPSetInitialGuessNonzero(_ksp, PETSC_FALSE); CHECK_PETSC_ERROR(err);
double rtol = 0.0;
@@ -1556,10 +1552,10 @@
PC pc;
err = KSPGetPC(_ksp, &pc); CHECK_PETSC_ERROR(err);
err = PCSetType(pc, PCJACOBI); CHECK_PETSC_ERROR(err);
- err = KSPSetType(_ksp, KSPGMRES);
+ err = KSPSetType(_ksp, KSPGMRES); CHECK_PETSC_ERROR(err);
+ err = KSPAppendOptionsPrefix(_ksp, "friction_");
err = KSPSetFromOptions(_ksp); CHECK_PETSC_ERROR(err);
- err = KSPAppendOptionsPrefix(_ksp, "friction");
} // if
} // _sensitivitySetup
@@ -1760,6 +1756,8 @@
// Update section view of field.
solution.scatterVectorToSection();
+
+ //solution.view("SENSITIVITY SOLUTION"); // DEBUGGING
} // _sensitivitySolve
// ----------------------------------------------------------------------
@@ -1929,8 +1927,7 @@
// if in compression and no opening
const double frictionStress = _friction->calcFriction(slipMag, slipRateMag,
tractionNormal);
- if (tractionShearMag > frictionStress ||
- (tractionShearMag < frictionStress && slipMag > 0.0)) {
+ if (tractionShearMag > frictionStress) {
// traction is limited by friction, so have sliding
// Update slip based on value required to stick versus friction
@@ -1970,14 +1967,13 @@
const double tractionNormal = tractionTpdt[2];
const double tractionShearMag =
sqrt(tractionTpdt[0] * tractionTpdt[0] +
- tractionTpdt[1] * tractionTpdt[1]);
+ tractionTpdt[1] * tractionTpdt[1]);
if (tractionNormal < 0.0 && 0.0 == slip[2]) {
// if in compression and no opening
const double frictionStress =
_friction->calcFriction(slipShearMag, slipRateMag, tractionNormal);
- if (tractionShearMag > frictionStress ||
- (tractionShearMag < frictionStress && slipShearMag > 0.0)) {
+ if (tractionShearMag > frictionStress) {
// traction is limited by friction, so have sliding
// Update slip based on value required to stick versus friction
const double dlp = -(tractionShearMag - frictionStress) * area *
More information about the CIG-COMMITS
mailing list