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

brad at geodynamics.org brad at geodynamics.org
Sun Mar 30 12:27:52 PDT 2008


Author: brad
Date: 2008-03-30 12:27:52 -0700 (Sun, 30 Mar 2008)
New Revision: 11639

Modified:
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
   short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
   short/3D/PyLith/trunk/pylith/meshio/OutputFaultKin.py
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
Log:
Fixed calculation of change in tractions. Switched to projecting tractions to vertices (cell field -> vertex field). Added area field as member of FaultCohesiveKin. Added corresponding unit tests.

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDyn.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -148,7 +148,7 @@
 { // cellField
   // Should not reach this point if requested field was found
   std::ostringstream msg;
-  msg << "Request for unknown vertex field '" << name
+  msg << "Request for unknown cell field '" << name
       << "' for fault '" << label() << ".";
   throw std::runtime_error(msg.str());
 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -91,6 +91,9 @@
   // Compute orientation at vertices in fault mesh.
   _calcOrientation(upDir, normalDir);
 
+  // Compute tributary area for each vertex in fault mesh.
+  _calcArea();
+
   _eqsrc->initialize(_faultMesh, cs);
 } // initialize
 
@@ -455,6 +458,11 @@
     _bufferVertexScalar = _eqsrc->slipTime();
     *fieldType = SCALAR_FIELD;
     return _bufferVertexScalar;
+  } else if (0 == strcasecmp("traction_change", name)) {
+    *fieldType = VECTOR_FIELD;
+    const ALE::Obj<real_section_type>& solution = fields->getSolution();
+    _calcTractionsChange(&_bufferVertexVector, solution);
+    return _bufferVertexVector;
 
   } else {
     std::ostringstream msg;
@@ -470,40 +478,19 @@
 // ----------------------------------------------------------------------
 // Get cell field associated with integrator.
 const ALE::Obj<pylith::real_section_type>&
-pylith::faults::FaultCohesiveKin::cellField(
-				    VectorFieldEnum* fieldType,
-				    const char* name,
-				    const ALE::Obj<Mesh>& mesh,
-				    topology::FieldsManager* fields)
+pylith::faults::FaultCohesiveKin::cellField(VectorFieldEnum* fieldType,
+					    const char* name,
+					    const ALE::Obj<Mesh>& mesh,
+					    topology::FieldsManager* fields)
 { // cellField
-  assert(!_faultMesh.isNull());
-  assert(!_orientation.isNull());
-  assert(0 != fields);
-  assert(0 != _eqsrc);
-
-  const int cohesiveDim = _faultMesh->getDimension();
-
-  if (0 == strcasecmp("traction_change", name)) {
-    _allocateBufferCellOther();
-    *fieldType = OTHER_FIELD;
-    const ALE::Obj<real_section_type>& solution = fields->getSolution();
-    _calcTractionsChange(&_bufferCellOther, solution);
-    return _bufferCellOther;
-  } else {
-    std::ostringstream msg;
-    msg << "Request for unknown cell field '" << name
-	<< "' for fault '" << label() << "'.";
-    throw std::runtime_error(msg.str());
-  } // else
-
   // Should not reach this point if requested field was found
   std::ostringstream msg;
-  msg << "Request for unknown vertex field '" << name
-      << "' for fault '" << label() << "'.";
+  msg << "Request for unknown cell field '" << name
+      << "' for fault '" << label() << ".";
   throw std::runtime_error(msg.str());
 
   // Return generic section to satisfy member function definition.
-  return _bufferCellOther;
+  //return _outputCellVector;
 } // cellField
 
 // ----------------------------------------------------------------------
@@ -545,7 +532,8 @@
   assert(cohesiveDim == _quadrature->cellDim());
   assert(spaceDim == _quadrature->spaceDim());
 
-  // Loop over cohesive cells, computing orientation at constraint vertices
+  // Loop over cohesive cells, computing orientation weighted by
+  // jacobian at constraint vertices
   const int numBasis = _quadrature->numBasis();
   const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
   const double_array& verticesRef = cellGeometry.vertices();
@@ -792,6 +780,77 @@
 } // _calcConditioning
 
 // ----------------------------------------------------------------------
