[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