[cig-commits] r16172 - in short/3D/PyLith/trunk: libsrc/friction unittests/libtests/friction unittests/libtests/friction/data
brad at geodynamics.org
brad at geodynamics.org
Mon Jan 25 11:56:34 PST 2010
Author: brad
Date: 2010-01-25 11:56:34 -0800 (Mon, 25 Jan 2010)
New Revision: 16172
Added:
short/3D/PyLith/trunk/unittests/libtests/friction/data/friction_static.spatialdb
short/3D/PyLith/trunk/unittests/libtests/friction/data/tri3.mesh
Modified:
short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc
short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh
short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am
Log:
Implemented unit test for FrictionModel::initialize().
Modified: short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc 2010-01-25 19:43:28 UTC (rev 16171)
+++ short/3D/PyLith/trunk/libsrc/friction/FrictionModel.cc 2010-01-25 19:56:34 UTC (rev 16172)
@@ -114,6 +114,7 @@
const int spaceDim = quadrature->spaceDim();
const double_array& quadWts = quadrature->quadWts();
assert(quadWts.size() == numQuadPts);
+ double_array quadPtsGlobal(numQuadPts*spaceDim);
// Get cells associated with friction interface
const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
@@ -123,6 +124,13 @@
assert(!cells.isNull());
const SieveSubMesh::label_sequence::iterator cellsBegin = cells->begin();
const SieveSubMesh::label_sequence::iterator cellsEnd = cells->end();
+ const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ assert(!vertices.isNull());
+ const SieveSubMesh::label_sequence::iterator verticesBegin =
+ vertices->begin();
+ const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+
const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
assert(0 != cs);
@@ -134,11 +142,15 @@
coordinatesCell.size(), &coordinatesCell[0]);
#endif
+ assert(0 != _normalizer);
+ const double lengthScale = _normalizer->lengthScale();
+
+ // Query database for properties
+
// Create arrays for querying.
const int numDBProperties = _metadata.numDBProperties();
- double_array quadPtsGlobal(numQuadPts*spaceDim);
double_array propertiesDBQuery(numDBProperties);
- double_array propertiesQuadPt(numQuadPts*_numPropsVertex);
+ double_array propertiesQuadPt(_numPropsVertex);
// Create field to hold physical properties.
delete _properties; _properties =
@@ -146,7 +158,7 @@
_properties->label("properties");
assert(0 != _properties);
int fiberDim = _numPropsVertex;
- _properties->newSection(cells, fiberDim);
+ _properties->newSection(vertices, fiberDim);
_properties->allocate();
_properties->zero();
const ALE::Obj<RealSection>& propertiesSection = _properties->section();
@@ -161,43 +173,6 @@
_dbProperties->queryVals(_metadata.dbProperties(),
_metadata.numDBProperties());
- // Create arrays for querying
- const int numDBStateVars = _metadata.numDBStateVars();
- double_array stateVarsDBQuery;
- double_array stateVarsQuadPt;
- if (0 != _dbInitialState) {
- assert(numDBStateVars > 0);
- assert(_numVarsVertex > 0);
- stateVarsDBQuery.resize(numDBStateVars);
- stateVarsQuadPt.resize(numQuadPts*_numVarsVertex);
- // Setup database for querying for initial state variables
- _dbInitialState->open();
- _dbInitialState->queryVals(_metadata.dbStateVars(),
- _metadata.numDBStateVars());
- } // if
-
- // Create field to hold state variables. We create the field even
- // if there is no initial state, because this we will use this field
- // to hold the state variables.
- delete _stateVars; _stateVars = new topology::Field<topology::SubMesh>(faultMesh);
- _stateVars->label("state variables");
- fiberDim = _numVarsVertex;
- if (fiberDim > 0) {
- assert(0 != _stateVars);
- assert(0 != _properties);
- _stateVars->newSection(*_properties, fiberDim);
- _stateVars->allocate();
- _stateVars->zero();
- } // if
- const ALE::Obj<RealSection>& stateVarsSection =
- (fiberDim > 0) ? _stateVars->section() : 0;
- double_array stateVarsCell(numBasis*numDBStateVars); // size may be zero, is this ok?
- topology::Mesh::UpdateAddVisitor stateVarsVisitor(*stateVarsSection,
- &stateVarsCell[0]);
-
- assert(0 != _normalizer);
- const double lengthScale = _normalizer->lengthScale();
-
for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
c_iter != cellsEnd;
++c_iter) {
@@ -213,7 +188,7 @@
const double_array& quadPtsNonDim = quadrature->quadPts();
quadPtsGlobal = quadPtsNonDim;
_normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
- lengthScale);
+ lengthScale);
// Loop over quadrature points in cell and query database
for (int iQuadPt=0, index=0;
@@ -230,8 +205,7 @@
<< "using spatial database '" << _dbProperties->label() << "'.";
throw std::runtime_error(msg.str());
} // if
- _dbToProperties(&propertiesQuadPt[iQuadPt*_numPropsVertex],
- propertiesDBQuery);
+ _dbToProperties(&propertiesQuadPt[0], propertiesDBQuery);
// Get cell geometry information that depends on cell
const double_array& basis = quadrature->basis();
@@ -242,15 +216,92 @@
for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
const double dArea = wt * basis[iQuadPt*numBasis+iBasis];
for (int iProp = 0; iProp < numDBProperties; ++iProp)
+ {
propertiesCell[iBasis*numDBProperties+iProp]
= propertiesQuadPt[iProp] * dArea;
+ std::cout << "propertiesCell[" << iBasis*numDBProperties+iProp << "]: "
+ << propertiesCell[iBasis*numDBProperties+iProp]
+ << ", propertiesQuadPt[" << iProp << "]: " << propertiesQuadPt[iProp]
+ << std::endl;
+ }
} // for
propertiesVisitor.clear();
faultSieveMesh->updateClosure(*c_iter, propertiesVisitor);
+ } // for
+ } // for
+ // Close properties database
+ _dbProperties->close();
- if (0 != _dbInitialState) {
- err = _dbInitialState->query(&stateVarsDBQuery[0], numDBStateVars,
- &quadPtsGlobal[index], spaceDim, cs);
+ // Loop over vertices and divide by area to get weighted values and
+ // nondimensionalize properties.
+ double_array propertiesVertex(_numPropsVertex);
+ for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+ v_iter != verticesEnd;
+ ++v_iter) {
+ propertiesSection->restrictPoint(*v_iter,
+ &propertiesVertex[0], propertiesVertex.size());
+ _nondimProperties(&propertiesVertex[0], _numPropsVertex);
+ propertiesSection->updatePoint(*v_iter, &propertiesVertex[0]);
+ } // for
+
+
+ // Create field to hold state variables. We create the field even
+ // if there is no initial state, because this we will use this field
+ // to hold the state variables.
+ delete _stateVars; _stateVars = new topology::Field<topology::SubMesh>(faultMesh);
+ _stateVars->label("state variables");
+ fiberDim = _numVarsVertex;
+ if (fiberDim > 0) {
+ assert(0 != _stateVars);
+ assert(0 != _properties);
+ _stateVars->newSection(*_properties, fiberDim);
+ _stateVars->allocate();
+ _stateVars->zero();
+ } // if
+
+ // Query database for initial state variables
+ if (0 != _dbInitialState) {
+ assert(_numVarsVertex > 0);
+
+ // Create arrays for querying
+ const int numDBStateVars = _metadata.numDBStateVars();
+ double_array stateVarsDBQuery(numDBStateVars);
+ double_array stateVarsQuadPt(_numVarsVertex);
+
+ // Setup database for querying for initial state variables
+ _dbInitialState->open();
+ _dbInitialState->queryVals(_metadata.dbStateVars(),
+ _metadata.numDBStateVars());
+
+ const ALE::Obj<RealSection>& stateVarsSection =_stateVars->section();
+ assert(!stateVarsSection.isNull());
+ double_array stateVarsCell(numBasis*numDBStateVars);
+ topology::Mesh::UpdateAddVisitor stateVarsVisitor(*stateVarsSection,
+ &stateVarsCell[0]);
+
+ for (SieveSubMesh::label_sequence::iterator c_iter=cellsBegin;
+ c_iter != cellsEnd;
+ ++c_iter) {
+ // Compute geometry information for current cell
+#if defined(PRECOMPUTE_GEOMETRY)
+ quadrature->retrieveGeometry(*c_iter);
+#else
+ coordsVisitor.clear();
+ faultSieveMesh->restrictClosure(*c_iter, coordsVisitor);
+ quadrature->computeGeometry(coordinatesCell, *c_iter);
+#endif
+
+ const double_array& quadPtsNonDim = quadrature->quadPts();
+ quadPtsGlobal = quadPtsNonDim;
+ _normalizer->dimensionalize(&quadPtsGlobal[0], quadPtsGlobal.size(),
+ lengthScale);
+
+ // Loop over quadrature points in cell and query database
+ for (int iQuadPt=0, index=0;
+ iQuadPt < numQuadPts;
+ ++iQuadPt, index+=spaceDim) {
+ int err = _dbInitialState->query(&stateVarsDBQuery[0], numDBStateVars,
+ &quadPtsGlobal[index], spaceDim, cs);
if (err) {
std::ostringstream msg;
msg << "Could not find initial state variables at \n" << "(";
@@ -260,10 +311,14 @@
<< "using spatial database '" << _dbInitialState->label() << "'.";
throw std::runtime_error(msg.str());
} // if
- _dbToStateVars(&stateVarsQuadPt[iQuadPt*_numVarsVertex],
- stateVarsDBQuery);
+ _dbToStateVars(&stateVarsQuadPt[0], stateVarsDBQuery);
+ // Get cell geometry information that depends on cell
+ const double_array& basis = quadrature->basis();
+ const double_array& jacobianDet = quadrature->jacobianDet();
+
// Compute state variables weighted by area
+ const double wt = quadWts[iQuadPt] * jacobianDet[iQuadPt];
for (int iBasis = 0; iBasis < numBasis; ++iBasis) {
const double dArea = wt * basis[iQuadPt*numBasis+iBasis];
for (int iVar = 0; iVar < numDBStateVars; ++iVar)
@@ -271,43 +326,30 @@
= stateVarsDBQuery[iVar] * dArea;
} // for
stateVarsVisitor.clear();
- faultSieveMesh->updateClosure(*c_iter, stateVarsVisitor);
- } // if
+ faultSieveMesh->updateClosure(*c_iter, stateVarsVisitor);
+ } // for
} // for
- } // for
-
- // Close databases
- _dbProperties->close();
- if (0 != _dbInitialState)
+ // Close database
_dbInitialState->close();
- // Loop over vertices and divide by area to get weighted values and
- // nondimensionalize properties and state variables
- const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
- faultSieveMesh->depthStratum(0);
- assert(!vertices.isNull());
- const SieveSubMesh::label_sequence::iterator verticesBegin =
- vertices->begin();
- const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+ // Loop over vertices and divide by area to get weighted values and
+ // nondimensionalize properties.
+ double_array stateVarsVertex(_numVarsVertex);
- double_array propertiesVertex(_numPropsVertex);
- double_array stateVarsVertex(_numVarsVertex);
- for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
- v_iter != verticesEnd;
- ++v_iter) {
- propertiesSection->restrictPoint(*v_iter,
- &propertiesVertex[0], propertiesVertex.size());
- _nondimProperties(&propertiesVertex[0], _numPropsVertex);
- propertiesSection->updatePoint(*v_iter, &propertiesVertex[0]);
-
- if (0 != _dbInitialState) {
+ for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+ v_iter != verticesEnd;
+ ++v_iter) {
stateVarsSection->restrictPoint(*v_iter,
&stateVarsVertex[0], stateVarsVertex.size());
_nondimStateVars(&stateVarsVertex[0], _numVarsVertex);
stateVarsSection->updatePoint(*v_iter, &stateVarsVertex[0]);
- } // if
- } // for
+ } // for
+ } // if
+ // Setup buffers for restrict/update of properties and state variables.
+ _propertiesVertex.resize(_numPropsVertex);
+ _stateVarsVertex.resize(_numVarsVertex);
+
logger.stagePop();
} // initialize
Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc 2010-01-25 19:43:28 UTC (rev 16171)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc 2010-01-25 19:56:34 UTC (rev 16172)
@@ -20,8 +20,9 @@
#include "pylith/topology/Field.hh" // USES Field
#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
#include "pylith/friction/StaticFriction.hh" // USES StaticFriction
+#include "pylith/faults/FaultCohesiveDynL.hh" // USES FaultCohesiveDynL
#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
+#include "pylith/feassemble/GeometryLine2D.hh" // USES GeometryLine2D
#include "pylith/utils/array.hh" // USES double_array
@@ -38,6 +39,7 @@
CPPUNIT_TEST_SUITE_REGISTRATION( pylith::friction::TestFrictionModel );
// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
typedef pylith::topology::Mesh::SieveSubMesh SieveSubMesh;
typedef pylith::topology::Mesh::RealSection RealSection;
@@ -114,15 +116,69 @@
} // testNormalizer
// ----------------------------------------------------------------------
-// Test initialize()
+// Test initialize().
void
pylith::friction::TestFrictionModel::testInitialize(void)
{ // testInitialize
+ const double propertiesE[] = { 0.55, 0.45 };
+ const int numProperties = 1;
+
topology::Mesh mesh;
+ faults::FaultCohesiveDynL fault;
StaticFriction friction;
StaticFrictionData data;
- _initialize(&mesh, &friction, &data);
+ _initialize(&mesh, &fault, &friction, &data);
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault.faultMesh().sieveMesh();
+ assert(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveSubMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ assert(!vertices.isNull());
+ const SieveSubMesh::label_sequence::iterator verticesBegin =
+ vertices->begin();
+ const SieveSubMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+ const double tolerance = 1.0e-06;
+
+ // Test propertiesVertex with mesh
+ int index = 0;
+ double_array propertiesVertex(numProperties);
+ CPPUNIT_ASSERT(0 != friction._properties);
+ friction._properties->view("PROPERTIES");
+ const ALE::Obj<RealSection>& propertiesSection = friction._properties->section();
+ CPPUNIT_ASSERT(!propertiesSection.isNull());
+ for (SieveSubMesh::label_sequence::iterator v_iter=verticesBegin;
+ v_iter != verticesEnd;
+ ++v_iter) {
+ CPPUNIT_ASSERT(numProperties == propertiesSection->getFiberDimension(*v_iter));
+ propertiesSection->restrictPoint(*v_iter, &propertiesVertex[0], propertiesVertex.size());
+ for (int i=0; i < numProperties; ++i, ++index)
+ if (0 != propertiesE[index])
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, propertiesVertex[i]/propertiesE[index], tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[index], propertiesVertex[i], tolerance);
+ } // for
+
+ // Test vertex array sizes.
+ size_t size = data.numPropsVertex;
+ CPPUNIT_ASSERT_EQUAL(size, friction._propertiesVertex.size());
+
+ size = data.numVarsVertex;
+ CPPUNIT_ASSERT_EQUAL(size, friction._stateVarsVertex.size());
+
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test getField().
+void
+pylith::friction::TestFrictionModel::testGetField(void)
+{ // testGetField
+ topology::Mesh mesh;
+ faults::FaultCohesiveDynL fault;
+ StaticFriction friction;
+ StaticFrictionData data;
+ _initialize(&mesh, &fault, &friction, &data);
+
#if 1
CPPUNIT_ASSERT(false);
#else
@@ -139,7 +195,7 @@
size = data.numLocs;
CPPUNIT_ASSERT_EQUAL(size, material._frictionVertex.size());
#endif
-} // testInitialize
+} // testGetField
// ----------------------------------------------------------------------
// Test retrievePropsAndVars().
@@ -147,9 +203,10 @@
pylith::friction::TestFrictionModel::testRetrievePropsAndVars(void)
{ // testRetrievePropsAndVars
topology::Mesh mesh;
+ faults::FaultCohesiveDynL fault;
StaticFriction friction;
StaticFrictionData data;
- _initialize(&mesh, &friction, &data);
+ _initialize(&mesh, &fault, &friction, &data);
#if 1
CPPUNIT_ASSERT(false);
@@ -189,9 +246,10 @@
pylith::friction::TestFrictionModel::testCalcFriction(void)
{ // testCalcFriction
topology::Mesh mesh;
+ faults::FaultCohesiveDynL fault;
StaticFriction friction;
StaticFrictionData data;
- _initialize(&mesh, &friction, &data);
+ _initialize(&mesh, &fault, &friction, &data);
#if 1
CPPUNIT_ASSERT(false);
@@ -548,16 +606,17 @@
void
pylith::friction::TestFrictionModel::_initialize(
topology::Mesh* mesh,
+ faults::FaultCohesiveDynL* fault,
StaticFriction* friction,
const StaticFrictionData* data)
{ // _initialize
CPPUNIT_ASSERT(0 != mesh);
+ CPPUNIT_ASSERT(0 != fault);
CPPUNIT_ASSERT(0 != friction);
CPPUNIT_ASSERT(0 != data);
-#if 0
meshio::MeshIOAscii iohandler;
- iohandler.filename("data/line3.mesh");
+ iohandler.filename("data/tri3.mesh");
iohandler.read(mesh);
// Set up coordinates
@@ -569,23 +628,16 @@
mesh->nondimensionalize(normalizer);
// Setup quadrature
- feassemble::Quadrature<topology::Mesh> quadrature;
- feassemble::GeometryLine1D geometry;
+ feassemble::Quadrature<topology::SubMesh> quadrature;
+ feassemble::GeometryLine2D geometry;
quadrature.refGeometry(&geometry);
const int cellDim = 1;
- const int numCorners = 3;
+ const int numCorners = 2;
const int numQuadPts = 2;
- const int spaceDim = 1;
- const double basis[] = { 0.455, -0.122, 0.667, -0.122, 0.455, 0.667 };
- const double basisDeriv[] = {
- -1.07735027e+00,
- -7.73502692e-02,
- 1.15470054e+00,
- 7.73502692e-02,
- 1.07735027e+00,
- -1.15470054e+00,
- };
- const double quadPtsRef[] = { -0.577350269, 0.577350269 };
+ const int spaceDim = 2;
+ const double basis[] = { 0.75, 0.25, 0.25, 0.75 };
+ const double basisDeriv[] = { -0.5, 0.5, -0.5, 0.5 };
+ const double quadPtsRef[] = { -0.5, 0.5 };
const double quadWts[] = { 1.0, 1.0 };
quadrature.initialize(basis, numQuadPts, numCorners,
basisDeriv, numQuadPts, numCorners, cellDim,
@@ -593,47 +645,47 @@
quadWts, numQuadPts,
spaceDim);
+ const bool flipFault = false;
+ const char* label = "fault";
+ int firstFaultVertex = 0;
+ int firstLagrangeVertex = mesh->sieveMesh()->getIntSection(label)->size();
+ int firstFaultCell = mesh->sieveMesh()->getIntSection(label)->size();
+ if (fault->useLagrangeConstraints())
+ firstFaultCell += mesh->sieveMesh()->getIntSection(label)->size();
+ fault->id(100);
+ fault->label(label);
+ fault->quadrature(&quadrature);
+ fault->adjustTopology(mesh, &firstFaultVertex, &firstLagrangeVertex,
+ &firstFaultCell, flipFault);
- // Get cells associated with material
- const int materialId = 24;
- const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
- assert(!sieveMesh.isNull());
- const ALE::Obj<SieveMesh::label_sequence>& cells =
- sieveMesh->getLabelStratum("material-id", materialId);
+ const double upDir[] = { 0.0, 0.0, 1.0 };
+ const double normalDir[] = { 1.0, 0.0, 0.0 };
+ fault->initialize(*mesh, upDir, normalDir);
+ // Get cells associated with fault
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = fault->faultMesh().sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveSubMesh::label_sequence>& cells =
+ faultSieveMesh->heightStratum(0);
+ CPPUNIT_ASSERT(!cells.isNull());
+
// Compute geometry for cells
quadrature.initializeGeometry();
#if defined(PRECOMPUTE_GEOMETRY)
- quadrature.computeGeometry(*mesh, cells);
+ quadrature.computeGeometry(fault->faultMesh(), cells);
#endif
spatialdata::spatialdb::SimpleDB db;
spatialdata::spatialdb::SimpleIOAscii dbIO;
- dbIO.filename("data/matinitialize.spatialdb");
+ dbIO.filename("data/friction_static.spatialdb");
db.ioHandler(&dbIO);
db.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
- spatialdata::spatialdb::SimpleDB dbStress;
- spatialdata::spatialdb::SimpleIOAscii dbIOStress;
- dbIOStress.filename("data/matstress.spatialdb");
- dbStress.ioHandler(&dbIOStress);
- dbStress.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
+ friction->dbProperties(&db);
+ friction->label("my_friction");
+ friction->normalizer(normalizer);
- spatialdata::spatialdb::SimpleDB dbStrain;
- spatialdata::spatialdb::SimpleIOAscii dbIOStrain;
- dbIOStrain.filename("data/matstrain.spatialdb");
- dbStrain.ioHandler(&dbIOStrain);
- dbStrain.queryType(spatialdata::spatialdb::SimpleDB::NEAREST);
-
- material->dbProperties(&db);
- material->id(materialId);
- material->label("my_friction");
- material->normalizer(normalizer);
- material->dbInitialStress(&dbStress);
- material->dbInitialStrain(&dbStrain);
-
- material->initialize(*mesh, &quadrature);
-#endif
+ friction->initialize(fault->faultMesh(), &quadrature);
} // _initialize
Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh 2010-01-25 19:43:28 UTC (rev 16171)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh 2010-01-25 19:56:34 UTC (rev 16172)
@@ -25,6 +25,7 @@
#include "pylith/friction/frictionfwd.hh" // forward declarations
#include "pylith/topology/topologyfwd.hh" // forward declarations
+#include "pylith/faults/faultsfwd.hh" // forward declarations
/// Namespace for pylith package
namespace pylith {
@@ -48,6 +49,7 @@
CPPUNIT_TEST( testDBStateVars );
CPPUNIT_TEST( testNormalizer );
CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testGetField );
CPPUNIT_TEST( testRetrievePropsAndVars );
CPPUNIT_TEST( testCalcFriction );
CPPUNIT_TEST( testUpdateStateVars );
@@ -72,9 +74,12 @@
/// Test normalizer().
void testNormalizer(void);
- /// Test initialize()
+ /// Test initialize().
void testInitialize(void);
+ /// Test getField().
+ void testGetField(void);
+
/// Test retrievePropsAndVars().
void testRetrievePropsAndVars(void);
@@ -139,15 +144,17 @@
/** Setup mesh and material.
*
* @param mesh Finite-element mesh.
+ * @param fault Fault with friction.
* @param friction Friction model.
* @param data Data with properties for friction model.
*/
void _initialize(topology::Mesh* mesh,
- StaticFriction* friction,
- const StaticFrictionData* data);
+ faults::FaultCohesiveDynL* fault,
+ StaticFriction* friction,
+ const StaticFrictionData* data);
}; // class TestFrictionModel
#endif // pylith_friction_testfrictionmodel_hh
-// End of file
+// End of file
Modified: short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am 2010-01-25 19:43:28 UTC (rev 16171)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am 2010-01-25 19:56:34 UTC (rev 16172)
@@ -10,7 +10,9 @@
# ----------------------------------------------------------------------
#
-dist_noinst_DATA =
+dist_noinst_DATA = \
+ tri3.mesh \
+ friction_static.spatialdb
noinst_TMP =
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/friction_static.spatialdb
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/friction_static.spatialdb (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/friction_static.spatialdb 2010-01-25 19:56:34 UTC (rev 16172)
@@ -0,0 +1,15 @@
+#SPATIAL.ascii 1
+SimpleDB {
+ num-values = 1
+ value-names = friction-coefficient
+ value-units = none
+ num-locs = 2
+ data-dim = 1
+ space-dim = 2
+ cs-data = cartesian {
+ to-meters = 1.0
+ space-dim = 2
+ }
+}
+0.0 1.0 0.6
+0.0 -1.0 0.4
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/tri3.mesh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/tri3.mesh (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/tri3.mesh 2010-01-25 19:56:34 UTC (rev 16172)
@@ -0,0 +1,45 @@
+mesh = {
+ dimension = 2
+ use-index-zero = true
+ vertices = {
+ dimension = 2
+ count = 4
+ coordinates = {
+ 0 -1.0 0.0
+ 1 0.0 1.0
+ 2 0.0 -1.0
+ 3 1.0 0.0
+ }
+ }
+ cells = {
+ count = 2
+ num-corners = 3
+ simplices = {
+ 0 0 2 1
+ 1 1 2 3
+ }
+ material-ids = {
+ 0 0
+ 1 0
+ }
+ }
+ group = {
+ name = fault
+ type = vertices
+ count = 2
+ indices = {
+ 1
+ 2
+ }
+ }
+ group = {
+ name = output
+ type = vertices
+ count = 3
+ indices = {
+ 1
+ 2
+ 3
+ }
+ }
+}
More information about the CIG-COMMITS
mailing list