[cig-commits] r18966 - in short/3D/PyLith/branches/v1.6-revisedfault: libsrc/pylith/faults unittests/libtests/faults
brad at geodynamics.org
brad at geodynamics.org
Fri Sep 23 10:57:20 PDT 2011
Author: brad
Date: 2011-09-23 10:57:19 -0700 (Fri, 23 Sep 2011)
New Revision: 18966
Modified:
short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveLagrange.cc
short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveKin.cc
Log:
Updated unit test for fault tractions.
Modified: short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveLagrange.cc 2011-09-23 17:26:45 UTC (rev 18965)
+++ short/3D/PyLith/branches/v1.6-revisedfault/libsrc/pylith/faults/FaultCohesiveLagrange.cc 2011-09-23 17:57:19 UTC (rev 18966)
@@ -1994,6 +1994,10 @@
const ALE::Obj<RealSection>& dispTSection = dispT.section();
assert(!dispTSection.isNull());
+ const ALE::Obj<RealSection>& orientationSection =
+ _fields->get("orientation").section();
+ assert(!orientationSection.isNull());
+
// Allocate buffer for tractions field (if necessary).
const ALE::Obj<RealSection>& tractionsSection = tractions->section();
if (tractionsSection.isNull()) {
@@ -2016,16 +2020,20 @@
const int v_fault = _cohesiveVertices[iVertex].fault;
assert(spaceDim == dispTSection->getFiberDimension(v_lagrange));
- assert(spaceDim == tractionsSection->getFiberDimension(v_fault));
-
const double* dispTVertex = dispTSection->restrictPoint(v_lagrange);
assert(0 != dispTVertex);
- // :TODO: FIX THIS (orientation: global to fault)
- for (int i = 0; i < spaceDim; ++i)
- tractionsVertex[i] = dispTVertex[i];
+ assert(spaceDim*spaceDim == orientationSection->getFiberDimension(v_fault));
+ const double* orientationVertex = orientationSection->restrictPoint(v_fault);
+ assert(orientationVertex);
- assert(tractionsVertex.size() == tractionsSection->getFiberDimension(v_fault));
+ tractionsVertex = 0.0;
+ for (int i=0; i < spaceDim; ++i)
+ for (int j=0; j < spaceDim; ++j)
+ tractionsVertex[i] += orientationVertex[i*spaceDim+j] * dispTVertex[j];
+
+ assert(tractionsVertex.size() ==
+ tractionsSection->getFiberDimension(v_fault));
tractionsSection->updatePoint(v_fault, &tractionsVertex[0]);
} // for
Modified: short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveKin.cc 2011-09-23 17:26:45 UTC (rev 18965)
+++ short/3D/PyLith/branches/v1.6-revisedfault/unittests/libtests/faults/TestFaultCohesiveKin.cc 2011-09-23 17:57:19 UTC (rev 18966)
@@ -725,7 +725,6 @@
{ // testCalcTractionsChange
CPPUNIT_ASSERT(_data);
CPPUNIT_ASSERT(_data->fieldT);
- CPPUNIT_ASSERT(_data->area);
topology::Mesh mesh;
FaultCohesiveKin fault;
@@ -805,9 +804,20 @@
const double* dispVertex = dispSection->restrictPoint(meshVertex);
CPPUNIT_ASSERT(0 != dispVertex);
- const double scale = 1.0 / _data->area[iVertex];
+ const double* orientationVertex =
+ &_data->orientation[iVertex*spaceDim*spaceDim];
+
for (int iDim=0; iDim < spaceDim; ++iDim) {
- const double tractionE = dispVertex[iDim] * scale;
+ double tractionE = 0.0;
+ for (int jDim=0; jDim < spaceDim; ++jDim)
+ tractionE += orientationVertex[iDim*spaceDim+jDim] * dispVertex[jDim];
+#if 0 // DEBUGGING
+ std::cout << "vertex: " << *v_iter
+ << ", iDim: " << iDim
+ << ", tractionE: " << tractionE
+ << ", traction: " << tractionsVertex[iDim]
+ << std::endl;
+#endif
if (tractionE > 1.0)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, tractionsVertex[iDim]/tractionE,
tolerance);
More information about the CIG-COMMITS
mailing list