[cig-commits] r16097 - in short/3D/PyLith/trunk: . libsrc/faults modulesrc/faults unittests/libtests/faults

brad at geodynamics.org brad at geodynamics.org
Sat Dec 12 21:07:27 PST 2009


Author: brad
Date: 2009-12-12 21:07:27 -0800 (Sat, 12 Dec 2009)
New Revision: 16097

Added:
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.cc
   short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.hh
Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc
   short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh
   short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i
Log:
Started setting up unit tests for friction.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2009-12-12 00:50:15 UTC (rev 16096)
+++ short/3D/PyLith/trunk/TODO	2009-12-13 05:07:27 UTC (rev 16097)
@@ -2,7 +2,6 @@
 CURRENT ISSUES/PRIORITIES
 ======================================================================
 
-<<<<<<< .working
 Status?
 
   Field split
@@ -10,27 +9,14 @@
   customized SNES line search
   Laplacian based preconditioner
 
-=======
 Data structure to hold label of fault Lagrange vertices and
 conventional vertices 
   array of structure (lagrange, positive, negative, fault)
 
   no mesh queries? Just loops?
 
->>>>>>> .merge-right.r16093
-----------------------------------------------------------------------
-<<<<<<< .working
-VISIT TO GNS SCIENCE
-----------------------------------------------------------------------
-
-Discuss TODO list for 2010 workshop
-
-Large deformations
-
 Drucker-Prager elastoplastic (or viscoelastoplastic?)
 
-Reduced integration
-
 Lumped solver
 
 Setup fault constitutive models
@@ -63,7 +49,6 @@
 Rewrite bulk constitutive models
 
 ----------------------------------------------------------------------
-=======
 FRICTION
 ----------------------------------------------------------------------
 
@@ -72,6 +57,12 @@
 Constitutive model parameters
   Integrate over faces to get weighted averages
 
+FaultCohesiveDyn -> FaultCohesiveDynNoL
+FaultCohesiveDynL -> FaultCohesiveDyn
+Refactor FaultCohesive
+  integrateResidualAssembled()
+    updateSlip() [implemented for FaultCohesiveKin, not for FaultCohesiveDyn]
+
 3. pylith::friction::FrictionModel
   (base class for fault constitutive models) [Brad]
   similar to Material + ElasticMaterial

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc	2009-12-12 00:50:15 UTC (rev 16096)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.cc	2009-12-13 05:07:27 UTC (rev 16097)
@@ -73,9 +73,9 @@
 // ----------------------------------------------------------------------
 // Sets the spatial database for the inital tractions
 void
-pylith::faults::FaultCohesiveDynL::dbInitial(spatialdata::spatialdb::SpatialDB* db)
+pylith::faults::FaultCohesiveDynL::dbInitialTract(spatialdata::spatialdb::SpatialDB* db)
 { // dbInitial
-  _dbInitial = db;
+  _dbInitialTract = db;
 } // dbInitial
 
 // ----------------------------------------------------------------------
@@ -663,7 +663,7 @@
   assert(!orientationSection.isNull());
 
   double_array tractionInitialVertex(spaceDim);
-  const ALE::Obj<RealSection>& tractionInitialSection = (0 != _dbInitial) ?
+  const ALE::Obj<RealSection>& tractionInitialSection = (0 != _dbInitialTract) ?
     _fields->get("initial traction").section() : 0;
 
   double_array lagrangeTVertex(spaceDim);
@@ -725,7 +725,7 @@
 				     jacobianVertex.size());
 
       // Get initial fault tractions
