[cig-commits] r15569 - short/3D/PyLith/branches/pylith-friction/libsrc/faults

surendra at geodynamics.org surendra at geodynamics.org
Fri Aug 21 11:59:49 PDT 2009


Author: surendra
Date: 2009-08-21 11:59:49 -0700 (Fri, 21 Aug 2009)
New Revision: 15569

Modified:
   short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDyn.cc
Log:
Fixed some bugs and added some more debugging output.

Modified: short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDyn.cc	2009-08-20 23:05:43 UTC (rev 15568)
+++ short/3D/PyLith/branches/pylith-friction/libsrc/faults/FaultCohesiveDyn.cc	2009-08-21 18:59:49 UTC (rev 15569)
@@ -101,6 +101,9 @@
   assert(0 != _faultMesh);
   assert(0 != _fields);
 
+  // debugging
+  residual.view("RESIDUAL BEFORE FRICTION");
+
   // Get cell geometry information that doesn't depend on cell
   const int numQuadPts = _quadrature->numQuadPts();
   const double_array& quadWts = _quadrature->quadWts();
@@ -141,6 +144,12 @@
   assert(!dispSection.isNull());
   RestrictVisitor dispVisitor(*dispSection,
 			      dispCell.size(), &dispCell[0]);
+  double_array dispIncrCell(numCornersCohesive*spaceDim);
+  const ALE::Obj<RealSection>& dispIncrSection = fields->get("dispIncr(t->t+dt)").section();
+  assert(!dispIncrSection.isNull());
+  RestrictVisitor dispIncrVisitor(*dispIncrSection,
+				  dispIncrCell.size(), &dispIncrCell[0]);
+  double_array dispTpdtCell(numCornersCohesive*spaceDim);
   
   // Get initial tractions (if exist).
   double_array tractionInitialFault(numQuadPts*spaceDim);
@@ -189,7 +198,13 @@
     // Get displacements at vertices of cohesive cell.
     dispVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, dispVisitor);
+    dispIncrVisitor.clear();
+    sieveMesh->restrictClosure(*c_iter, dispIncrVisitor);
 
+    // Compute current estimate of displacement at time t+dt using
+    // solution increment.
+    dispTpdtCell = dispCell + dispIncrCell;
+
     // Get current forces at vertices of cohesive cell (current residual).
     forcesCurrentVisitor.clear();
     sieveMesh->restrictClosure(*c_iter, forcesCurrentVisitor);
@@ -211,7 +226,7 @@
       const double wt = quadWts[iQuad] * jacobianDet[iQuad];
 
       // Compute slip at current quad pt in global coordinate system.
-      // In: dispCell [2*numBasis*spaceDim] (negative side then positive side??)
+      // In: dispTpdtCell [2*numBasis*spaceDim] (negative side then positive side??)
       //     basis [numQuadpts*numBasis]
       // Out: slipGlobal [spaceDim]
       // Use basis functions to compute displacement at quadrature point and
