[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