[cig-commits] r7121 - in short/3D/PyLith/trunk: libsrc/faults unittests/libtests/faults unittests/libtests/faults/data

brad at geodynamics.org brad at geodynamics.org
Sat Jun 9 12:28:28 PDT 2007


Author: brad
Date: 2007-06-09 12:28:28 -0700 (Sat, 09 Jun 2007)
New Revision: 7121

Modified:
   short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
Log:
Fixed more bugs in fault implementation. Eliminated dependence on fault mesh in BruneSlipFn.

Modified: short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc	2007-06-09 14:38:20 UTC (rev 7120)
+++ short/3D/PyLith/trunk/libsrc/faults/BruneSlipFn.cc	2007-06-09 19:28:28 UTC (rev 7121)
@@ -64,7 +64,7 @@
 
   // Create and allocate sections for parameters
   delete _parameters; 
-  _parameters = new topology::FieldsManager(faultMesh);
+  _parameters = new topology::FieldsManager(mesh);
   if (0 == _parameters)
     throw std::runtime_error("Could not create manager for parameters of "
 			     "Brune slip time function.");
@@ -75,24 +75,29 @@
   const ALE::Obj<real_section_type>& finalSlip = 
     _parameters->getReal("final slip");
   assert(!finalSlip.isNull());
-  finalSlip->setFiberDimension(faultMesh->depthStratum(0), spaceDim);
-  faultMesh->allocate(finalSlip);
 
   // Parameter: slip initiation time
   _parameters->addReal("slip time");
   const ALE::Obj<real_section_type>& slipTime = 
     _parameters->getReal("slip time");
   assert(!slipTime.isNull());
-  slipTime->setFiberDimension(faultMesh->depthStratum(0), 1);
-  faultMesh->allocate(slipTime);
 
   // Parameter: peak slip rate
   _parameters->addReal("peak rate");
   const ALE::Obj<real_section_type>& peakRate = 
     _parameters->getReal("peak rate");
   assert(!peakRate.isNull());
-  peakRate->setFiberDimension(faultMesh->depthStratum(0), 1);
-  faultMesh->allocate(peakRate);
+
+  const vert_iterator vBegin = vertices.begin();
+  const vert_iterator vEnd = vertices.end();
+  for (vert_iterator v_iter=vBegin; v_iter != vEnd; ++v_iter) {
+    finalSlip->setFiberDimension(*v_iter, spaceDim);
+    slipTime->setFiberDimension(*v_iter, 1);
+    peakRate->setFiberDimension(*v_iter, 1);
+  } // for
+  mesh->allocate(finalSlip);
+  mesh->allocate(slipTime);
+  mesh->allocate(peakRate);
   
   // Open databases and set query values
   _dbFinalSlip->open();
@@ -135,8 +140,6 @@
   double_array slipData(spaceDim);
   double slipTimeData;
   double peakRateData;
-  const vert_iterator vBegin = vertices.begin();
-  const vert_iterator vEnd = vertices.end();
   for (vert_iterator v_iter=vBegin; v_iter != vEnd; ++v_iter) {
     // Get coordinates of vertex
     const real_section_type::value_type* vCoords = 
@@ -183,9 +186,10 @@
   _dbPeakRate->close();
 
   // Allocate slip field
-  _slipField = new real_section_type(faultMesh->comm(), faultMesh->debug());
-  _slipField->setFiberDimension(faultMesh->depthStratum(0), spaceDim);
-  faultMesh->allocate(_slipField);
+  _slipField = new real_section_type(mesh->comm(), mesh->debug());
+  for (vert_iterator v_iter=vBegin; v_iter != vEnd; ++v_iter)
+    _slipField->setFiberDimension(*v_iter, spaceDim);
+  mesh->allocate(_slipField);
 } // initialize
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-09 14:38:20 UTC (rev 7120)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2007-06-09 19:28:28 UTC (rev 7121)
@@ -308,16 +308,14 @@
   const int spaceDim = _quadrature->spaceDim();
   const int orientationSize = spaceDim*spaceDim;
 
-  // Allocate matrix for cell values (if necessary)
-  _initCellMatrix();
-
   const int numConstraintVert = _quadrature->numBasis();
   const int numCorners = 3*numConstraintVert; // cohesive cell