@@ -222,9 +237,9 @@
       for (int iBasis=0; iBasis < numBasis; ++iBasis) {
 	for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
 	  dispQuadPt[iSpace] += basis[iQuad*numBasis+iBasis]
-	    *dispCell[iBasis*spaceDim+iSpace];
+	    *dispTpdtCell[iBasis*spaceDim+iSpace];
 	  dispQuadPt[spaceDim+iSpace] += basis[iQuad*numBasis+iBasis]
-	    *dispCell[(iBasis+numBasis)*spaceDim+iSpace];
+	    *dispTpdtCell[(iBasis+numBasis)*spaceDim+iSpace];
 	}
       }
       for (int iSpace=0; iSpace < spaceDim; ++iSpace) {
@@ -309,13 +324,13 @@
       { // switch
       case 1 : {
 	if (tractionTotalFault[0] < 0) {
-	  frictionFault[0] = tractionCurrentFault[0]/2;
+	  frictionFault[0] = tractionCurrentFault[0];
 	    }
 	break;
       } // case 1
       case 2 : {
 	if (tractionTotalFault[1] < 0) {
-	  frictionFault[1] = tractionCurrentFault[1]/2;
+	  frictionFault[1] = tractionCurrentFault[1];
 	  frictionFault[0] = -mu * tractionTotalFault[1];
 	  if (frictionFault[0] > tractionCurrentFault[0])
 	    frictionFault[0] = tractionCurrentFault[0];
@@ -324,7 +339,7 @@
       } // case 2
       case 3 : {
 	if (tractionTotalFault[2] < 0) {
-	  frictionFault[2] = tractionCurrentFault[2]/2;
+	  frictionFault[2] = tractionCurrentFault[2];
 	  frictionFault[1] = -mu * tractionTotalFault[2] * tractionTotalFault[1] / sqrt(pow(tractionTotalFault[1],2) +pow(tractionTotalFault[0],2));
 	  frictionFault[0] = -mu * tractionTotalFault[2] * tractionTotalFault[0] / sqrt(pow(tractionTotalFault[1],2) +pow(tractionTotalFault[0],2));
 	
@@ -339,7 +354,7 @@
       default :
 	std::cerr << "Bad spatial dimension '" << spaceDim << "'." << std::endl;
 	assert(0);
-	throw std::logic_error("Bad spatial dimension in Neumann.");
+	throw std::logic_error("Bad spatial dimension in Friction.");
       } // switch
 
       
@@ -360,19 +375,24 @@
 	    *orientationCell[iQuad*spaceDim*spaceDim+iSpace*spaceDim+jSpace];
 	}
       }
+      tractionCell /= 2.0;
       
-    std::cout << "wt: " << wt
-	      << ", dispQuadPt (-): (" << dispQuadPt[0] << "," << dispQuadPt[1] << ")\n"
-	      << ", dispQuadPt (+): (" << dispQuadPt[spaceDim+0] << "," << dispQuadPt[spaceDim+1] << ")\n"
-	      << ", slipGlobal: (" << slipGlobal[0] << "," << slipGlobal[1] << ")\n"
-	      << ", slipFault:  (" << slipFault[0] << "," << slipFault[1] << ")\n"
-	      << ", forcesQuadPt (-): (" << forcesQuadPt[0] << "," << forcesQuadPt[1] << ")\n"
-	      << ", forcesQuadPt (+): (" << forcesQuadPt[spaceDim+0] << "," << forcesQuadPt[spaceDim+1] << ")\n"
-	      << ", tractionCurrentGlobal: (" << tractionCurrentGlobal[0] << "," << tractionCurrentGlobal[1] << ")\n"
-	      << ", tractionCurrentFault: (" << tractionCurrentFault[0] << "," << tractionCurrentFault[1] << ")\n"
-	      << ", tractionTotalFault: (" << tractionTotalFault[0] << "," << tractionTotalFault[1] << ")\n"
-	      << ", frictionFault: (" << frictionFault[0] << "," << frictionFault[1] << ")\n"
-	      << ", tractionCell: (" << tractionCell[iQuad*spaceDim+0] << "," << tractionCell[iQuad*spaceDim+1] << ")\n"
+    std::cout << " wt: " << wt
+	      << " dispTpdtCell (-): (" << dispTpdtCell[0*spaceDim+0] << "," << dispTpdtCell[0*spaceDim+1] << ")\n"
+	      << "                   (" << dispTpdtCell[1*spaceDim+0] << "," << dispTpdtCell[1*spaceDim+1] << ")\n"
+	      << " dispTpdtCell (+): (" << dispTpdtCell[2*spaceDim+0] << "," << dispTpdtCell[2*spaceDim+1] << ")\n"
+	      << "                   (" << dispTpdtCell[3*spaceDim+0] << "," << dispTpdtCell[3*spaceDim+1] << ")\n"
+	      << " dispQuadPt (-): (" << dispQuadPt[0] << "," << dispQuadPt[1] << ")\n"
+	      << " dispQuadPt (+): (" << dispQuadPt[spaceDim+0] << "," << dispQuadPt[spaceDim+1] << ")\n"
+	      << " slipGlobal: (" << slipGlobal[0] << "," << slipGlobal[1] << ")\n"
+	      << " slipFault:  (" << slipFault[0] << "," << slipFault[1] << ")\n"
+	      << " forcesQuadPt (-): (" << forcesQuadPt[0] << "," << forcesQuadPt[1] << ")\n"
+	      << " forcesQuadPt (+): (" << forcesQuadPt[spaceDim+0] << "," << forcesQuadPt[spaceDim+1] << ")\n"
+	      << " tractionCurrentGlobal: (" << tractionCurrentGlobal[0] << "," << tractionCurrentGlobal[1] << ")\n"
+	      << " tractionCurrentFault: (" << tractionCurrentFault[0] << "," << tractionCurrentFault[1] << ")\n"
+	      << " tractionTotalFault: (" << tractionTotalFault[0] << "," << tractionTotalFault[1] << ")\n"
+	      << " frictionFault: (" << frictionFault[0] << "," << frictionFault[1] << ")\n"
+	      << " tractionCell: (" << tractionCell[iQuad*spaceDim+0] << "," << tractionCell[iQuad*spaceDim+1] << ")\n"
 	      << std::endl;
 
 
@@ -398,6 +418,9 @@
 
     PetscLogFlops(numQuadPts*(0)); // :TODO: Count number of operations
   } // for
+
+  // debugging
+  residual.view("RESIDUAL AFTER FRICTION");
 } // integrateResidual
 
 // ----------------------------------------------------------------------



More information about the CIG-COMMITS mailing list