[cig-commits] r17936 - short/3D/PyLith/branches/v1.5-stable/libsrc/faults

brad at geodynamics.org brad at geodynamics.org
Mon Feb 21 20:34:08 PST 2011


Author: brad
Date: 2011-02-21 20:34:08 -0800 (Mon, 21 Feb 2011)
New Revision: 17936

Modified:
   short/3D/PyLith/branches/v1.5-stable/libsrc/faults/FaultCohesiveDyn.cc
Log:
Fixed bug in computing adjust lumped solution for spontaneous rupture (need to update Loagrange multplier and slip even even if vertex is not global; these are not assembled but the adjustment to the solution is).

Modified: short/3D/PyLith/branches/v1.5-stable/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/v1.5-stable/libsrc/faults/FaultCohesiveDyn.cc	2011-02-22 04:13:21 UTC (rev 17935)
+++ short/3D/PyLith/branches/v1.5-stable/libsrc/faults/FaultCohesiveDyn.cc	2011-02-22 04:34:08 UTC (rev 17936)
@@ -754,10 +754,6 @@
     const int v_negative = _cohesiveVertices[iVertex].negative;
     const int v_positive = _cohesiveVertices[iVertex].positive;
 
-    // Compute contribution only if Lagrange constraint is local.
-    if (!globalOrder->isLocal(v_lagrange))
-      continue;
-
 #if defined(DETAILED_EVENT_LOGGING)
     _logger->eventBegin(restrictEvent);
 #endif
@@ -950,15 +946,21 @@
     _logger->eventBegin(updateEvent);
 #endif
 
-    // Adjust displacements to account for Lagrange multiplier values
-    // (assumed to be zero in perliminary solve).
-    assert(dispTIncrVertexN.size() == 
-	   dispTIncrAdjSection->getFiberDimension(v_negative));
-    dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+    // Compute contribution to adjusting solution only if Lagrange
+    // constraint is local (the adjustment is assembled across processors).
+    if (globalOrder->isLocal(v_lagrange)) {
+      // Adjust displacements to account for Lagrange multiplier values
+      // (assumed to be zero in perliminary solve).
+      assert(dispTIncrVertexN.size() == 
+	     dispTIncrAdjSection->getFiberDimension(v_negative));
+      dispTIncrAdjSection->updateAddPoint(v_negative, &dispTIncrVertexN[0]);
+      
+      assert(dispTIncrVertexP.size() == 
+	     dispTIncrAdjSection->getFiberDimension(v_positive));
+      dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+    } // if
 
-    assert(dispTIncrVertexP.size() == 
-	   dispTIncrAdjSection->getFiberDimension(v_positive));
-    dispTIncrAdjSection->updateAddPoint(v_positive, &dispTIncrVertexP[0]);
+    // The Lagrange multiplier and slip are NOT assembled across processors.
 
     // Set Lagrange multiplier value. Value from preliminary solve is
     // bogus due to artificial diagonal entry of 1.0.



More information about the CIG-COMMITS mailing list