[cig-commits] r15819 - in short/3D/PyLith/branches/pylith-friction: libsrc/faults unittests/libtests/faults unittests/libtests/faults/data unittests/pytests/faults unittests/pytests/faults/data
brad at geodynamics.org
brad at geodynamics.org
Fri Oct 16 16:19:13 PDT 2009
Author: brad
Date: 2009-10-16 16:19:12 -0700 (Fri, 16 Oct 2009)
New Revision: 15819
Added:
short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.cc
short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.hh
short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/slipfn.timedb
short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/TestTimeHistorySlipFn.py
short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/data/slipfn.timedb
Modified:
short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.cc
short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/Makefile.am
short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/Makefile.am
short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/Makefile.am
short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/testfaults.py
Log:
Finished unit tests for TimeHistorySlipFn.
Modified: short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.cc 2009-10-16 15:31:15 UTC (rev 15818)
+++ short/3D/PyLith/branches/pylith-friction/libsrc/faults/TimeHistorySlipFn.cc 2009-10-16 23:19:12 UTC (rev 15819)
@@ -59,6 +59,8 @@
_dbAmplitude = 0; // :TODO: Use shared pointer
_dbSlipTime = 0; // :TODO: Use shared pointer
+ if (0 != _dbTimeHistory)
+ _dbTimeHistory->close();
_dbTimeHistory = 0; // :TODO: Use shared pointer
} // deallocate
@@ -96,7 +98,8 @@
assert(0 != _parameters);
_parameters->add("slip amplitude", "slip_amplitude");
- topology::Field<topology::SubMesh>& slipAmplitude = _parameters->get("slip amplitude");
+ topology::Field<topology::SubMesh>& slipAmplitude =
+ _parameters->get("slip amplitude");
slipAmplitude.newSection(vertices, spaceDim);
slipAmplitude.allocate();
slipAmplitude.scale(lengthScale);
@@ -234,7 +237,8 @@
for (label_sequence::iterator v_iter=verticesBegin;
v_iter != verticesEnd;
++v_iter) {
- slipAmplitudeSection->restrictPoint(*v_iter, &_slipVertex[0], _slipVertex.size());
+ slipAmplitudeSection->restrictPoint(*v_iter,
+ &_slipVertex[0], _slipVertex.size());
slipTimeSection->restrictPoint(*v_iter, &_slipTimeVertex, 1);
double relTime = t - _slipTimeVertex;
@@ -257,7 +261,7 @@
slipSection->updateAddPoint(*v_iter, &_slipVertex[0]);
} // for
- PetscLogFlops(vertices->size() * 1);
+ PetscLogFlops(vertices->size() * 3);
} // slip
// ----------------------------------------------------------------------
@@ -269,6 +273,7 @@
{ // slipIncr
assert(0 != slip);
assert(0 != _parameters);
+ assert(0 != _dbTimeHistory);
// Get vertices in fault mesh
const ALE::Obj<SieveMesh>& sieveMesh = slip->mesh().sieveMesh();
@@ -328,7 +333,7 @@
slipSection->updateAddPoint(*v_iter, &_slipVertex[0]);
} // for
- PetscLogFlops(vertices->size() * 2);
+ PetscLogFlops(vertices->size() * 6);
} // slipIncr
// ----------------------------------------------------------------------
Modified: short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/Makefile.am 2009-10-16 15:31:15 UTC (rev 15818)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/Makefile.am 2009-10-16 23:19:12 UTC (rev 15819)
@@ -27,6 +27,7 @@
TestConstRateSlipFn.cc \
TestBruneSlipFn.cc \
TestLiuCosSlipFn.cc \
+ TestTimeHistorySlipFn.cc \
TestEqKinSrc.cc \
TestFaultCohesiveKin.cc \
TestFaultCohesiveKinLine2.cc \
@@ -49,7 +50,7 @@
noinst_HEADERS = \
TestBruneSlipFn.hh \
- TestLiuCosSlipFn.hh \
+ TestTimeHistorySlipFn.hh \
TestConstRateSlipFn.hh \
TestStepSlipFn.hh \
TestEqKinSrc.hh \
Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.cc
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.cc (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.cc 2009-10-16 23:19:12 UTC (rev 15819)
@@ -0,0 +1,498 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestTimeHistorySlipFn.hh" // Implementation of class methods
+
+#include "pylith/faults/TimeHistorySlipFn.hh" // USES TimeHistorySlipFn
+
+#include "pylith/faults/CohesiveTopology.hh" // USES CohesiveTopology
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/topology/Fields.hh" // USES Fields
+#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 "spatialdata/spatialdb/TimeHistory.hh" // USES TimeHistory
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::faults::TestTimeHistorySlipFn );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::SieveSubMesh SieveSubMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+namespace pylith {
+ namespace faults {
+ namespace _TestTimeHistorySlipFn {
+ struct DataStruct {
+ const char* meshFilename;
+ const char* faultLabel;
+ const int faultId;
+ const char* finalSlipFilename;
+ const char* slipTimeFilename;
+ const char* timeHistoryFilename;
+ const int* constraintPts;
+ const double* amplitudeE;
+ const double* slipTimeE;
+ const int numConstraintPts;
+ }; // DataStruct
+ } // _TestTimeHistorySlipFn
+ } // faults
+} // pylith
+
+// ----------------------------------------------------------------------
+// Test constructor.
+void
+pylith::faults::TestTimeHistorySlipFn::testConstructor(void)
+{ // testConstructor
+ TimeHistorySlipFn slipfn;
+} // testConstructor
+
+// ----------------------------------------------------------------------
+// Test dbAmplitude().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbAmplitude(void)
+{ // testDbAmplitude
+ const char* label = "database ABC";
+ TimeHistorySlipFn slipfn;
+
+ spatialdata::spatialdb::SimpleDB db(label);
+ slipfn.dbAmplitude(&db);
+
+ CPPUNIT_ASSERT(0 != slipfn._dbAmplitude);
+ CPPUNIT_ASSERT_EQUAL(std::string(label),
+ std::string(slipfn._dbAmplitude->label()));
+ CPPUNIT_ASSERT(0 == slipfn._dbSlipTime);
+ CPPUNIT_ASSERT(0 == slipfn._dbTimeHistory);
+} // testDbAmplitude
+
+// ----------------------------------------------------------------------
+// Test dbSlipTime().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbSlipTime(void)
+{ // testDbSlipTime
+ const char* label = "database ABCD";
+ TimeHistorySlipFn slipfn;
+
+ spatialdata::spatialdb::SimpleDB db(label);
+ slipfn.dbSlipTime(&db);
+
+ CPPUNIT_ASSERT(0 != slipfn._dbSlipTime);
+ CPPUNIT_ASSERT_EQUAL(std::string(label),
+ std::string(slipfn._dbSlipTime->label()));
+ CPPUNIT_ASSERT(0 == slipfn._dbAmplitude);
+ CPPUNIT_ASSERT(0 == slipfn._dbTimeHistory);
+} // testDbSlipTime
+
+// ----------------------------------------------------------------------
+// Test dbTimeHistory().
+void
+pylith::faults::TestTimeHistorySlipFn::testDbTimeHistory(void)
+{ // testDbTimeHistory
+ const char* label = "database ABCDE";
+ TimeHistorySlipFn slipfn;
+
+ spatialdata::spatialdb::TimeHistory db(label);
+ slipfn.dbTimeHistory(&db);
+
+ CPPUNIT_ASSERT(0 != slipfn._dbTimeHistory);
+ CPPUNIT_ASSERT_EQUAL(std::string(label),
+ std::string(slipfn._dbTimeHistory->label()));
+ CPPUNIT_ASSERT(0 == slipfn._dbAmplitude);
+ CPPUNIT_ASSERT(0 == slipfn._dbSlipTime);
+} // testDbTimeHistory
+
+// ----------------------------------------------------------------------
+// Test initialize() in 1-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize1D(void)
+{ // testInitialize1D
+ const char* meshFilename = "data/line2.mesh";
+ const char* faultLabel = "fault";
+ const int faultId = 2;
+ const char* finalSlipFilename = "data/line2_finalslip.spatialdb";
+ const char* slipTimeFilename = "data/line2_sliptime.spatialdb";
+ const char* timeHistoryFilename = "data/slipfn.timedb";
+ const int constraintPts[] = { 3 };
+ const double amplitudeE[] = { 2.3 };
+ const double slipTimeE[] = { 1.2 };
+ const int numConstraintPts = 1;
+
+ _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+ faultLabel,
+ faultId,
+ finalSlipFilename,
+ slipTimeFilename,
+ timeHistoryFilename,
+ constraintPts,
+ amplitudeE,
+ slipTimeE,
+ numConstraintPts};
+ _testInitialize(data);
+} // testInitialize1D
+
+// ----------------------------------------------------------------------
+// Test initialize() in 2-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize2D(void)
+{ // testInitialize2D
+ const char* meshFilename = "data/tri3.mesh";
+ const char* faultLabel = "fault";
+ const int faultId = 2;
+ const char* finalSlipFilename = "data/tri3_finalslip.spatialdb";
+ const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
+ const char* timeHistoryFilename = "data/slipfn.timedb";
+ const int constraintPts[] = { 3, 4 };
+ const double amplitudeE[] = { 2.3, 0.1,
+ 2.4, 0.2};
+ const double slipTimeE[] = { 1.2, 1.3 };
+ const int numConstraintPts = 2;
+
+ _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+ faultLabel,
+ faultId,
+ finalSlipFilename,
+ slipTimeFilename,
+ timeHistoryFilename,
+ constraintPts,
+ amplitudeE,
+ slipTimeE,
+ numConstraintPts};
+ _testInitialize(data);
+} // testInitialize2D
+
+// ----------------------------------------------------------------------
+// Test initialize() in 3-D.
+void
+pylith::faults::TestTimeHistorySlipFn::testInitialize3D(void)
+{ // testInitialize3D
+ const char* meshFilename = "data/tet4.mesh";
+ const char* faultLabel = "fault";
+ const int faultId = 2;
+ const char* finalSlipFilename = "data/tet4_finalslip.spatialdb";
+ const char* slipTimeFilename = "data/tet4_sliptime.spatialdb";
+ const char* timeHistoryFilename = "data/slipfn.timedb";
+ const int constraintPts[] = { 3, 4, 5 };
+ const double amplitudeE[] = { 2.3, -0.7, 0.1,
+ 2.4, -0.8, 0.2,
+ 2.5, -0.9, 0.3 };
+ const double slipTimeE[] = { 1.2, 1.3, 1.4 };
+ const int numConstraintPts = 3;
+
+ _TestTimeHistorySlipFn::DataStruct data = {meshFilename,
+ faultLabel,
+ faultId,
+ finalSlipFilename,
+ slipTimeFilename,
+ timeHistoryFilename,
+ constraintPts,
+ amplitudeE,
+ slipTimeE,
+ numConstraintPts};
+ _testInitialize(data);
+} // testInitialize3D
+
+// ----------------------------------------------------------------------
+// Test slip().
+void
+pylith::faults::TestTimeHistorySlipFn::testSlip(void)
+{ // testSlip
+ const double slipTimeE[] = { 1.2, 1.3 };
+ const double slipE[] = { 0.92, 0.04,
+ 0.84, 0.07 };
+ const double originTime = 5.064;
+
+ topology::Mesh mesh;
+ topology::SubMesh faultMesh;
+ TimeHistorySlipFn slipfn;
+ spatialdata::spatialdb::TimeHistory th;
+ _initialize(&mesh, &faultMesh, &slipfn, &th, originTime);
+
+ const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+ CPPUNIT_ASSERT(0 != cs);
+
+ const int spaceDim = cs->spaceDim();
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+ topology::Field<topology::SubMesh> slip(faultMesh);
+ slip.newSection(vertices, spaceDim);
+ slip.allocate();
+
+ const double t = 2.0;
+ slipfn.slip(&slip, originTime+t);
+
+ const double tolerance = 1.0e-06;
+ int iPoint = 0;
+ const ALE::Obj<RealSection>& slipSection = slip.section();
+ CPPUNIT_ASSERT(!slipSection.isNull());
+ for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+ v_iter != verticesEnd;
+ ++v_iter, ++iPoint) {
+ const int fiberDim = slipSection->getFiberDimension(*v_iter);
+ CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+ const double* vals = slipSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(0 != vals);
+
+ for (int iDim=0; iDim < fiberDim; ++iDim)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iPoint*spaceDim+iDim],
+ vals[iDim], tolerance);
+ } // for
+} // testSlip
+
+// ----------------------------------------------------------------------
+// Test slipIncr().
+void
+pylith::faults::TestTimeHistorySlipFn::testSlipIncr(void)
+{ // testSlipIncr
+ const double slipTimeE[] = { 1.2, 1.3 };
+ const double slipE[] = { 0.92, 0.04,
+ 0.984, 0.082};
+ const double originTime = 1.064;
+
+ topology::Mesh mesh;
+ topology::SubMesh faultMesh;
+ TimeHistorySlipFn slipfn;
+ spatialdata::spatialdb::TimeHistory th;
+ _initialize(&mesh, &faultMesh, &slipfn, &th, originTime);
+
+ const spatialdata::geocoords::CoordSys* cs = faultMesh.coordsys();
+ CPPUNIT_ASSERT(0 != cs);
+
+ const int spaceDim = cs->spaceDim();
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ const ALE::Obj<SieveMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+ topology::Field<topology::SubMesh> slip(faultMesh);
+ slip.newSection(vertices, spaceDim);
+ slip.allocate();
+
+ const double t0 = 3.2;
+ const double t1 = 9.7;
+ slipfn.slipIncr(&slip, originTime+t0, originTime+t1);
+
+ const double tolerance = 1.0e-06;
+ int iPoint = 0;
+ const ALE::Obj<RealSection>& slipSection = slip.section();
+ CPPUNIT_ASSERT(!slipSection.isNull());
+ for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+ v_iter != verticesEnd;
+ ++v_iter, ++iPoint) {
+
+ const int fiberDim = slipSection->getFiberDimension(*v_iter);
+ CPPUNIT_ASSERT_EQUAL(spaceDim, fiberDim);
+ const double* vals = slipSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(0 != vals);
+
+ for (int iDim=0; iDim < fiberDim; ++iDim)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(slipE[iPoint*spaceDim+iDim],
+ vals[iDim], tolerance);
+ } // for
+} // testSlipIncr
+
+// ----------------------------------------------------------------------
+// Initialize TimeHistorySlipFn.
+void
+pylith::faults::TestTimeHistorySlipFn::_initialize(topology::Mesh* mesh,
+ topology::SubMesh* faultMesh,
+ TimeHistorySlipFn* slipfn,
+ spatialdata::spatialdb::TimeHistory* th,
+ const double originTime)
+{ // _initialize
+ assert(0 != slipfn);
+
+ const char* meshFilename = "data/tri3.mesh";
+ const char* faultLabel = "fault";
+ const int faultId = 2;
+ const char* finalSlipFilename = "data/tri3_finalslip.spatialdb";
+ const char* slipTimeFilename = "data/tri3_sliptime.spatialdb";
+ const char* timeHistoryFilename = "data/slipfn.timedb";
+
+ meshio::MeshIOAscii meshIO;
+ meshIO.filename(meshFilename);
+ meshIO.debug(false);
+ meshIO.interpolate(false);
+ meshIO.read(mesh);
+
+ // Set up coordinates
+ spatialdata::geocoords::CSCart cs;
+ cs.setSpaceDim(mesh->dimension());
+ cs.initialize();
+ mesh->coordsys(&cs);
+
+ // Create fault mesh
+ int firstFaultVertex = 0;
+ int firstFaultCell = mesh->sieveMesh()->getIntSection(faultLabel)->size();
+ const bool useLagrangeConstraints = true;
+ if (useLagrangeConstraints) {
+ firstFaultCell += mesh->sieveMesh()->getIntSection(faultLabel)->size();
+ }
+ ALE::Obj<ALE::Mesh> faultBoundary = 0;
+ const ALE::Obj<SieveMesh>& sieveMesh = mesh->sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
+ CohesiveTopology::createFault(faultMesh, faultBoundary,
+ *mesh, sieveMesh->getIntSection(faultLabel));
+ CohesiveTopology::create(mesh, *faultMesh, faultBoundary,
+ sieveMesh->getIntSection(faultLabel),
+ faultId,
+ firstFaultVertex, firstFaultCell,
+ useLagrangeConstraints);
+ // Need to copy coordinates from mesh to fault mesh since we are not
+ // using create() instead of createParallel().
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh->sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ faultSieveMesh->setRealSection("coordinates",
+ sieveMesh->getRealSection("coordinates"));
+
+ // Setup databases
+ spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");
+ spatialdata::spatialdb::SimpleIOAscii ioFinalSlip;
+ ioFinalSlip.filename(finalSlipFilename);
+ dbAmplitude.ioHandler(&ioFinalSlip);
+
+ spatialdata::spatialdb::SimpleDB dbSlipTime("slip time");
+ spatialdata::spatialdb::SimpleIOAscii ioSlipTime;
+ ioSlipTime.filename(slipTimeFilename);
+ dbSlipTime.ioHandler(&ioSlipTime);
+
+ th->label("time history");
+ th->filename(timeHistoryFilename);
+
+ spatialdata::units::Nondimensional normalizer;
+
+ // setup TimeHistorySlipFn
+ slipfn->dbAmplitude(&dbAmplitude);
+ slipfn->dbSlipTime(&dbSlipTime);
+ slipfn->dbTimeHistory(th);
+
+ slipfn->initialize(*faultMesh, normalizer, originTime);
+} // _initialize
+
+// ----------------------------------------------------------------------
+// Test initialize().
+void
+pylith::faults::TestTimeHistorySlipFn::_testInitialize(const _TestTimeHistorySlipFn::DataStruct& data)
+{ // _testInitialize
+ typedef std::set<Mesh::point_type>::const_iterator vert_iterator;
+
+ // Setup mesh
+ topology::Mesh mesh;
+ meshio::MeshIOAscii meshIO;
+ meshIO.filename(data.meshFilename);
+ meshIO.debug(false);
+ meshIO.interpolate(false);
+ meshIO.read(&mesh);
+
+ // Set up coordinates
+ spatialdata::geocoords::CSCart cs;
+ const int spaceDim = mesh.dimension();
+ cs.setSpaceDim(spaceDim);
+ cs.initialize();
+ mesh.coordsys(&cs);
+
+ // Create fault mesh
+ topology::SubMesh faultMesh;
+ int firstFaultVertex = 0;
+ int firstFaultCell = mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+ const bool useLagrangeConstraints = true;
+ if (useLagrangeConstraints) {
+ firstFaultCell += mesh.sieveMesh()->getIntSection(data.faultLabel)->size();
+ }
+ ALE::Obj<ALE::Mesh> faultBoundary = 0;
+ const ALE::Obj<SieveMesh>& sieveMesh = mesh.sieveMesh();
+ CPPUNIT_ASSERT(!sieveMesh.isNull());
+ CohesiveTopology::createFault(&faultMesh, faultBoundary,
+ mesh, sieveMesh->getIntSection(data.faultLabel));
+ CohesiveTopology::create(&mesh, faultMesh, faultBoundary,
+ sieveMesh->getIntSection(data.faultLabel),
+ data.faultId,
+ firstFaultVertex, firstFaultCell,
+ useLagrangeConstraints);
+ // Need to copy coordinates from mesh to fault mesh since we are not
+ // using create() instead of createParallel().
+ const ALE::Obj<SieveSubMesh>& faultSieveMesh = faultMesh.sieveMesh();
+ CPPUNIT_ASSERT(!faultSieveMesh.isNull());
+ faultSieveMesh->setRealSection("coordinates",
+ sieveMesh->getRealSection("coordinates"));
+
+ // Setup databases
+ spatialdata::spatialdb::SimpleDB dbAmplitude("slip amplitude");
+ spatialdata::spatialdb::SimpleIOAscii ioFinalSlip;
+ ioFinalSlip.filename(data.finalSlipFilename);
+ dbAmplitude.ioHandler(&ioFinalSlip);
+
+ spatialdata::spatialdb::SimpleDB dbSlipTime("slip time");
+ spatialdata::spatialdb::SimpleIOAscii ioSlipTime;
+ ioSlipTime.filename(data.slipTimeFilename);
+ dbSlipTime.ioHandler(&ioSlipTime);
+
+ spatialdata::spatialdb::TimeHistory dbTimeHistory("time history");
+ dbTimeHistory.filename(data.timeHistoryFilename);
+
+ // setup TimeHistorySlipFn
+ TimeHistorySlipFn slipfn;
+ slipfn.dbAmplitude(&dbAmplitude);
+ slipfn.dbSlipTime(&dbSlipTime);
+ slipfn.dbTimeHistory(&dbTimeHistory);
+
+ spatialdata::units::Nondimensional normalizer;
+ const double originTime = 5.353;
+
+ slipfn.initialize(faultMesh, normalizer, originTime);
+
+ const ALE::Obj<SieveMesh::label_sequence>& vertices =
+ faultSieveMesh->depthStratum(0);
+ const SieveMesh::label_sequence::iterator verticesEnd = vertices->end();
+
+ CPPUNIT_ASSERT(0 != slipfn._parameters);
+ const ALE::Obj<RealSection>& finalSlipSection =
+ slipfn._parameters->get("slip amplitude").section();
+ CPPUNIT_ASSERT(!finalSlipSection.isNull());
+ const ALE::Obj<RealSection>& slipTimeSection =
+ slipfn._parameters->get("slip time").section();
+ CPPUNIT_ASSERT(!slipTimeSection.isNull());
+
+ const double tolerance = 1.0e-06;
+ int iPoint = 0;
+ for (SieveMesh::label_sequence::iterator v_iter=vertices->begin();
+ v_iter != verticesEnd;
+ ++v_iter, ++iPoint) {
+ CPPUNIT_ASSERT_EQUAL(spaceDim, finalSlipSection->getFiberDimension(*v_iter));
+ const double* amplitudeVertex = finalSlipSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(0 != amplitudeVertex);
+ for (int iDim=0; iDim < spaceDim; ++iDim)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(data.amplitudeE[iPoint*spaceDim+iDim],
+ amplitudeVertex[iDim],
+ tolerance);
+
+ CPPUNIT_ASSERT_EQUAL(1, slipTimeSection->getFiberDimension(*v_iter));
+ const double* slipTimeVertex = slipTimeSection->restrictPoint(*v_iter);
+ CPPUNIT_ASSERT(0 != slipTimeVertex);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(data.slipTimeE[iPoint]+originTime,
+ slipTimeVertex[0], tolerance);
+ } // for
+} // _testInitialize
+
+
+// End of file
Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.hh
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.hh (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/TestTimeHistorySlipFn.hh 2009-10-16 23:19:12 UTC (rev 15819)
@@ -0,0 +1,131 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/faults/TestTimeHistorySlipFn.hh
+ *
+ * @brief C++ TestTimeHistorySlipFn object
+ *
+ * C++ unit testing for TimeHistorySlipFn.
+ */
+
+#if !defined(pylith_faults_testtimehistoryslipfn_hh)
+#define pylith_faults_testtimehistoryslipfn_hh
+
+#include "pylith/faults/faultsfwd.hh" // USES TimeHistorySlipFn
+#include "pylith/topology/topologyfwd.hh" // USES Mesh, SubMesh
+#include "spatialdata/spatialdb/spatialdbfwd.hh" // USES TimeHistory
+
+#include <cppunit/extensions/HelperMacros.h>
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace faults {
+ class TestTimeHistorySlipFn;
+
+ namespace _TestTimeHistorySlipFn {
+ struct DataStruct;
+ } // _TimeHistorySlipTimeFn
+ } // faults
+} // pylith
+
+/// C++ unit testing for TimeHistorySlipFn
+class pylith::faults::TestTimeHistorySlipFn : public CppUnit::TestFixture
+{ // class TestTimeHistorySlipFn
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestTimeHistorySlipFn );
+
+ CPPUNIT_TEST( testConstructor );
+ CPPUNIT_TEST( testDbAmplitude );
+ CPPUNIT_TEST( testDbSlipTime );
+ CPPUNIT_TEST( testDbTimeHistory );
+ CPPUNIT_TEST( testInitialize1D );
+ CPPUNIT_TEST( testInitialize2D );
+ CPPUNIT_TEST( testInitialize3D );
+ CPPUNIT_TEST( testSlip );
+ CPPUNIT_TEST( testSlipIncr );
+
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Test constructor.
+ void testConstructor(void);
+
+ /// Test dbAmplitude().
+ void testDbAmplitude(void);
+
+ /// Test dbSlipTime().
+ void testDbSlipTime(void);
+
+ /// Test dbTimeHistory().
+ void testDbTimeHistory(void);
+
+ /// Test initialize() in 1-D.
+ void testInitialize1D(void);
+
+ /// Test initialize() in 2-D.
+ void testInitialize2D(void);
+
+ /// Test initialize() in 3-D.
+ void testInitialize3D(void);
+
+ /// Test slip().
+ void testSlip(void);
+
+ /// Test slipIncr().
+ void testSlipIncr(void);
+
+ // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+
+ /** Initialize TimeHistorySlipFn.
+ *
+ * @param mesh Finite-element mesh of domain.
+ * @param faultMesh Finite-element mesh of fault.
+ * @param slipfn Step slip function.
+ * @param th Time history database.
+ * @param originTime Origin time for earthquake rupture.
+ */
+ static
+ void _initialize(topology::Mesh* mesh,
+ topology::SubMesh* faultMesh,
+ TimeHistorySlipFn* slipfn,
+ spatialdata::spatialdb::TimeHistory* th,
+ const double originTime);
+
+ /** Test intialize().
+ *
+ * @param data Data for initialization and testing of TimeHistorySlipFn.
+ */
+ static
+ void _testInitialize(const _TestTimeHistorySlipFn::DataStruct& data);
+
+ /** Slip time function.
+ *
+ * @param t Time relative to when slip begins.
+ * @param finalSlip Final slip.
+ * @param riseTime Rise time (t95).
+ */
+ static
+ double _slipFn(const double t,
+ const double finalSlip,
+ const double riseTime);
+
+}; // class TestTimeHistorySlipFn
+
+#endif // pylith_faults_testtimehistoryslipfn_hh
+
+
+// End of file
Modified: short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/Makefile.am 2009-10-16 15:31:15 UTC (rev 15818)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/Makefile.am 2009-10-16 23:19:12 UTC (rev 15819)
@@ -11,6 +11,7 @@
#
dist_noinst_DATA = \
+ slipfn.timedb \
bulkprops_1d.spatialdb \
bulkprops_2d.spatialdb \
bulkprops_3d.spatialdb \
Added: short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/slipfn.timedb
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/slipfn.timedb (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/libtests/faults/data/slipfn.timedb 2009-10-16 23:19:12 UTC (rev 15819)
@@ -0,0 +1,10 @@
+#TIME HISTORY ascii
+TimeHistory {
+ num-points = 5
+ time-units = second
+}
+ 0.0 0.0
+ 1.0 0.5
+ 4.0 0.8
+ 8.0 1.0
+10.0 1.0
Modified: short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/Makefile.am 2009-10-16 15:31:15 UTC (rev 15818)
+++ short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/Makefile.am 2009-10-16 23:19:12 UTC (rev 15819)
@@ -27,7 +27,8 @@
TestFaultCohesiveKin.py \
TestLiuCosSlipFn.py \
TestSingleRupture.py \
- TestStepSlipFn.py
+ TestStepSlipFn.py \
+ TestTimeHistorySlipFn.py
# End of file
Added: short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/TestTimeHistorySlipFn.py
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/TestTimeHistorySlipFn.py (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/TestTimeHistorySlipFn.py 2009-10-16 23:19:12 UTC (rev 15819)
@@ -0,0 +1,93 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/faults/TestTimeHistorySlipFn.py
+
+## @brief Unit testing of TimeHistorySlipFn object.
+
+import unittest
+
+from pylith.faults.TimeHistorySlipFn import TimeHistorySlipFn
+
+# ----------------------------------------------------------------------
+class TestTimeHistorySlipFn(unittest.TestCase):
+ """
+ Unit testing of TimeHistorySlipFn object.
+ """
+
+ def test_constructor(self):
+ """
+ Test constructor.
+ """
+ slipFn = TimeHistorySlipFn()
+ return
+
+
+ def test_configure(self):
+ """
+ Test constructor.
+ """
+ slipFn = TimeHistorySlipFn()
+ slipFn._configure()
+ return
+
+
+ def test_initialize(self):
+ """
+ Test initialize().
+ """
+ from spatialdata.spatialdb.SimpleDB import SimpleDB
+ from spatialdata.spatialdb.SimpleIOAscii import SimpleIOAscii
+ from spatialdata.spatialdb.TimeHistory import TimeHistory
+
+ ioFinalSlip = SimpleIOAscii()
+ ioFinalSlip.inventory.filename = "finalslip.spatialdb"
+ ioFinalSlip._configure()
+ dbFinalSlip = SimpleDB()
+ dbFinalSlip.inventory.iohandler = ioFinalSlip
+ dbFinalSlip.inventory.label = "slip amplitude"
+ dbFinalSlip._configure()
+
+ ioSlipTime = SimpleIOAscii()
+ ioSlipTime.inventory.filename = "sliptime.spatialdb"
+ ioSlipTime._configure()
+ dbSlipTime = SimpleDB()
+ dbSlipTime.inventory.iohandler = ioSlipTime
+ dbSlipTime.inventory.label = "slip time"
+ dbSlipTime._configure()
+
+ dbTimeHistory = TimeHistory()
+ dbTimeHistory.inventory.filename = "slipfn.timedb"
+ dbTimeHistory.inventory.label = "time history"
+ dbTimeHistory._configure()
+
+ slipFn = TimeHistorySlipFn()
+ slipFn.inventory.dbslip = dbFinalSlip
+ slipFn.inventory.dbSlipTime = dbSlipTime
+ slipFn.inventory.dbTimeHistory = dbTimeHistory
+ slipFn._configure()
+ slipFn.preinitialize()
+ slipFn.verifyConfiguration()
+ slipFn.initialize()
+ return
+
+
+ def test_factory(self):
+ """
+ Test factory method.
+ """
+ from pylith.faults.TimeHistorySlipFn import slip_time_fn
+ fn = slip_time_fn()
+ return
+
+
+# End of file
Added: short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/data/slipfn.timedb
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/data/slipfn.timedb (rev 0)
+++ short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/data/slipfn.timedb 2009-10-16 23:19:12 UTC (rev 15819)
@@ -0,0 +1,10 @@
+#TIME HISTORY ascii
+TimeHistory {
+ num-points = 5
+ time-units = second
+}
+ 0.0 0.0
+ 1.0 0.5
+ 4.0 0.8
+ 8.0 1.0
+10.0 1.0
Modified: short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/testfaults.py
===================================================================
--- short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/testfaults.py 2009-10-16 15:31:15 UTC (rev 15818)
+++ short/3D/PyLith/branches/pylith-friction/unittests/pytests/faults/testfaults.py 2009-10-16 23:19:12 UTC (rev 15819)
@@ -68,6 +68,9 @@
from TestLiuCosSlipFn import TestLiuCosSlipFn
suite.addTest(unittest.makeSuite(TestLiuCosSlipFn))
+ from TestTimeHistorySlipFn import TestTimeHistorySlipFn
+ suite.addTest(unittest.makeSuite(TestTimeHistorySlipFn))
+
from TestEqKinSrc import TestEqKinSrc
suite.addTest(unittest.makeSuite(TestEqKinSrc))
More information about the CIG-COMMITS
mailing list