[cig-commits] r16395 - short/3D/PyLith/trunk/libsrc/faults

brad at geodynamics.org brad at geodynamics.org
Tue Mar 9 14:09:00 PST 2010


Author: brad
Date: 2010-03-09 14:08:59 -0800 (Tue, 09 Mar 2010)
New Revision: 16395

Modified:
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
Log:
Fixed bugs in applying initial fault tractions in integrateResidualAssembled(). Be careful with updatePoint versus updateAddPoint. Don't apply tractions if fault opening occurs.

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2010-03-09 21:06:46 UTC (rev 16394)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2010-03-09 22:08:59 UTC (rev 16395)
@@ -164,6 +164,9 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   assert(!residualSection.isNull());
 
+  const ALE::Obj<RealSection>& slipSection = _fields->get("slip").section();
+  assert(!slipSection.isNull());
+
   const int numVertices = _cohesiveVertices.size();
   for (int iVertex=0; iVertex < numVertices; ++iVertex) {
     const int v_fault = _cohesiveVertices[iVertex].fault;
@@ -177,22 +180,22 @@
 					&forcesInitialVertex[0],
 					forcesInitialVertex.size());
 
-#if 0
-    residualVertex = forcesInitialVertex;
-    assert(residualVertex.size() == 
-	   residualSection->getFiberDimension(v_positive));
-    residualSection->updatePoint(v_positive, &residualVertex[0]);
-
-    residualVertex *= -1.0;
-    assert(residualVertex.size() == 
-	   residualSection->getFiberDimension(v_negative));
-    residualSection->updatePoint(v_negative, &residualVertex[0]);
-#else
-    residualVertex = forcesInitialVertex;
-    assert(residualVertex.size() == 
-	   residualSection->getFiberDimension(v_lagrange));
-    residualSection->updatePoint(v_lagrange, &residualVertex[0]);
-#endif
+    assert(spaceDim == slipSection->getFiberDimension(v_fault));
+    const double* slipVertex = slipSection->restrictPoint(v_fault);
+    assert(0 != slipVertex);
+    
+    // only apply initial tractions if there is no opening
+    if (0.0 == slipVertex[spaceDim-1]) {
+      residualVertex = forcesInitialVertex;
+      assert(residualVertex.size() == 
+	     residualSection->getFiberDimension(v_positive));
+      residualSection->updateAddPoint(v_positive, &residualVertex[0]);
+      
+      residualVertex *= -1.0;
+      assert(residualVertex.size() == 
+	     residualSection->getFiberDimension(v_negative));
+      residualSection->updateAddPoint(v_negative, &residualVertex[0]);
+    } // if
   } // for
 
   PetscLogFlops(numVertices*spaceDim);
@@ -1313,7 +1316,7 @@
       tractionsVertex[i] = dispTVertex[i] / areaVertex[0];
 
     assert(tractionsVertex.size() == tractionsSection->getFiberDimension(v_fault));
-    tractionsSection->updateAddPoint(v_fault, &tractionsVertex[0]);
+    tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
   } // for
 
   PetscLogFlops(numVertices * (1 + fiberDim) );
@@ -1395,7 +1398,7 @@
     
     assert(tractionsVertexFault.size() == 
 	   tractionsSection->getFiberDimension(v_fault));
-    tractionsSection->updateAddPoint(v_fault, &tractionsVertexFault[0]);
+    tractionsSection->updatePoint(v_fault, &tractionsVertexFault[0]);
   } // for
 
   PetscLogFlops(numVertices * (1 + spaceDim) );



More information about the CIG-COMMITS mailing list