+void
+pylith::faults::FaultCohesiveKin::_calcArea(void)
+{ // _calcArea
+  assert(!_faultMesh.isNull());
+
+  // Get vertices in fault mesh
+  const ALE::Obj<Mesh::label_sequence>& vertices = 
+    _faultMesh->depthStratum(0);
+  const Mesh::label_sequence::iterator verticesEnd = vertices->end();
+  const int numVertices = vertices->size();
+
+  _area = new real_section_type(_faultMesh->comm(), 
+				_faultMesh->debug());
+  assert(!_area.isNull());
+  _area->setFiberDimension(vertices, 1);
+  _faultMesh->allocate(_area);
+  
+  // Get fault cells (1 dimension lower than top-level cells)
+  const ALE::Obj<Mesh::label_sequence>& cells = 
+    _faultMesh->heightStratum(0);
+  assert(!cells.isNull());
+  const Mesh::label_sequence::iterator cellsEnd = cells->end();
+
+  // Get section containing coordinates of vertices
+  const ALE::Obj<real_section_type>& coordinates = 
+    _faultMesh->getRealSection("coordinates");
+  assert(!coordinates.isNull());
+
+  // Containers for area information
+  const int cellDim = _quadrature->cellDim();
+  const int numBasis = _quadrature->numBasis();
+  const int numQuadPts = _quadrature->numQuadPts();
+  const int spaceDim = _quadrature->spaceDim();
+  const feassemble::CellGeometry& cellGeometry = _quadrature->refGeometry();
+  const double_array& quadWts = _quadrature->quadWts();
+  assert(quadWts.size() == numQuadPts);
+  const int jacobianSize = (cellDim > 0) ? spaceDim * cellDim : 1;
+  double_array jacobian(jacobianSize);
+  double jacobianDet = 0;
+  double_array cellArea(numBasis);
+  double_array cellVertices(numBasis*spaceDim);
+
+  // Loop over cells in fault mesh, compute area
+  for(Mesh::label_sequence::iterator c_iter = cells->begin();
+      c_iter != cellsEnd;
+      ++c_iter) {
+    _quadrature->computeGeometry(_faultMesh, coordinates, *c_iter);
+    cellArea = 0.0;
+    
+    // Get cell geometry information that depends on cell
+    const double_array& basis = _quadrature->basis();
+    const double_array& jacobianDet = _quadrature->jacobianDet();
+
+    // Compute action for traction bc terms
+    for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+      const double wt = quadWts[iQuad] * jacobianDet[iQuad];
+      for (int iBasis=0; iBasis < numBasis; ++iBasis) {
+        const double dArea = wt*basis[iQuad*numBasis+iBasis];
+	cellArea[iBasis] += dArea;
+      } // for
+    } // for
+    _faultMesh->updateAdd(_area, *c_iter, &cellArea[0]);
+
+    PetscLogFlopsNoCheck( numQuadPts*(1+numBasis*2) );
+  } // for
+
+  // Assemble area information
+  ALE::Distribution<Mesh>::completeSection(_faultMesh, _area);
+} // _calcArea
+
+// ----------------------------------------------------------------------
 // Compute change in tractions on fault surface using solution.
 void
 pylith::faults::FaultCohesiveKin::_calcTractionsChange(
@@ -803,37 +862,44 @@
   assert(!solution.isNull());
   assert(!_faultMesh.isNull());
   assert(!_pseudoStiffness.isNull());
-  assert(0 != _quadrature);
+  assert(!_area.isNull());
 
-  const ALE::Obj<Mesh::label_sequence>& cells = 
-    _faultMesh->heightStratum(0);
-  const Mesh::label_sequence::iterator cellsEnd = cells->end();
-  
-  const int numBasis = _quadrature->numBasis();
-  const int spaceDim = _quadrature->spaceDim();
-  const int numQuadPts = _quadrature->numQuadPts();
-  const double_array& basis = _quadrature->basis();
+  const ALE::Obj<Mesh::label_sequence>& vertices = 
+    _faultMesh->depthStratum(0);
+  assert(!vertices.isNull());
+  const Mesh::label_sequence::iterator verticesEnd = vertices->end();
+  const int numVertices = vertices->size();
 
-  double_array solutionCell(numBasis*spaceDim);
-  double_array stiffnessCell(numBasis);
-  double_array tractionsCell(numQuadPts*spaceDim);
+  const int fiberDim = solution->getFiberDimension(*vertices->begin());
+  double_array tractionValues(fiberDim);
 
-  int count = 0;
-  for (Mesh::label_sequence::iterator c_iter=cells->begin();
-       c_iter != cellsEnd;
-       ++c_iter, ++count) {
-    _faultMesh->restrict(solution, *c_iter, 
-			 &solutionCell[0], solutionCell.size());
-    _faultMesh->restrict(_pseudoStiffness, *c_iter, 
-			 &stiffnessCell[0], stiffnessCell.size());
-    for (int iQuad=0; iQuad < numQuadPts; ++iQuad)
-      for (int iBasis=0; iBasis < numBasis; ++iBasis)
-	for (int iDim=0; iDim < spaceDim; ++iDim)
-	  tractionsCell[iQuad*spaceDim+iDim] = basis[iBasis] *
-	    solutionCell[iBasis*spaceDim+iDim] * stiffnessCell[iBasis];
-    (*tractions)->updatePoint(*c_iter, &tractionsCell[0]);
+  for (Mesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter) {
+    assert(fiberDim == solution->getFiberDimension(*v_iter));
+    assert(fiberDim == (*tractions)->getFiberDimension(*v_iter));
+    assert(1 == _pseudoStiffness->getFiberDimension(*v_iter));
+    assert(1 == _area->getFiberDimension(*v_iter));
+
+    const real_section_type::value_type* solutionValues =
+      solution->restrictPoint(*v_iter);
+    assert(0 != solutionValues);
+    const real_section_type::value_type* pseudoStiffValue = 
+      _pseudoStiffness->restrictPoint(*v_iter);
+    assert(0 != _pseudoStiffness);
+    const real_section_type::value_type* areaValue = 
+      _area->restrictPoint(*v_iter);
+    assert(0 != _area);
+
+    const double scale = pseudoStiffValue[0] / areaValue[0];
+    for (int i=0; i < fiberDim; ++i)
+      tractionValues[i] = solutionValues[i] * scale;
+
+    (*tractions)->updatePoint(*v_iter, &tractionValues[0]);
   } // for
 
+  PetscLogFlopsNoCheck(numVertices * (1 + fiberDim) );
+
   //solution->view("SOLUTION");
   //(*tractions)->view("TRACTIONS");
 } // _calcTractionsChange
@@ -871,24 +937,5 @@
   } // if  
 } // _allocateBufferVertexVector
 