-      if (0 != _dbInitial) {
+      if (0 != _dbInitialTract) {
 	assert(!tractionInitialSection.isNull());
 	tractionInitialSection->restrictPoint(vertexFault, 
 					      &tractionInitialVertex[0],
@@ -1117,7 +1117,7 @@
     return buffer;
 
   } else if (0 == strncasecmp("initial_traction", name, slipStrLen)) {
-    assert(0 != _dbInitial);
+    assert(0 != _dbInitialTract);
     const topology::Field<topology::SubMesh>& initialTraction =
       _fields->get("initial traction");
     return initialTraction;
@@ -1510,7 +1510,7 @@
   tractions->zero();
 
   // Set tractions to initial tractions if they exist
-  if (0 != _dbInitial) {
+  if (0 != _dbInitialTract) {
     const ALE::Obj<RealSection>& initialTractionSection = 
       _fields->get("initial traction").section();
     assert(!initialTractionSection.isNull());
@@ -1594,7 +1594,7 @@
   const int spaceDim = _quadrature->spaceDim();
   const int numQuadPts = _quadrature->numQuadPts();
 
-  if (0 != _dbInitial) { // Setup initial values, if provided.
+  if (0 != _dbInitialTract) { // Setup initial values, if provided.
     // Create section to hold initial tractions.
     _fields->add("initial traction", "initial_traction");
     topology::Field<topology::SubMesh>& traction = _fields->get("initial traction");
@@ -1604,24 +1604,24 @@
     const ALE::Obj<RealSection>& tractionSection = traction.section();
     assert(!tractionSection.isNull());
 
-    _dbInitial->open();
+    _dbInitialTract->open();
     switch (spaceDim)
       { // switch
       case 1 : {
 	const char* valueNames[] = {"traction-normal"};
-	_dbInitial->queryVals(valueNames, 1);
+	_dbInitialTract->queryVals(valueNames, 1);
 	break;
       } // case 1
       case 2 : {
 	const char* valueNames[] = {"traction-shear", "traction-normal"};
-	_dbInitial->queryVals(valueNames, 2);
+	_dbInitialTract->queryVals(valueNames, 2);
 	break;
       } // case 2
       case 3 : {
 	const char* valueNames[] = {"traction-shear-leftlateral",
 				    "traction-shear-updip",
 				    "traction-normal"};
-	_dbInitial->queryVals(valueNames, 3);
+	_dbInitialTract->queryVals(valueNames, 3);
 	break;
       } // case 3
       default :
@@ -1662,7 +1662,7 @@
 				 &coordsVertex[0], coordsVertex.size());
       
       tractionVertex = 0.0;
-      const int err = _dbInitial->query(&tractionVertex[0], spaceDim,
+      const int err = _dbInitialTract->query(&tractionVertex[0], spaceDim,
 					&coordsVertex[0], spaceDim, cs);
       if (err) {
 	std::ostringstream msg;
@@ -1670,7 +1670,7 @@
 	for (int i=0; i < spaceDim; ++i)
 	  msg << " " << coordsVertex[i];
 	msg << ") for dynamic fault interface " << label() << "\n"
-	    << "using spatial database " << _dbInitial->label() << ".";
+	    << "using spatial database " << _dbInitialTract->label() << ".";
 	throw std::runtime_error(msg.str());
       } // if
 	
@@ -1682,7 +1682,7 @@
       tractionSection->updatePoint(*v_iter, &tractionVertex[0]);
     } // for
     
-    _dbInitial->close();
+    _dbInitialTract->close();
 
     // debugging
     traction.view("INITIAL TRACTIONS");

Modified: short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh	2009-12-12 00:50:15 UTC (rev 16096)
+++ short/3D/PyLith/trunk/libsrc/faults/FaultCohesiveDynL.hh	2009-12-13 05:07:27 UTC (rev 16097)
@@ -109,7 +109,7 @@
    *
    * @param db spatial database for initial tractions
    */
-  void dbInitial(spatialdata::spatialdb::SpatialDB* db);
+  void dbInitialTract(spatialdata::spatialdb::SpatialDB* db);
   
   /** Initialize fault. Determine orientation and setup boundary
    * condition parameters.
@@ -278,7 +278,7 @@
 private :
 
   /// Database for initial tractions.
-  spatialdata::spatialdb::SpatialDB* _dbInitial;
+  spatialdata::spatialdb::SpatialDB* _dbInitialTract;
 
   // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i
===================================================================
--- short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i	2009-12-12 00:50:15 UTC (rev 16096)
+++ short/3D/PyLith/trunk/modulesrc/faults/FaultCohesiveDynL.i	2009-12-13 05:07:27 UTC (rev 16097)
@@ -39,7 +39,7 @@
        *
        * @param db spatial database for initial tractions
        */
-      void dbInitial(spatialdata::spatialdb::SpatialDB* db);
+      void dbInitialTract(spatialdata::spatialdb::SpatialDB* db);
   
       /** Initialize fault. Determine orientation and setup boundary
        * condition parameters.

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.cc	2009-12-13 05:07:27 UTC (rev 16097)
@@ -0,0 +1,288 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestFaultCohesiveDynL.hh" // Implementation of class methods
+
+#include "pylith/faults/FaultCohesiveDynL.hh" // USES FaultCohesiveDynL
+
+#include "data/CohesiveDynLData.hh" // USES CohesiveDynLData
+
+#include "pylith/faults/EqKinSrc.hh" // USES EqKinSrc
+#include "pylith/faults/BruneSlipFn.hh" // USES BruneSlipFn
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/topology/SolutionFields.hh" // USES SolutionFields
+#include "pylith/topology/Jacobian.hh" // USES Jacobian
+#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
+
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+
+#include <stdexcept> // USES runtime_error
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestFaultCohesiveDynL );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+typedef pylith::topology::SubMesh::SieveMesh SieveSubMesh;
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::faults::TestFaultCohesiveDynL::setUp(void)
+{ // setUp
+  _data = 0;
+  _quadrature = new feassemble::Quadrature<topology::SubMesh>();
+  CPPUNIT_ASSERT(0 != _quadrature);
+  _dbInitialTract = 0;
+
+  _flipFault = false;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::faults::TestFaultCohesiveDynL::tearDown(void)
+{ // tearDown
+  delete _data; _data = 0;
+  delete _quadrature; _quadrature = 0;
+  delete _dbInitialTract; _dbInitialTract = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::faults::TestFaultCohesiveDynL::testConstructor(void)
+{ // testConstructor
+  FaultCohesiveDynL fault;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test dbInitialTract().
+void
+pylith::faults::TestFaultCohesiveDynL::testDBInitialTract(void)
+{ // testDBInitialTract
+  FaultCohesiveDynL fault;
+
+  const std::string& label = "test database";
+  spatialdata::spatialdb::UniformDB db;
+  db.label(label.c_str());
+  fault.dbInitialTract(&db);
+  CPPUNIT_ASSERT(0 != fault._dbInitialTract)
+  CPPUNIT_ASSERT_EQUAL(label, std::string(fault._dbInitialTract->label()));
+ } // testDBInitialTract
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void
+pylith::faults::TestFaultCohesiveDynL::testInitialize(void)
+{ // testInitialize
+  topology::Mesh mesh;
+  FaultCohesiveDynL fault;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &fault, &fields);
+
+  const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault._faultMesh->sieveMesh();
+  CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+  SieveSubMesh::renumbering_type& renumbering = 
+    faultSieveMesh->getRenumbering();
+  const ALE::Obj<SieveSubMesh::label_sequence>& vertices = 
+    faultSieveMesh->depthStratum(0);
+  CPPUNIT_ASSERT(!vertices.isNull());
+  const SieveSubMesh::label_sequence::iterator verticesBegin = vertices->begin();
+  const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+  int iVertex = 0;
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    CPPUNIT_ASSERT(renumbering.find(_data->constraintVertices[iVertex]) !=
+		   renumbering.end());
+    CPPUNIT_ASSERT_EQUAL(renumbering[_data->constraintVertices[iVertex]],
+			 *v_iter);
+  } // for
+  CPPUNIT_ASSERT_EQUAL(_data->numConstraintVert, iVertex);
+
+  // Check orientation
+  //fault._fields->get("orientation").view("ORIENTATION"); // DEBUGGING
+  const ALE::Obj<RealSection>& orientationSection = 
+    fault._fields->get("orientation").section();
+  CPPUNIT_ASSERT(!orientationSection.isNull());
+  const int spaceDim = _data->spaceDim;
+  const int orientationSize = spaceDim*spaceDim;
+  iVertex = 0;
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    const int fiberDim = orientationSection->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(orientationSize, fiberDim);
+    const double* orientationVertex =
+      orientationSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != orientationVertex);
+
+    const double tolerance = 1.0e-06;
+    for (int i=0; i < orientationSize; ++i) {
+      const int index = iVertex*orientationSize+i;
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->orientation[index],
+				   orientationVertex[i], tolerance);
+    } // for
+  } // for
+
+  // Check area
+  const ALE::Obj<RealSection>& areaSection =
+    fault._fields->get("area").section();
+  CPPUNIT_ASSERT(!areaSection.isNull());
+  iVertex = 0;
+  for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+       v_iter != verticesEnd;
+       ++v_iter, ++iVertex) {
+    const int fiberDim = areaSection->getFiberDimension(*v_iter);
+    CPPUNIT_ASSERT_EQUAL(1, fiberDim);
+    const double* areaVertex = areaSection->restrictPoint(*v_iter);
+    CPPUNIT_ASSERT(0 != areaVertex);
+
+    const double tolerance = 1.0e-06;
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(_data->area[iVertex], areaVertex[0],
+				 tolerance);
+  } // for
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test constrainSolnSpace().
+void
+pylith::faults::TestFaultCohesiveDynL::testConstrainSolnSpace(void)
+{ // testConstrainSolnSpace
+  // STUFF GOES HERE
+} // testConstrainSolnSpace
+
+// ----------------------------------------------------------------------
+// Test updateStateVars().
+void
+pylith::faults::TestFaultCohesiveDynL::testUpdateStateVars(void)
+{ // testUpdateStateVars
+  // STUFF GOES HERE
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Test calcTractions().
+void
+pylith::faults::TestFaultCohesiveDynL::testCalcTractions(void)
+{ // testCalcTractions
+  topology::Mesh mesh;
+  FaultCohesiveDynL fault;
+  topology::SolutionFields fields(mesh);
+  _initialize(&mesh, &fault, &fields);
+  
+  // STUFF GOES HERE
+} // testCalcTractions
+
+// ----------------------------------------------------------------------
+// Initialize FaultCohesiveDynL interface condition.
+void
+pylith::faults::TestFaultCohesiveDynL::_initialize(
+					topology::Mesh* const mesh,
+					FaultCohesiveDynL* const fault,
+					topology::SolutionFields* const fields) const
+{ // _initialize
+  CPPUNIT_ASSERT(0 != mesh);
+  CPPUNIT_ASSERT(0 != fault);
+  CPPUNIT_ASSERT(0 != fields);
+  CPPUNIT_ASSERT(0 != _data);
+  CPPUNIT_ASSERT(0 != _quadrature);
+
+  meshio::MeshIOAscii iohandler;
+  iohandler.filename(_data->meshFilename);
+  iohandler.read(mesh);
+  
+  //mesh->debug(true); // DEBUGGING
+  
+  spatialdata::geocoords::CSCart cs;
+  spatialdata::units::Nondimensional normalizer;
+  cs.setSpaceDim(mesh->dimension());
+  cs.initialize();
+  mesh->coordsys(&cs);
+  mesh->nondimensionalize(normalizer);
+  
+  _quadrature->initialize(_data->basis, _data->numQuadPts, _data->numBasis,
+			  _data->basisDeriv,
+			  _data->numQuadPts, _data->numBasis, _data->cellDim,
+			  _data->quadPts, _data->numQuadPts, _data->cellDim,
+			  _data->quadWts, _data->numQuadPts,
+			  _data->spaceDim);
+  
+  // Setup initial tractions
+  delete _dbInitialTract; _dbInitialTract =
+      new spatialdata::spatialdb::SimpleDB("initial tractions");
+  CPPUNIT_ASSERT(0 != _dbInitialTract)
+  spatialdata::spatialdb::SimpleIOAscii ioInitialTract;
+  ioInitialTract.filename(_data->initialTractFilename);
+  _dbInitialTract->ioHandler(&ioInitialTract);
+
+  int firstFaultVertex    = 0;
+  int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(_data->label)->size();
+  int firstFaultCell      = mesh->sieveMesh()->getIntSection(_data->label)->size();
+  if (fault->useLagrangeConstraints()) {
+    firstFaultCell += mesh->sieveMesh()->getIntSection(_data->label)->size();
+  }
+  fault->id(_data->id);
+  fault->label(_data->label);
+  fault->quadrature(_quadrature);
+  
+  fault->adjustTopology(mesh, &firstFaultVertex, &firstLagrangeVertex, &firstFaultCell, _flipFault);
+  
+  const double upDir[] = { 0.0, 0.0, 1.0 };
+  const double normalDir[] = { 1.0, 0.0, 0.0 };
+  
+  fault->initialize(*mesh, upDir, normalDir); 
+  
+  delete[] sources; sources = 0;
+  for (int i=0; i < nsrcs; ++i)
+    delete[] names[i];
+  delete[] names; names = 0;
+  
+  // Setup fields
+  fields->add("residual", "residual");
+  fields->add("disp(t)", "displacement");
+  fields->add("dispIncr(t->t+dt)", "displacement_increment");
+  fields->solutionName("dispIncr(t->t+dt)");
+  
+  const int spaceDim = _data->spaceDim;
+  topology::Field<topology::Mesh>& residual = fields->get("residual");
+  residual.newSection(topology::FieldBase::VERTICES_FIELD, spaceDim);
+  residual.allocate();
+  fields->copyLayout("residual");
+} // _initialize
+
+// ----------------------------------------------------------------------
+// Determine if vertex is a Lagrange multiplier constraint vertex.
+bool
+pylith::faults::TestFaultCohesiveDynL::_isConstraintVertex(const int vertex) const
+{ // _isConstraintVertex
+  assert(0 != _data);
+
+  const int numConstraintVert = _data->numConstraintVert;
+  bool isFound = false;
+  for (int i=0; i < _data->numConstraintVert; ++i)
+    if (_data->constraintVertices[i] == vertex) {
+      isFound = true;
+      break;
+    } // if
+  return isFound;
+} // _isConstraintVertex
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/faults/TestFaultCohesiveDynL.hh	2009-12-13 05:07:27 UTC (rev 16097)
@@ -0,0 +1,115 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestFaultCohesiveDynL.hh
+ *
+ * @brief C++ TestFaultCohesiveDynL object
+ *
+ * C++ unit testing for FaultCohesiveDynL.
+ */
+
+#if !defined(pylith_faults_testfaultcohesivedynl_hh)
+#define pylith_faults_testfaultcohesivedynl_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/faults/faultsfwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SubMesh
+#include "pylith/feassemble/feassemblefwd.hh" // HOLDSA Quadrature
+
+#include <vector> // HASA std::vector
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace faults {
+    class TestFaultCohesiveDynL;
+
+    class CohesiveDynLData;
+  } // faults
+} // pylith
+
+/// C++ unit testing for FaultCohesiveDynL
+class pylith::faults::TestFaultCohesiveDynL : public CppUnit::TestFixture
+{ // class TestFaultCohesiveDynL
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestFaultCohesiveDynL );
+
+  CPPUNIT_TEST( testConstructor );
+  CPPUNIT_TEST( testDBInitialTract );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  CohesiveDynLData* _data; ///< Data for testing
+  feassemble::Quadrature<topology::SubMesh>* _quadrature; ///< Fault quad.
+  spatialdata::spatialdb::SpatialDB* _dbInitialTract; ///< Initial tractions.
+  bool _flipFault; ///< If true, flip fault orientation.
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Tear down testing data.
+  void tearDown(void);
+
+  /// Test constructor.
+  void testConstructor(void);
+
+  /// Test dbInitialTract().
+  void testDBInitialTract(void);
+
+  /// Test initialize().
+  void testInitialize(void);
+
+  /// Test constrainSolnSpace().
+  void testConstrainSolnSpace(void);
+
+  /// Test updateStateVars().
+  void testUpdateStateVars(void);
+
+  /// Test _calcTractions().
+  void testCalcTractions(void);
+
+  // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+  /** Initialize FaultCohesiveDynL interface condition.
+   *
+   * @param mesh PETSc mesh to initialize
+   * @param fault Cohesive fault interface condition to initialize.
+   * @param fields Solution fields.
+   */
+  void _initialize(topology::Mesh* const mesh,
+		   FaultCohesiveDynL* const fault,
+		   topology::SolutionFields* const fields) const;
+
+  /** Determine if vertex is a Lagrange multiplier constraint vertex.
+   *
+   * @param vertex Label of vertex.
+   *
+   * @returns True if vertex is a constraint vertex, false otherwise.
+   */
+  bool _isConstraintVertex(const int vertex) const;
+  
+
+}; // class TestFaultCohesiveDynL
+
+#endif // pylith_faults_testfaultcohesivedynl_hh
+
+
+// End of file 



More information about the CIG-COMMITS mailing list