[cig-commits] [commit] baagaard/dynrup-new-lagrange: Fix residual calculation for FaultCohesiveDyn for fault opening case. (af8a87f)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Nov 5 15:40:40 PST 2014
Repository : https://github.com/geodynamics/pylith
On branch : baagaard/dynrup-new-lagrange
Link : https://github.com/geodynamics/pylith/compare/f33c75b19fd60eedb2a3405db76a1fee333bb1d7...5b6d812b1612809fea3bd331c4e5af98c25a536a
>---------------------------------------------------------------
commit af8a87fd17d7154186a60bd3926e0a1ba5b2f866
Author: Brad Aagaard <baagaard at usgs.gov>
Date: Mon Jun 9 18:02:45 2014 -0700
Fix residual calculation for FaultCohesiveDyn for fault opening case.
Don't need special case for fault opening case.
>---------------------------------------------------------------
af8a87fd17d7154186a60bd3926e0a1ba5b2f866
libsrc/pylith/faults/FaultCohesiveDyn.cc | 92 +++++++++++++++-----------------
1 file changed, 42 insertions(+), 50 deletions(-)
diff --git a/libsrc/pylith/faults/FaultCohesiveDyn.cc b/libsrc/pylith/faults/FaultCohesiveDyn.cc
index 156c4d7..0784d50 100644
--- a/libsrc/pylith/faults/FaultCohesiveDyn.cc
+++ b/libsrc/pylith/faults/FaultCohesiveDyn.cc
@@ -362,8 +362,11 @@ pylith::faults::FaultCohesiveDyn::integrateResidual(const topology::Field& resid
slipVertex = 0.0;
slipRateVertex = 0.0;
tractionInternalVertex = 0.0;
+ if (slipVertex[indexN] < _zeroTolerance || _openFreeSurf) {
+ tractionInternalVertex = tractionPerturbVertex;
+ } // if
+
for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
- tractionInternalVertex[iDim] = tractionPerturbVertex[iDim];
for (PetscInt jDim = 0; jDim < spaceDim; ++jDim) {
slipVertex[iDim] += orientationArray[ooff+iDim*spaceDim+jDim] * (dispTArray[dtpoff+jDim] + dispTIncrArray[dipoff+jDim] - dispTArray[dtnoff+jDim] - dispTIncrArray[dinoff+jDim]);
@@ -382,6 +385,7 @@ pylith::faults::FaultCohesiveDyn::integrateResidual(const topology::Field& resid
_logger->eventEnd(computeEvent);
_logger->eventBegin(updateEvent);
#endif
+
if (slipVertex[indexN] < _zeroTolerance || !_openFreeSurf) {
// If no opening or flag indicates to still impose tractions
// when fault is open, then assemble contributions into field
@@ -400,62 +404,50 @@ pylith::faults::FaultCohesiveDyn::integrateResidual(const topology::Field& resid
_needNewJacobian = true;
} // if
- tractionRheologyGlobalVertex = 0.0;
- tractionInternalGlobalVertex = 0.0;
- for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
- tractionContactArray[coff+iDim] = tractionRheologyVertex[iDim] - tractionInternalVertex[iDim];
+ } else {
+ tractionRheologyVertex = 0.0;
+ } // if/else
+
+ tractionRheologyGlobalVertex = 0.0;
+ tractionInternalGlobalVertex = 0.0;
+ for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
+ tractionContactArray[coff+iDim] = tractionRheologyVertex[iDim] - tractionInternalVertex[iDim];
- for (PetscInt jDim = 0; jDim < spaceDim; ++jDim) {
- tractionRheologyGlobalVertex[iDim] += orientationArray[ooff+jDim*spaceDim+iDim] * tractionRheologyVertex[jDim];
- tractionInternalGlobalVertex[iDim] += orientationArray[ooff+jDim*spaceDim+iDim] * tractionInternalVertex[jDim];
- } // for
+ for (PetscInt jDim = 0; jDim < spaceDim; ++jDim) {
+ tractionRheologyGlobalVertex[iDim] += orientationArray[ooff+jDim*spaceDim+iDim] * tractionRheologyVertex[jDim];
+ tractionInternalGlobalVertex[iDim] += orientationArray[ooff+jDim*spaceDim+iDim] * tractionInternalVertex[jDim];
} // for
+ } // for
- for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
- const PylithScalar tractionTerm = areaArray[aoff] * (tractionRheologyGlobalVertex[iDim] - tractionInternalGlobalVertex[iDim]);
- residualArray[rnoff+iDim] += tractionTerm;
- residualArray[rpoff+iDim] -= tractionTerm;
+ for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
+ const PylithScalar tractionTerm = areaArray[aoff] * (tractionRheologyGlobalVertex[iDim] - tractionInternalGlobalVertex[iDim]);
+ residualArray[rnoff+iDim] += tractionTerm;
+ residualArray[rpoff+iDim] -= tractionTerm;
- const PylithScalar dispRelVertex = dispTArray[dtpoff+iDim] + dispTIncrArray[dipoff+iDim] - dispTArray[dtnoff+iDim] - dispTIncrArray[dinoff+iDim];
- residualArray[rloff+iDim] += areaArray[aoff] * tractionInternalGlobalVertex[iDim] * dispRelVertex;
- } // for
+ const PylithScalar dispRelVertexComp = dispTArray[dtpoff+iDim] + dispTIncrArray[dipoff+iDim] - dispTArray[dtnoff+iDim] - dispTIncrArray[dinoff+iDim];
+ residualArray[rloff+iDim] += areaArray[aoff] * tractionInternalGlobalVertex[iDim] * dispRelVertexComp;
+ } // for
#if 1 // DEBUGGING
- std::cout << "v_fault: " << v_fault
- << ", v_neg: " << v_negative
- << ", v_pos: " << v_positive
- << ", e_lagrange: " << e_lagrange
- << ", area: " << areaArray[aoff]
- << ", T_f: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionRheologyVertex[iDim]; }
- std::cout << "), T_i: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionInternalVertex[iDim]; }
- std::cout << "), T_fg: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionRheologyGlobalVertex[iDim]; }
- std::cout << "), T_ig: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionInternalGlobalVertex[iDim]; }
- std::cout << "), residual_neg: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << residualArray[rnoff+iDim]; }
- std::cout << "), residual_pos: (";
- for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << residualArray[rpoff+iDim]; }
- std::cout << std::endl;
+ std::cout << "v_fault: " << v_fault
+ << ", v_neg: " << v_negative
+ << ", v_pos: " << v_positive
+ << ", e_lagrange: " << e_lagrange
+ << ", area: " << areaArray[aoff]
+ << ", T_f: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionRheologyVertex[iDim]; }
+ std::cout << "), T_i: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionInternalVertex[iDim]; }
+ std::cout << "), T_fg: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionRheologyGlobalVertex[iDim]; }
+ std::cout << "), T_ig: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << tractionInternalGlobalVertex[iDim]; }
+ std::cout << "), residual_neg: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << residualArray[rnoff+iDim]; }
+ std::cout << "), residual_pos: (";
+ for (int iDim=0; iDim < spaceDim; ++iDim) { std::cout << " " << residualArray[rpoff+iDim]; }
+ std::cout << ")" << std::endl;
#endif
- } else { // opening, normal traction should be zero
- std::cout << "Opening" << std::endl;
- for (PetscInt iDim = 0; iDim < spaceDim; ++iDim) {
- tractionContactArray[coff+iDim] = 0.0;
- } // for
-
- std::ostringstream msg;
- if (fabs(tractionInternalVertex[indexN]) > _zeroTolerance) {
- msg << "ERROR! Fault opening with nonzero traction."
- << ", v_fault: " << v_fault
- << ", opening: " << slipVertex[indexN]
- << ", normal traction: " << tractionInternalVertex[indexN]
- << std::endl;
- throw std::runtime_error(msg.str());
- } // if
- } // if/else
#if defined(DETAILED_EVENT_LOGGING)
_logger->eventEnd(updateEvent);
More information about the CIG-COMMITS
mailing list