+  double_array cellMatrix(numCorners*spaceDim * numCorners*spaceDim);
+
   for (Mesh::label_sequence::iterator c_iter=cellsCohesiveBegin;
        c_iter != cellsCohesiveEnd;
        ++c_iter) {
-    _resetCellMatrix();
-
+    cellMatrix = 0.0;
     // Get orientations at cells vertices (only valid at constraint vertices)
     const real_section_type::value_type* cellOrientation = 
       mesh->restrict(_orientation, *c_iter);
@@ -338,10 +336,10 @@
 	for (int kDim=0; kDim < spaceDim; ++kDim) {
 	  const int row = iBasis*spaceDim+iDim;
 	  const int col = kBasis*spaceDim+kDim;
-	  _cellMatrix[row*numCorners*spaceDim+col] =
+	  cellMatrix[row*numCorners*spaceDim+col] =
 	    constraintOrient[iDim*spaceDim+kDim];
-	  _cellMatrix[col*numCorners*spaceDim+row] =
-	    _cellMatrix[row*numCorners*spaceDim+col]; // symmetric
+	  cellMatrix[col*numCorners*spaceDim+row] =
+	    cellMatrix[row*numCorners*spaceDim+col]; // symmetric
 	} // for
 
       // Entries associated with constraint forces applied at node j
@@ -349,10 +347,10 @@
 	for (int kDim=0; kDim < spaceDim; ++kDim) {
 	  const int row = jBasis*spaceDim+jDim;
 	  const int col = kBasis*spaceDim+kDim;
-	  _cellMatrix[row*numCorners*spaceDim+col] =
+	  cellMatrix[row*numCorners*spaceDim+col] =
 	    -constraintOrient[jDim*spaceDim+kDim];
-	  _cellMatrix[col*numCorners*spaceDim+row] =
-	    _cellMatrix[row*numCorners*spaceDim+col]; // symmetric
+	  cellMatrix[col*numCorners*spaceDim+row] =
+	    cellMatrix[row*numCorners*spaceDim+col]; // symmetric
 	} // for
     } // for
     PetscErrorCode err = 
@@ -365,7 +363,7 @@
       mesh->getFactory()->getGlobalOrder(mesh, "default", disp);
     // Update values (do not add)
     err = updateOperator(*mat, mesh, disp, globalOrder,
-			 *c_iter, _cellMatrix, INSERT_VALUES);
+			 *c_iter, &cellMatrix[0], INSERT_VALUES);
     if (err)
       throw std::runtime_error("Update to PETSc Mat failed.");
   } // for
@@ -407,13 +405,17 @@
   typedef std::set<Mesh::point_type>::const_iterator vert_iterator;
 
   assert(0 != _eqsrc);
-
   const ALE::Obj<real_section_type>& slip = _eqsrc->slip(t, _constraintVert);
   assert(!slip.isNull());
   const vert_iterator vBegin = _constraintVert.begin();
   const vert_iterator vEnd = _constraintVert.end();
-  for (vert_iterator v_iter=vBegin; v_iter != vEnd; ++v_iter)
-    disp->updatePoint(*v_iter, slip->restrictPoint(*v_iter));
+  
+  for (vert_iterator v_iter=vBegin; v_iter != vEnd; ++v_iter) {
+    const int fiberDim = slip->getFiberDimension(*v_iter);
+    const real_section_type::value_type* values = slip->restrictPoint(*v_iter);
+    assert(fiberDim == disp->getFiberDimension(*v_iter));
+    disp->updatePoint(*v_iter, values);
+  } // for
 } // setField
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-09 14:38:20 UTC (rev 7120)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2007-06-09 19:28:28 UTC (rev 7121)
@@ -198,7 +198,6 @@
 void
 pylith::faults::TestFaultCohesiveKin::testIntegrateJacobian(void)
 { // testIntegrateJacobian
-#if 0
   ALE::Obj<Mesh> mesh;
   FaultCohesiveKin fault;
   _initialize(&mesh, &fault);
@@ -283,8 +282,6 @@
     } // for
   MatDestroy(jDense);
   MatDestroy(jSparseAIJ);
-#endif
-  CPPUNIT_ASSERT(false);
 } // testIntegrateJacobian
 
 // ----------------------------------------------------------------------
@@ -327,7 +324,6 @@
 void
 pylith::faults::TestFaultCohesiveKin::testSetField(void)
 { // testSetField
-#if 0
   ALE::Obj<Mesh> mesh;
   FaultCohesiveKin fault;
   _initialize(&mesh, &fault);
@@ -371,8 +367,6 @@
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(valsE[index], vals[i], tolerance);
     } // for
   } // for
-#endif
-  CPPUNIT_ASSERT(false);
 } // testSetField
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2007-06-09 14:38:20 UTC (rev 7120)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2007-06-09 19:28:28 UTC (rev 7121)
@@ -111,12 +111,11 @@
 };
 
 const double pylith::faults::CohesiveKinDataLine2::_valsJacobian[] = {
-  0.0,
-  0.0,
-  0.0,
-  0.0,
-  0.0,
-  0.0
+  0.0, 0.0, 0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, 0.0, 0.0,
+  0.0, 0.0, 0.0, 0.0, 0.0,
 };
 
 pylith::faults::CohesiveKinDataLine2::CohesiveKinDataLine2(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2007-06-09 14:38:20 UTC (rev 7120)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2007-06-09 19:28:28 UTC (rev 7121)
@@ -148,6 +148,7 @@
 };
 
 const double pylith::faults::CohesiveKinDataTri3::_valsJacobian[] = {
+  0.0, 0.0, // 2x
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
@@ -156,6 +157,253 @@
   0.0, 0.0,
   0.0, 0.0,
   0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 2y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 3x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 3y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 4x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 4y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 5x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 5y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 6x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 6y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 7x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 7y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 8x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 8y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 9x
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0, // 9y
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
+  0.0, 0.0,
 };
 
 pylith::faults::CohesiveKinDataTri3::CohesiveKinDataTri3(void)



More information about the cig-commits mailing list