-// ----------------------------------------------------------------------
-// Allocate vector field for output of cell information.
-void
-pylith::faults::FaultCohesiveKin::_allocateBufferCellOther(void)
-{ // _allocateBufferCellOther
-  assert(0 != _quadrature);
-  const int numQuadPts = _quadrature->numQuadPts();
-  const int spaceDim = _quadrature->spaceDim();
-  const int fiberDim = numQuadPts * spaceDim;
-  if (_bufferCellOther.isNull()) {
-    _bufferCellOther = new real_section_type(_faultMesh->comm(), 
-					      _faultMesh->debug());
-    const ALE::Obj<Mesh::label_sequence>& cells = 
-      _faultMesh->heightStratum(0);
-    _bufferCellOther->setFiberDimension(cells, fiberDim);
-    _faultMesh->allocate(_bufferCellOther);
-  } // if  
-} // _allocateBufferCellOther
 
-
 // End of file 

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveKin.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -193,6 +193,9 @@
   void _calcConditioning(const spatialdata::geocoords::CoordSys* cs,
 			 spatialdata::spatialdb::SpatialDB* matDB);
 
+  /// Calculate fault area field.
+  void _calcArea(void);
+
   /** Compute change in tractions on fault surface using solution.
    *
    * @param tractions Field for tractions.
@@ -207,9 +210,6 @@
   /// Allocate vector field for output of vertex information.
   void _allocateBufferVertexVector(void);
 
-  /// Allocate other field for output of cell information.
-  void _allocateBufferCellOther(void);
-
   // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :
 
@@ -229,6 +229,9 @@
   /// Jacobian matrix.
   ALE::Obj<real_section_type> _pseudoStiffness;
 
+  /// Field over fault mesh vertices of area associated with each vertex.
+  ALE::Obj<real_section_type> _area;
+
   /// Field over the fault mesh vertices of orientation of fault
   /// surface.
   ALE::Obj<real_section_type> _orientation;
@@ -250,9 +253,6 @@
   /// Vector field for vertex information over fault mesh.
   ALE::Obj<real_section_type> _bufferVertexVector;
 
-  /// Vector field for cell information over fault mesh.
-  ALE::Obj<real_section_type> _bufferCellOther;
-
 }; // class FaultCohesiveKin
 
 #include "FaultCohesiveKin.icc" // inline methods

Modified: short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py
===================================================================
--- short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/pylith/faults/FaultCohesiveKin.py	2008-03-30 19:27:52 UTC (rev 11639)
@@ -76,10 +76,10 @@
            {'info': ["normal_dir",
                      "final_slip",
                      "slip_time"],
-            'data': ["slip"]},
+            'data': ["slip", "traction_change"]},
          'cell': \
            {'info': [],
-            'data': ["traction_change"]}}
+            'data': []}}
     return
 
 

Modified: short/3D/PyLith/trunk/pylith/meshio/OutputFaultKin.py
===================================================================
--- short/3D/PyLith/trunk/pylith/meshio/OutputFaultKin.py	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/pylith/meshio/OutputFaultKin.py	2008-03-30 19:27:52 UTC (rev 11639)
@@ -41,8 +41,6 @@
     ## \b Properties
     ## @li \b vertex_info_fields Names of vertex info fields to output.
     ## @li \b vertex_data_fields Names of vertex data fields to output.
-    ## @li \b cell_info_fields Names of cell info fields to output.
-    ## @li \b cell_data_fields Names of cell data fields to output.
     ##
     ## \b Facilities
     ## @li None
@@ -56,17 +54,9 @@
     vertexInfoFields.meta['tip'] = "Names of vertex info fields to output."
 
     vertexDataFields = pyre.inventory.list("vertex_data_fields", 
-                                           default=["slip"])
+                                           default=["slip","traction_change"])
     vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
 
-    cellInfoFields = pyre.inventory.list("cell_info_fields", default=[])
-    cellInfoFields.meta['tip'] = "Names of cell info fields to output."
-
-    cellDataFields = pyre.inventory.list("cell_data_fields", 
-                                         default=["traction_change"])
-    cellDataFields.meta['tip'] = "Names of cell data fields to output."
-
-
   # PUBLIC METHODS /////////////////////////////////////////////////////
 
   def __init__(self, name="outputfaultkin"):
@@ -86,8 +76,6 @@
     OutputManager._configure(self)
     self.vertexInfoFields = self.inventory.vertexInfoFields
     self.vertexDataFields = self.inventory.vertexDataFields
-    self.cellInfoFields = self.inventory.cellInfoFields
-    self.cellDataFields = self.inventory.cellDataFields
     return
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -150,6 +150,22 @@
     } // for
   } // for
 
+  // Check area
+  iVertex = 0;
+  for (Mesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    const int fiberDim = fault._area->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(1, fiberDim);
+    const real_section_type::value_type* vertexArea = 
+      fault._area->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vertexArea);
+
+    const double tolerance = 1.0e-06;
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->area[iVertex], vertexArea[0],
+				 tolerance);
+  } // for
+
   // Check pairing of constraint vertices with cells
   iVertex = 0;
   for (Mesh::label_sequence::iterator v_iter=vertices->begin();
@@ -389,6 +405,83 @@
 } // testIntegrateJacobian
 
 // ----------------------------------------------------------------------
+// Test integrateJacobian().
+void
+pylith::faults::TestFaultCohesiveKin::testCalcTractionsChange(void)
+{ // testCalcTractionsChange
+  ALE::Obj<Mesh> mesh;
+  FaultCohesiveKin fault;
+  _initialize(&mesh, &fault);
+
+  // Setup fields
+  topology::FieldsManager fields(mesh);
+  fields.addReal("solution");
+  fields.solutionField("solution");
+  
+  const int spaceDim = _data->spaceDim;
+  const ALE::Obj<real_section_type>& solution = fields.getReal("solution");
+  { // setup solution
+    CPPUNIT_ASSERT(!solution.isNull());
+    solution->setFiberDimension(mesh->depthStratum(0), spaceDim);
+    mesh->allocate(solution);
+    solution->zero();
+    fields.copyLayout("solution");
+    
+    const ALE::Obj<Mesh::label_sequence>& vertices = mesh->depthStratum(0);
+    CPPUNIT_ASSERT(!vertices.isNull());
+    const Mesh::label_sequence::iterator verticesEnd = vertices->end();
+    int iVertex = 0;
+    for (Mesh::label_sequence::iterator v_iter=vertices->begin();
+	 v_iter != verticesEnd;
+	 ++v_iter, ++iVertex) {
+      solution->updatePoint(*v_iter, &_data->fieldT[iVertex*spaceDim]);
+    } // for
+  } // setup solution
+
+  ALE::Obj<real_section_type> tractions =
+    new real_section_type(fault._faultMesh->comm(), fault._faultMesh->debug());
+  CPPUNIT_ASSERT(!tractions.isNull());
+  const ALE::Obj<Mesh::label_sequence>& vertices = 
+    fault._faultMesh->depthStratum(0);
+  const Mesh::label_sequence::iterator verticesEnd = vertices->end();
+  tractions->setFiberDimension(vertices, spaceDim);
+  fault._faultMesh->allocate(tractions);
+  
+  fault._calcTractionsChange(&tractions, solution);
+  tractions->view("TRACTIONS");
+
+  int iVertex = 0;
+  const double tolerance = 1.0e-06;
+  for (Mesh::label_sequence::iterator v_iter=vertices->begin();
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    int fiberDim = tractions->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+    const real_section_type::value_type* vertexTractions = 
+      tractions->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vertexTractions);
+
+    fiberDim = solution->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+    const real_section_type::value_type* vertexSolution = 
+      solution->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != vertexSolution);
+
+    const double scale = _data->pseudoStiffness / _data->area[iVertex];
+    for (int iDim=0; iDim < spaceDim; ++iDim) {
+      const double tractionE = vertexSolution[iDim] * scale;
+      std::cout << "iVertex: " << iVertex << ", tractionE: " << tractionE << ", traction: " << vertexTractions[iDim] << std::endl;
+      if (tractionE > 1.0) 
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, vertexTractions[iDim]/tractionE,
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(tractionE, vertexTractions[iDim],
+				     tolerance);
+    } // for
+  } // for
+} // testCalcTractionsChange
+
+// ----------------------------------------------------------------------
 // Initialize FaultCohesiveKin interface condition.
 void
 pylith::faults::TestFaultCohesiveKin::_initialize(ALE::Obj<ALE::Mesh>* mesh,

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKin.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -95,6 +95,9 @@
   /// Test integrateJacobian().
   void testIntegrateJacobian(void);
 
+  /// Test _calcTractionsChange().
+  void testCalcTractionsChange(void);
+
   // PRIVATE METHODS ////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinHex8.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinLine2.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinQuad4e.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4e.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTet4f.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveKinTri3d.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -40,6 +40,7 @@
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testIntegrateResidual );
   CPPUNIT_TEST( testIntegrateJacobian );
+  CPPUNIT_TEST( testCalcTractionsChange );
 
   CPPUNIT_TEST_SUITE_END();
 

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -33,6 +33,7 @@
   matPropsFilename(0),
   fieldT(0),
   orientation(0),
+  area(0),
   constraintVertices(0),
   constraintCells(0),
   valsResidual(0),

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinData.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -67,6 +67,7 @@
   /// @name Calculated values.
   //@{
   double* orientation; ///< Expected values for fault orientation.
+  double* area; ///< Expected values for fault area.
   int* constraintVertices; ///< Expected points for constraint vertices
   int* constraintCells; ///< Expected cells for constraint vertices
   double* valsResidual; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -136,6 +136,10 @@
   0.0, -1.0, 0.0,    0.0, 0.0, -1.0,    -1.0, 0.0, 0.0,
 };
 
+const double pylith::faults::CohesiveKinDataHex8::_area[] = {
+  1.0, 1.0, 1.0, 1.0
+};
+
 const int pylith::faults::CohesiveKinDataHex8::_constraintVertices[] = {
   18, 19, 20, 21
 };
@@ -1415,6 +1419,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataHex8.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -84,6 +84,10 @@
   1.0
 };
 
+const double pylith::faults::CohesiveKinDataLine2::_area[] = {
+  1.0
+};
+
 const int pylith::faults::CohesiveKinDataLine2::_constraintVertices[] = {
   6
 };
@@ -138,6 +142,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidualIncr = const_cast<double*>(_valsResidualIncr);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataLine2.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -113,6 +113,10 @@
   0.0,  1.0,  +1.0, 0.0
 };
 
+const double pylith::faults::CohesiveKinDataQuad4::_area[] = {
+  1.0, 1.0,
+};
+
 const int pylith::faults::CohesiveKinDataQuad4::_constraintVertices[] = {
   10, 11
 };
@@ -372,6 +376,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -138,6 +138,12 @@
   0.0, -1.0,  -1.0, 0.0,
 };
 
+const double pylith::faults::CohesiveKinDataQuad4e::_area[] = {
+  1.0,
+  2.0,
+  1.0,
+};
+
 const int pylith::faults::CohesiveKinDataQuad4e::_constraintVertices[] = {
   16, 17, 18
 };
@@ -657,6 +663,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataQuad4e.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -102,6 +102,12 @@
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
+const double pylith::faults::CohesiveKinDataTet4::_area[] = {
+  1.0/3.0, 
+  1.0/3.0, 
+  1.0/3.0,
+};
+
 const int pylith::faults::CohesiveKinDataTet4::_constraintVertices[] = {
   10, 11, 12
 };
@@ -526,6 +532,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -106,6 +106,13 @@
   0.0, +1.0, 0.0,    0.0, 0.0, +1.0,    +1.0, 0.0, 0.0,
 };
 
+const double pylith::faults::CohesiveKinDataTet4e::_area[] = {
+  2.0/3.0,
+  1.0/3.0,
+  2.0/3.0,
+  1.0/3.0,
+};
+
 const int pylith::faults::CohesiveKinDataTet4e::_constraintVertices[] = {
   14, 15, 16, 17
 };
@@ -761,6 +768,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4e.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -102,6 +102,12 @@
   0.0, -1.0, 0.0,    0.0, 0.0, -1.0,    -1.0, 0.0, 0.0,
 };
 
+const double pylith::faults::CohesiveKinDataTet4f::_area[] = {
+  1.0/3.0,
+  1.0/3.0,
+  1.0/3.0,
+};
+
 const int pylith::faults::CohesiveKinDataTet4f::_constraintVertices[] = {
   10, 11, 12
 };
@@ -526,6 +532,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTet4f.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -124,6 +124,11 @@
   0.0, -1.0,  -1.0, 0.0
 };
 
+const double pylith::faults::CohesiveKinDataTri3::_area[] = {
+  1.0,
+  1.0,
+};
+
 const int pylith::faults::CohesiveKinDataTri3::_constraintVertices[] = {
   8, 9
 };
@@ -309,6 +314,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.cc	2008-03-30 19:27:52 UTC (rev 11639)
@@ -134,6 +134,12 @@
  +1.0,  0.0,   0.0, -1.0
 };
 
+const double pylith::faults::CohesiveKinDataTri3d::_area[] = {
+  2.0,
+  1.0,
+  1.0,
+};
+
 const int pylith::faults::CohesiveKinDataTri3d::_constraintVertices[] = {
   13, 14, 15
 };
@@ -485,6 +491,7 @@
   matPropsFilename = const_cast<char*>(_matPropsFilename);
   fieldT = const_cast<double*>(_fieldT);
   orientation = const_cast<double*>(_orientation);
+  area = const_cast<double*>(_area);
   constraintVertices = const_cast<int*>(_constraintVertices);
   constraintCells = const_cast<int*>(_constraintCells);
   valsResidual = const_cast<double*>(_valsResidual);

Modified: short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2008-03-30 19:25:42 UTC (rev 11638)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/data/CohesiveKinDataTri3d.hh	2008-03-30 19:27:52 UTC (rev 11639)
@@ -60,6 +60,7 @@
   static const double _fieldT[]; ///< Solution field at time t.
 
   static const double _orientation[]; ///< Expected values for fault orientation.
+  static const double _area[]; ///< Expected values for fault area.
   static const int _constraintVertices[]; ///< Expected points for constraint vertices
   static const int _constraintCells[]; ///< Expected cells for constraint vertices
   static const double _valsResidual[]; ///< Expected values from residual calculation.



More information about the cig-commits mailing list