[cig-commits] r16163 - in short/3D/PyLith/trunk: . unittests/libtests unittests/libtests/friction unittests/libtests/friction/data
brad at geodynamics.org
brad at geodynamics.org
Thu Jan 21 21:54:50 PST 2010
Author: brad
Date: 2010-01-21 21:54:49 -0800 (Thu, 21 Jan 2010)
New Revision: 16163
Added:
short/3D/PyLith/trunk/unittests/libtests/friction/
short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am
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/TestStatiFriction.cc
short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh
short/3D/PyLith/trunk/unittests/libtests/friction/data/
short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc
short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh
short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc
short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh
short/3D/PyLith/trunk/unittests/libtests/friction/test_friction.cc
Modified:
short/3D/PyLith/trunk/configure.ac
short/3D/PyLith/trunk/unittests/libtests/Makefile.am
Log:
Started work on setting up unit tests for fault constitutive models.
Modified: short/3D/PyLith/trunk/configure.ac
===================================================================
--- short/3D/PyLith/trunk/configure.ac 2010-01-21 21:23:26 UTC (rev 16162)
+++ short/3D/PyLith/trunk/configure.ac 2010-01-22 05:54:49 UTC (rev 16163)
@@ -254,6 +254,8 @@
unittests/libtests/faults/data/Makefile
unittests/libtests/feassemble/Makefile
unittests/libtests/feassemble/data/Makefile
+ unittests/libtests/friction/Makefile
+ unittests/libtests/friction/data/Makefile
unittests/libtests/materials/Makefile
unittests/libtests/materials/data/Makefile
unittests/libtests/meshio/Makefile
Modified: short/3D/PyLith/trunk/unittests/libtests/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/Makefile.am 2010-01-21 21:23:26 UTC (rev 16162)
+++ short/3D/PyLith/trunk/unittests/libtests/Makefile.am 2010-01-22 05:54:49 UTC (rev 16163)
@@ -14,6 +14,7 @@
bc \
faults \
feassemble \
+ friction \
materials \
meshio \
topology \
Added: short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,65 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+subpackage = friction
+include $(top_srcdir)/subpackage.am
+
+SUBDIRS = data
+
+TESTS = testfriction
+
+check_PROGRAMS = testfriction
+
+# Primary source files
+testfriction_SOURCES = \
+ test_friction.cc
+
+# TestFrictionModel.cc \
+# TestStaticFriction.cc
+
+
+noinst_HEADERS =
+
+# TestFrictionModel.hh \
+# TestStaticFriction.hh
+
+# Source files associated with testing data
+testfriction_SOURCES +=
+
+# data/FrictionModelData.cc \
+# data/StaticFrictionData.cc
+
+
+noinst_HEADERS +=
+
+# data/FrictionModelData.hh \
+# data/StaticFrictionData.hh
+
+AM_CPPFLAGS = \
+ $(PYTHON_EGG_CPPFLAGS) -I$(PYTHON_INCDIR) \
+ $(PETSC_SIEVE_FLAGS) $(PETSC_INCLUDE)
+
+testfriction_LDFLAGS = \
+ $(AM_LDFLAGS) $(PYTHON_LA_LDFLAGS)
+
+testfriction_LDADD = \
+ -lcppunit -ldl \
+ $(top_builddir)/libsrc/libpylith.la \
+ -lspatialdata \
+ $(PETSC_LIB) $(PYTHON_BLDLIBRARY) $(PYTHON_LIBS) $(PYTHON_SYSLIBS)
+
+if ENABLE_CUBIT
+ testfriction_LDADD += -lnetcdf_c++ -lnetcdf
+endif
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,751 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticMaterial.hh" // Implementation of class methods
+
+#include "data/ElasticMaterialData.hh" // USES ElasticMaterialData
+#include "data/ElasticStrain1DData.hh" // USES ElasticStrain1DData
+
+#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/Field.hh" // USES Field
+#include "pylith/meshio/MeshIOAscii.hh" // USES MeshIOAscii
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "pylith/materials/ElasticStrain1D.hh" // USES ElasticStrain1D
+#include "pylith/feassemble/Quadrature.hh" // USES Quadrature
+#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+
+#include "pylith/utils/array.hh" // USES double_array
+
+#include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
+#include "spatialdata/spatialdb/SimpleIOAscii.hh" // USES SimpleIOAscii
+#include "spatialdata/geocoords/CSCart.hh" // USES CSCart
+#include "spatialdata/units/Nondimensional.hh" // USES Nondimensional
+
+#include <cstring> // USES memcpy()
+
+//#define PRECOMPUTE_GEOMETRY
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticMaterial );
+
+// ----------------------------------------------------------------------
+typedef pylith::topology::Mesh::SieveMesh SieveMesh;
+typedef pylith::topology::Mesh::RealSection RealSection;
+
+// ----------------------------------------------------------------------
+// Test dbInitialStress()
+void
+pylith::materials::TestElasticMaterial::testDBInitialStress(void)
+{ // testDBInitialStress
+ const std::string& label = "my_database";
+ spatialdata::spatialdb::SimpleDB db;
+ db.label(label.c_str());
+
+ ElasticIsotropic3D material;
+ material.dbInitialStress(&db);
+
+ CPPUNIT_ASSERT(0 != material._dbInitialStress);
+ CPPUNIT_ASSERT_EQUAL(label, std::string(material._dbInitialStress->label()));
+} // testDBInitialStress
+
+// ----------------------------------------------------------------------
+// Test dbInitialStrain()
+void
+pylith::materials::TestElasticMaterial::testDBInitialStrain(void)
+{ // testDBInitialStrain
+ const std::string& label = "my_database";
+ spatialdata::spatialdb::SimpleDB db;
+ db.label(label.c_str());
+
+ ElasticIsotropic3D material;
+ material.dbInitialStrain(&db);
+
+ CPPUNIT_ASSERT(0 != material._dbInitialStrain);
+ CPPUNIT_ASSERT_EQUAL(label, std::string(material._dbInitialStrain->label()));
+} // testDBInitialStrain
+
+// ----------------------------------------------------------------------
+// Test initialize()
+void
+pylith::materials::TestElasticMaterial::testInitialize(void)
+{ // testInitialize
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ const double tolerance = 1.0e-06;
+ const int tensorSize = material._tensorSize;
+ const int numQuadPts = data.numLocs;
+
+ // Test initialStress field
+ CPPUNIT_ASSERT(0 != material._initialFields);
+ const ALE::Obj<RealSection>& stressSection =
+ material._initialFields->get("initial stress").section();
+ CPPUNIT_ASSERT(!stressSection.isNull());
+ int fiberDim = numQuadPts * tensorSize;
+ CPPUNIT_ASSERT_EQUAL(fiberDim, stressSection->getFiberDimension(cell));
+ const double* initialStress = stressSection->restrictPoint(cell);
+ CPPUNIT_ASSERT(0 != initialStress);
+ const double* initialStressE = data.initialStress;
+ CPPUNIT_ASSERT(0 != initialStressE);
+ for (int i=0; i < fiberDim; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStress[i]/initialStressE[i],
+ tolerance);
+
+ // Test initialStrain field
+ CPPUNIT_ASSERT(0 != material._initialFields);
+ const ALE::Obj<RealSection>& strainSection =
+ material._initialFields->get("initial strain").section();
+ CPPUNIT_ASSERT(!strainSection.isNull());
+ fiberDim = numQuadPts * tensorSize;
+ CPPUNIT_ASSERT_EQUAL(fiberDim, strainSection->getFiberDimension(cell));
+ const double* initialStrain = strainSection->restrictPoint(cell);
+ CPPUNIT_ASSERT(0 != initialStrain);
+ const double* initialStrainE = data.initialStrain;
+ CPPUNIT_ASSERT(0 != initialStrainE);
+ for (int i=0; i < fiberDim; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStrain[i]/initialStrainE[i],
+ tolerance);
+
+ // Test cell arrays
+ size_t size = data.numLocs*data.numPropsQuadPt;
+ CPPUNIT_ASSERT_EQUAL(size, material._propertiesCell.size());
+
+ size = data.numLocs*data.numVarsQuadPt;
+ CPPUNIT_ASSERT_EQUAL(size, material._stateVarsCell.size());
+
+ size = data.numLocs*tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, material._initialStressCell.size());
+
+ size = data.numLocs*tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, material._initialStrainCell.size());
+
+ size = data.numLocs;
+ CPPUNIT_ASSERT_EQUAL(size, material._densityCell.size());
+
+ size = data.numLocs*tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, material._stressCell.size());
+
+ int numElasticConsts = 0;
+ switch (data.dimension)
+ { // switch
+ case 1 :
+ numElasticConsts = 1;
+ break;
+ case 2 :
+ numElasticConsts = 6;
+ break;
+ case 3 :
+ numElasticConsts = 21;
+ break;
+ default :
+ assert(0);
+ } // switch
+ size = data.numLocs*numElasticConsts;
+ CPPUNIT_ASSERT_EQUAL(size, material._elasticConstsCell.size());
+} // testInitialize
+
+// ----------------------------------------------------------------------
+// Test retrievePropsAndVars().
+void
+pylith::materials::TestElasticMaterial::testRetrievePropsAndVars(void)
+{ // testRetrievePropsAndVars
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ material.retrievePropsAndVars(cell);
+
+ const double tolerance = 1.0e-06;
+ const int tensorSize = material._tensorSize;
+ const int numQuadPts = data.numLocs;
+ const int numVarsQuadPt = data.numVarsQuadPt;
+
+ // Test cell arrays
+ const double* propertiesE = data.properties;
+ CPPUNIT_ASSERT(0 != propertiesE);
+ const double_array& properties = material._propertiesCell;
+ size_t size = data.numLocs*data.numPropsQuadPt;
+ CPPUNIT_ASSERT_EQUAL(size, properties.size());
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, properties[i]/propertiesE[i],
+ tolerance);
+
+ const double* stateVarsE = data.stateVars;
+ CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
+ (0 == numVarsQuadPt && 0 == stateVarsE) );
+ const double_array& stateVars = material._stateVarsCell;
+ size = data.numLocs*numVarsQuadPt;
+ CPPUNIT_ASSERT_EQUAL(size, stateVars.size());
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i],
+ tolerance);
+
+ const double* initialStressE = data.initialStress;
+ CPPUNIT_ASSERT(0 != initialStressE);
+ const double_array& initialStress = material._initialStressCell;
+ size = data.numLocs*tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, initialStress.size());
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStress[i]/initialStressE[i],
+ tolerance);
+
+ const double* initialStrainE = data.initialStrain;
+ CPPUNIT_ASSERT(0 != initialStrainE);
+ const double_array& initialStrain = material._initialStrainCell;
+ size = data.numLocs*tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, initialStrain.size());
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, initialStrain[i]/initialStrainE[i],
+ tolerance);
+} // testRetrievePropsAndVars
+
+// ----------------------------------------------------------------------
+// Test calcDensity()
+void
+pylith::materials::TestElasticMaterial::testCalcDensity(void)
+{ // testCalcDensity
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ material.retrievePropsAndVars(cell);
+ const double_array& density = material.calcDensity();
+
+ const int tensorSize = material._tensorSize;
+ const int numQuadPts = data.numLocs;
+
+ const double* densityE = data.density;
+ CPPUNIT_ASSERT(0 != densityE);
+ const size_t size = numQuadPts;
+ CPPUNIT_ASSERT_EQUAL(size, density.size());
+ const double tolerance = 1.0e-06;
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[i]/densityE[i], tolerance);
+} // testCalcDensity
+
+// ----------------------------------------------------------------------
+// Test calcStress()
+void
+pylith::materials::TestElasticMaterial::testCalcStress(void)
+{ // testCalcStress
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ const int tensorSize = material._tensorSize;
+ const int numQuadPts = data.numLocs;
+
+ // Setup total strain
+ double_array strain(data.strain, numQuadPts*tensorSize);
+
+ material.retrievePropsAndVars(cell);
+ const double_array& stress = material.calcStress(strain);
+
+ const double* stressE = data.stress;
+ CPPUNIT_ASSERT(0 != stressE);
+ const size_t size = numQuadPts * tensorSize;
+ CPPUNIT_ASSERT_EQUAL(size, stress.size());
+ const double tolerance = 1.0e-06;
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i], tolerance);
+} // testCalcStress
+
+// ----------------------------------------------------------------------
+// Test calcDerivElastic()
+void
+pylith::materials::TestElasticMaterial::testCalcDerivElastic(void)
+{ // testCalcDerivElastic
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ const int tensorSize = material._tensorSize;
+ const int numQuadPts = data.numLocs;
+
+ // Setup total strain
+ double_array strain(data.strain, numQuadPts*tensorSize);
+
+ material.retrievePropsAndVars(cell);
+ const double_array& elasticConsts = material.calcDerivElastic(strain);
+
+ int numElasticConsts = 0;
+ switch (data.dimension)
+ { // switch
+ case 1 :
+ numElasticConsts = 1;
+ break;
+ case 2 :
+ numElasticConsts = 6;
+ break;
+ case 3 :
+ numElasticConsts = 21;
+ break;
+ default :
+ assert(0);
+ } // switch
+
+ const double* elasticConstsE = data.elasticConsts;
+ CPPUNIT_ASSERT(0 != elasticConstsE);
+ const size_t size = numQuadPts * numElasticConsts;
+ CPPUNIT_ASSERT_EQUAL(size, elasticConsts.size());
+ const double tolerance = 1.0e-06;
+ for (size_t i=0; i < size; ++i)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i],
+ tolerance);
+} // testCalcDerivElastic
+
+// ----------------------------------------------------------------------
+// Test updateStateVars()
+void
+pylith::materials::TestElasticMaterial::testUpdateStateVars(void)
+{ // testUpdateStateVars
+ std::cout << "\n\nWARNING!! WARNING!! WARNING!!\n"
+ "Need to implement using material with state variables.\n\n";
+} // testUpdateStateVars
+
+// ----------------------------------------------------------------------
+// Test calcStableTimeStepImplicit()
+void
+pylith::materials::TestElasticMaterial::testStableTimeStepImplicit(void)
+{ // testStableTimeStepImplicit
+ topology::Mesh mesh;
+ ElasticStrain1D material;
+ ElasticStrain1DData data;
+ _initialize(&mesh, &material, &data);
+
+ // 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);
+ SieveMesh::point_type cell = *cells->begin();
+
+ material.retrievePropsAndVars(cell);
+ const double dt = material.stableTimeStepImplicit(mesh);
+
+ const double tolerance = 1.0e-06;
+ const double dtE = data.dtStableImplicit;
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, dt/dtE, tolerance);
+} // testStableTimeStepImplicit
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::materials::TestElasticMaterial::setUp(void)
+{ // setUp
+ TestMaterial::setUp();
+ _matElastic = 0;
+ _dataElastic = 0;
+} // setUp
+
+// ----------------------------------------------------------------------
+// Tear down testing data.
+void
+pylith::materials::TestElasticMaterial::tearDown(void)
+{ // tearDown
+ TestMaterial::tearDown();
+ delete _matElastic; _matElastic = 0;
+ delete _dataElastic; _dataElastic = 0;
+} // tearDown
+
+// ----------------------------------------------------------------------
+// Test _calcDensity()
+void
+pylith::materials::TestElasticMaterial::test_calcDensity(void)
+{ // _testCalcDensity
+ CPPUNIT_ASSERT(0 != _matElastic);
+ CPPUNIT_ASSERT(0 != _dataElastic);
+ const ElasticMaterialData* data = _dataElastic;
+
+ const int numLocs = data->numLocs;
+ const int numPropsQuadPt = data->numPropsQuadPt;
+ const int numVarsQuadPt = data->numVarsQuadPt;
+
+ double density = 0;
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+ numPropsQuadPt*sizeof(double));
+ memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+ numVarsQuadPt*sizeof(double));
+
+ _matElastic->_calcDensity(&density,
+ &properties[0], properties.size(),
+ &stateVars[0], stateVars.size());
+
+ const double densityE = data->density[iLoc];
+
+ const double tolerance = 1.0e-06;
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density/densityE, tolerance);
+ } // for
+} // _testCalcDensity
+
+// ----------------------------------------------------------------------
+// Test _calcStress()
+void
+pylith::materials::TestElasticMaterial::test_calcStress(void)
+{ // _testCalcStress
+ CPPUNIT_ASSERT(0 != _matElastic);
+ CPPUNIT_ASSERT(0 != _dataElastic);
+ const ElasticMaterialData* data = _dataElastic;
+
+ const bool computeStateVars = true;
+
+ const int numLocs = data->numLocs;
+ const int numPropsQuadPt = data->numPropsQuadPt;
+ const int numVarsQuadPt = data->numVarsQuadPt;
+ const int tensorSize = _matElastic->_tensorSize;
+
+ double_array stress(tensorSize);
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+ double_array strain(tensorSize);
+ double_array initialStress(tensorSize);
+ double_array initialStrain(tensorSize);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+ properties.size()*sizeof(double));
+ memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+ stateVars.size()*sizeof(double));
+ memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+ strain.size()*sizeof(double));
+ memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+ initialStress.size()*sizeof(double));
+ memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+ initialStrain.size()*sizeof(double));
+
+ _matElastic->_calcStress(&stress[0], stress.size(),
+ &properties[0], properties.size(),
+ &stateVars[0], stateVars.size(),
+ &strain[0], strain.size(),
+ &initialStress[0], initialStress.size(),
+ &initialStrain[0], initialStrain.size(),
+ computeStateVars);
+
+ const double* stressE = &data->stress[iLoc*tensorSize];
+ CPPUNIT_ASSERT(0 != stressE);
+
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < tensorSize; ++i)
+ if (fabs(stressE[i]) > tolerance)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i],
+ tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(stressE[i], stress[i],
+ tolerance);
+ } // for
+} // _testCalcStress
+
+// ----------------------------------------------------------------------
+// Test _calcElasticConsts()
+void
+pylith::materials::TestElasticMaterial::test_calcElasticConsts(void)
+{ // _testCalcElasticConsts
+ CPPUNIT_ASSERT(0 != _matElastic);
+ CPPUNIT_ASSERT(0 != _dataElastic);
+ const ElasticMaterialData* data = _dataElastic;
+
+ int numConsts = 0;
+ int tensorSize = 0;
+ switch(data->dimension)
+ { // switch
+ case 1 :
+ numConsts = 1;
+ tensorSize = 1;
+ break;
+ case 2 :
+ numConsts = 6;
+ tensorSize = 3;
+ break;
+ case 3 :
+ numConsts = 21;
+ tensorSize = 6;
+ break;
+ } // switch
+ const int numLocs = data->numLocs;
+ const int numPropsQuadPt = data->numPropsQuadPt;
+ const int numVarsQuadPt = data->numVarsQuadPt;
+
+ double_array elasticConsts(numConsts);
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+ double_array strain(tensorSize);
+ double_array initialStress(tensorSize);
+ double_array initialStrain(tensorSize);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+ numPropsQuadPt*sizeof(double));
+ memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+ numVarsQuadPt*sizeof(double));
+ memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+
+ _matElastic->_calcElasticConsts(&elasticConsts[0], elasticConsts.size(),
+ &properties[0], properties.size(),
+ &stateVars[0], stateVars.size(),
+ &strain[0], strain.size(),
+ &initialStress[0], initialStress.size(),
+ &initialStrain[0], initialStrain.size());
+
+ const double* elasticConstsE = &data->elasticConsts[iLoc*numConsts];
+ CPPUNIT_ASSERT(0 != elasticConstsE);
+
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < numConsts; ++i)
+ if (fabs(elasticConstsE[i]) > tolerance)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, elasticConsts[i]/elasticConstsE[i],
+ tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(elasticConstsE[i], elasticConsts[i],
+ tolerance);
+ } // for
+} // _testCalcElasticConsts
+
+// ----------------------------------------------------------------------
+// Test _updateStateVars()
+void
+pylith::materials::TestElasticMaterial::test_updateStateVars(void)
+{ // test_updateStateVars
+ CPPUNIT_ASSERT(0 != _matElastic);
+ CPPUNIT_ASSERT(0 != _dataElastic);
+ const ElasticMaterialData* data = _dataElastic;
+
+ const bool computeStateVars = true;
+
+ const int numLocs = data->numLocs;
+ const int numPropsQuadPt = data->numPropsQuadPt;
+ const int numVarsQuadPt = data->numVarsQuadPt;
+ const int tensorSize = _matElastic->_tensorSize;
+
+ double_array properties(numPropsQuadPt);
+ double_array stateVars(numVarsQuadPt);
+ double_array strain(tensorSize);
+ double_array initialStress(tensorSize);
+ double_array initialStrain(tensorSize);
+
+ for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+ memcpy(&properties[0], &data->properties[iLoc*numPropsQuadPt],
+ numPropsQuadPt*sizeof(double));
+ memcpy(&stateVars[0], &data->stateVars[iLoc*numVarsQuadPt],
+ numVarsQuadPt*sizeof(double));
+ memcpy(&strain[0], &data->strain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStress[0], &data->initialStress[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+ memcpy(&initialStrain[0], &data->initialStrain[iLoc*tensorSize],
+ tensorSize*sizeof(double));
+
+ _matElastic->_updateStateVars(&stateVars[0], stateVars.size(),
+ &properties[0], properties.size(),
+ &strain[0], strain.size(),
+ &initialStress[0], initialStress.size(),
+ &initialStrain[0], initialStrain.size());
+
+ const double* stateVarsE =
+ (numVarsQuadPt > 0) ? &data->stateVarsUpdated[iLoc*numVarsQuadPt] : 0;
+ CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
+ (0 == numVarsQuadPt && 0 == stateVarsE) );
+
+ const double tolerance = 1.0e-06;
+ for (int i=0; i < numVarsQuadPt; ++i)
+ if (fabs(stateVarsE[i]) > tolerance)
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i],
+ tolerance);
+ else
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i],
+ tolerance);
+ } // for
+} // test_updateStateVars
+
+// ----------------------------------------------------------------------
+// Test _stableTimeStepImplicit()
+void
+pylith::materials::TestElasticMaterial::test_stableTimeStepImplicit(void)
+{ // _testCalcDensity
+ CPPUNIT_ASSERT(0 != _matElastic);
+ CPPUNIT_ASSERT(0 != _dataElastic);
+ const ElasticMaterialData* data = _dataElastic;
+
+ const double dt =
+ _matElastic->_stableTimeStepImplicit(data->properties, data->numPropsQuadPt,
+ data->stateVars, data->numVarsQuadPt);
+
+ const double dtE = data->dtStableImplicit;
+
+ const double tolerance = 1.0e-06;
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, dt/dtE, tolerance);
+} // _testStableTimeStepImplicit
+
+// ----------------------------------------------------------------------
+// Setup nondimensionalization.
+void
+pylith::materials::TestElasticMaterial::setupNormalizer(void)
+{ // setupNormalizer
+ spatialdata::units::Nondimensional normalizer;
+ normalizer.lengthScale(_data->lengthScale);
+ normalizer.pressureScale(_data->pressureScale);
+ normalizer.timeScale(_data->timeScale);
+ normalizer.densityScale(_data->densityScale);
+ _material->normalizer(normalizer);
+ _matElastic->normalizer(normalizer);
+} // setupNormalizer
+
+// ----------------------------------------------------------------------
+// Setup mesh and material.
+void
+pylith::materials::TestElasticMaterial::_initialize(
+ topology::Mesh* mesh,
+ ElasticStrain1D* material,
+ const ElasticStrain1DData* data)
+{ // _initialize
+ CPPUNIT_ASSERT(0 != mesh);
+ CPPUNIT_ASSERT(0 != material);
+ CPPUNIT_ASSERT(0 != data);
+
+ meshio::MeshIOAscii iohandler;
+ iohandler.filename("data/line3.mesh");
+ iohandler.read(mesh);
+
+ // Set up coordinates
+ spatialdata::geocoords::CSCart cs;
+ spatialdata::units::Nondimensional normalizer;
+ cs.setSpaceDim(mesh->dimension());
+ cs.initialize();
+ mesh->coordsys(&cs);
+ mesh->nondimensionalize(normalizer);
+
+ // Setup quadrature
+ feassemble::Quadrature<topology::Mesh> quadrature;
+ feassemble::GeometryLine1D geometry;
+ quadrature.refGeometry(&geometry);
+ const int cellDim = 1;
+ const int numCorners = 3;
+ 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 double quadWts[] = { 1.0, 1.0 };
+ quadrature.initialize(basis, numQuadPts, numCorners,
+ basisDeriv, numQuadPts, numCorners, cellDim,
+ quadPtsRef, numQuadPts, cellDim,
+ quadWts, numQuadPts,
+ spaceDim);
+
+
+ // 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);
+
+ // Compute geometry for cells
+ quadrature.initializeGeometry();
+#if defined(PRECOMPUTE_GEOMETRY)
+ quadrature.computeGeometry(*mesh, cells);
+#endif
+
+ spatialdata::spatialdb::SimpleDB db;
+ spatialdata::spatialdb::SimpleIOAscii dbIO;
+ dbIO.filename("data/matinitialize.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);
+
+ 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_material");
+ material->normalizer(normalizer);
+ material->dbInitialStress(&dbStress);
+ material->dbInitialStrain(&dbStrain);
+
+ material->initialize(*mesh, &quadrature);
+} // _initialize
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,137 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/friction/TestFrictionModel.hh
+ *
+ * @brief C++ TestFrictionModel object
+ *
+ * C++ unit testing for FrictionModel.
+ */
+
+#if !defined(pylith_friction_testfrictionmodel_hh)
+#define pylith_friction_testfrictionmodel_hh
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "pylith/friction/frictionfwd.hh" // forward declarations
+#include "pylith/topology/topologyfwd.hh" // forward declarations
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace friction {
+ class TestFrictionModel;
+ class FrictionModelData;
+ } // friction
+} // pylith
+
+/// C++ unit testing for FrictionModel
+class pylith::friction::TestFrictionModel : public CppUnit::TestFixture
+{ // class TestFrictionModel
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestFrictionModel );
+
+ CPPUNIT_TEST( testLabel );
+ CPPUNIT_TEST( testTimeStep );
+ CPPUNIT_TEST( testDBProperties );
+ CPPUNIT_TEST( testDBStateVars );
+ CPPUNIT_TEST( testNormalizer );
+ CPPUNIT_TEST( testInitialize );
+ CPPUNIT_TEST( testRetrievePropsAndVars );
+
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Test label()
+ void testLabel(void);
+
+ /// Test timeStep()
+ void testTimeStep(void);
+
+ /// Test dbProperties()
+ void testDBProperties(void);
+
+ /// Test dbStateVars().
+ void testDBStateVars(void);
+
+ /// Test normalizer().
+ void testNormalizer(void);
+
+ /// Test needNewJacobian()
+ void testNeedNewJacobian(void);
+
+ /// Test initialize()
+ void testInitialize(void);
+
+ /// Test retrievePropsAndVars().
+ void testRetrievePropsAndVars(void);
+
+ /// Test calcFriction()
+ void testCalcFriction(void);
+
+ /// Test updateStateVars().
+ void testUpdateStateVars(void);
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ // Methods used in testing children of this class.
+
+ /// Setup testing data.
+ virtual
+ void setUp(void);
+
+ /// Tear down testing data.
+ virtual
+ void tearDown(void);
+
+ /// Test _calcFriction().
+ void test_calcFriction(void);
+
+ /// Test _updateStateVars().
+ void test_updateStateVars(void);
+
+ /// Test hasProperty().
+ void testHasProperty(void);
+
+ /// Test hasStateVar().
+ void testHasStateVar(void);
+
+ // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+ /// Setup nondimensionalization.
+ void setupNormalizer(void);
+
+ // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+ FrictionModel* _friction; ///< Test subject.
+ FrictionModelData* _data; ///< Data for tests.
+
+ // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
+ /** Setup mesh and material.
+ *
+ * @param mesh Finite-element mesh.
+ */
+ void _initialize(topology::SubMesh* mesh);
+
+}; // class TestFrictionModel
+
+#endif // pylith_friction_testfrictionmodel_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,76 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticIsotropic3D.hh" // Implementation of class methods
+
+#include "data/ElasticIsotropic3DData.hh" // USES ElasticIsotropic3DData
+
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+
+#include "pylith/utils/constdefs.h" // USES MAXDOUBLE
+#include "pylith/topology/Mesh.hh" // USES Mesh
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticIsotropic3D );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::materials::TestElasticIsotropic3D::setUp(void)
+{ // setUp
+ _material = new ElasticIsotropic3D();
+ _matElastic = new ElasticIsotropic3D();
+ _data = new ElasticIsotropic3DData();
+ _dataElastic = new ElasticIsotropic3DData();
+ setupNormalizer();
+} // setUp
+
+// ----------------------------------------------------------------------
+// Test stableTimeStepImplicit().
+void
+pylith::materials::TestElasticIsotropic3D::testStableTimeStepImplicit(void)
+{ // testStableTimeStepImplicit
+ assert(0 != _matElastic);
+
+ topology::Mesh mesh;
+
+ const double dt = _matElastic->stableTimeStepImplicit(mesh);
+ CPPUNIT_ASSERT_EQUAL(1.0, dt/pylith::PYLITH_MAXDOUBLE);
+} // testStableTimeStepImplicit
+
+// ----------------------------------------------------------------------
+// Test hasProperty().
+void
+pylith::materials::TestElasticIsotropic3D::testHasProperty(void)
+{ // testHasProperty
+ ElasticIsotropic3D material;
+
+ CPPUNIT_ASSERT(material.hasProperty("mu"));
+ CPPUNIT_ASSERT(material.hasProperty("lambda"));
+ CPPUNIT_ASSERT(material.hasProperty("density"));
+ CPPUNIT_ASSERT(!material.hasProperty("aaa"));
+} // testHasProperty
+
+// ----------------------------------------------------------------------
+// Test hasStateVar().
+void
+pylith::materials::TestElasticIsotropic3D::testHasStateVar(void)
+{ // testHasStateVar
+ ElasticIsotropic3D material;
+
+ CPPUNIT_ASSERT(!material.hasStateVar("stress"));
+} // testHasStateVar
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,80 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/materials/TestElasticIsotropic3D.hh
+ *
+ * @brief C++ TestElasticIsotropic3D object
+ *
+ * C++ unit testing for ElasticIsotropic3D.
+ */
+
+#if !defined(pylith_materials_testelasticisotropic3d_hh)
+#define pylith_materials_testelasticisotropic3d_hh
+
+#include "TestElasticMaterial.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace materials {
+ class TestElasticIsotropic3D;
+ } // materials
+} // pylith
+
+/// C++ unit testing for ElasticIsotropic3D
+class pylith::materials::TestElasticIsotropic3D : public TestElasticMaterial
+{ // class TestElasticIsotropic3D
+
+ // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+ CPPUNIT_TEST_SUITE( TestElasticIsotropic3D );
+
+ CPPUNIT_TEST( testDimension );
+ CPPUNIT_TEST( testTensorSize );
+ CPPUNIT_TEST( testDBToProperties );
+ CPPUNIT_TEST( testNonDimProperties );
+ CPPUNIT_TEST( testDimProperties );
+ CPPUNIT_TEST( testDBToStateVars );
+ CPPUNIT_TEST( testNonDimStateVars );
+ CPPUNIT_TEST( testDimStateVars );
+ CPPUNIT_TEST( testStableTimeStepImplicit );
+ CPPUNIT_TEST( test_calcDensity );
+ CPPUNIT_TEST( test_calcStress );
+ CPPUNIT_TEST( test_calcElasticConsts );
+ CPPUNIT_TEST( test_updateStateVars );
+ CPPUNIT_TEST( test_stableTimeStepImplicit );
+
+ CPPUNIT_TEST( testHasProperty );
+ CPPUNIT_TEST( testHasStateVar );
+
+ CPPUNIT_TEST_SUITE_END();
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Setup testing data.
+ void setUp(void);
+
+ /// Test stableTimeStepImplicit().
+ void testStableTimeStepImplicit(void);
+
+ /// Test hasProperty().
+ void testHasProperty(void);
+
+ /// Test hasStateVar().
+ void testHasStateVar(void);
+
+}; // class TestElasticIsotropic3D
+
+#endif // pylith_materials_testelasticisotropic3d_hh
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,47 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "MaterialData.hh"
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::materials::MaterialData::MaterialData(void) :
+ dimension(0),
+ numLocs(0),
+ numProperties(0),
+ numStateVars(0),
+ numDBProperties(0),
+ numDBStateVars(0),
+ numPropsQuadPt(0),
+ numVarsQuadPt(0),
+ numPropertyValues(0),
+ numStateVarValues(0),
+ dbPropertyValues(0),
+ dbStateVarValues(0),
+ dbProperties(0),
+ dbStateVars(0),
+ properties(0),
+ stateVars(0),
+ lengthScale(0),
+ timeScale(0),
+ pressureScale(0),
+ densityScale(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::materials::MaterialData::~MaterialData(void)
+{ // destructor
+} // destructor
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,69 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_friction_frictionmodeldata_hh)
+#define pylith_friction_frictionmodeldata_hh
+
+namespace pylith {
+ namespace friction {
+ class FrictionModelData;
+ } // pylith
+} // friction
+
+class pylith::friction::FrictionModelData {
+
+// PUBLIC METHODS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ FrictionModelData(void);
+
+ /// Destructor
+ ~FrictionModelData(void);
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public:
+
+ int numProperties; ///< Number of parameters for physical properties.
+ int numStateVars; ///< Number of state variables.
+ int numDBProperties; ///< Number of db values for properties.
+ int numDBStateVars; ///< Number of db values for state variables.
+
+ int numProps; ///< Number of properties at each vertex.
+ int numVars; ///< Number of state variables at each vertex.
+
+ int* numPropertyValues; ///< Number of values for each property
+ int* numStateVarValues; ///< Number of values for each state variable
+
+ char** dbPropertyValues; ///< Names of db values for properties.
+ char** dbStateVarValues; ///< Names of db values for state variables.
+
+ double* dbProperties; ///< Database values for properties at locations.
+ double* dbStateVars; ///< Database values for state variables at locations.
+ double* properties; ///< Properties at locations.
+ double* stateVars; ///< State variables at locations.
+ double* propertiesNondim; ///< Nondimensional properties at locations.
+ double* stateVarsNondim; ///< Nondimensional state variables at locations.
+
+ double* friction; ///< Friction at location.
+ double* stateVarsUpdated; ///< Updated state variables at location.
+
+ double lengthScale; ///< Length scale for nondimensionalization.
+ double timeScale; ///< Time scale for nondimensionalization.
+ double pressureScale; ///< Pressure scale for nondimensionalization.
+ double densityScale; ///< Density scale for nondimensionalization.
+
+};
+
+#endif // pylith_friction_frictionmodeldata_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/Makefile.am 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,29 @@
+# -*- Makefile -*-
+#
+# ----------------------------------------------------------------------
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+dist_noinst_DATA =
+
+noinst_TMP =
+
+# 'export' the input files by performing a mock install
+export_datadir = $(top_builddir)/unittests/libtests/friction/data
+export-data: $(dist_noinst_DATA)
+ if [ "X$(top_srcdir)" != "X$(top_builddir)" ]; then for f in $(dist_noinst_DATA); do $(install_sh_DATA) $(srcdir)/$$f $(export_datadir); done; fi
+
+clean-data:
+ if [ "X$(top_srcdir)" != "X$(top_builddir)" ]; then for f in $(dist_noinst_DATA) $(noinst_TMP); do $(RM) $(RM_FLAGS) $(export_datadir)/$$f; done; fi
+
+BUILT_SOURCES = export-data
+clean-local: clean-data
+
+
+# End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,243 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application elasticisotropic3d.
+
+#include "ElasticIsotropic3DData.hh"
+
+const int pylith::materials::ElasticIsotropic3DData::_dimension = 3;
+
+const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
+
+const int pylith::materials::ElasticIsotropic3DData::_numProperties = 3;
+
+const int pylith::materials::ElasticIsotropic3DData::_numStateVars = 0;
+
+const int pylith::materials::ElasticIsotropic3DData::_numDBProperties = 3;
+
+const int pylith::materials::ElasticIsotropic3DData::_numDBStateVars = 0;
+
+const int pylith::materials::ElasticIsotropic3DData::_numPropsQuadPt = 3;
+
+const int pylith::materials::ElasticIsotropic3DData::_numVarsQuadPt = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_lengthScale = 1.00000000e+03;
+
+const double pylith::materials::ElasticIsotropic3DData::_timeScale = 1.00000000e+00;
+
+const double pylith::materials::ElasticIsotropic3DData::_pressureScale = 2.25000000e+10;
+
+const double pylith::materials::ElasticIsotropic3DData::_densityScale = 1.00000000e+03;
+
+const double pylith::materials::ElasticIsotropic3DData::_dtStableImplicit = 1.00000000e+30;
+
+const int pylith::materials::ElasticIsotropic3DData::_numPropertyValues[] = {
+1,
+1,
+1,
+};
+
+const int* pylith::materials::ElasticIsotropic3DData::_numStateVarValues = 0;
+
+const char* pylith::materials::ElasticIsotropic3DData::_dbPropertyValues[] = {
+"density",
+"vs",
+"vp",
+};
+
+const char** pylith::materials::ElasticIsotropic3DData::_dbStateVarValues = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_dbProperties[] = {
+ 2.50000000e+03,
+ 3.00000000e+03,
+ 5.19615242e+03,
+ 2.00000000e+03,
+ 1.20000000e+03,
+ 2.07846097e+03,
+};
+
+const double* pylith::materials::ElasticIsotropic3DData::_dbStateVars = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_properties[] = {
+ 2.50000000e+03,
+ 2.25000000e+10,
+ 2.25000000e+10,
+ 2.00000000e+03,
+ 2.88000000e+09,
+ 2.88000000e+09,
+};
+
+const double* pylith::materials::ElasticIsotropic3DData::_stateVars = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_propertiesNondim[] = {
+ 2.50000000e+00,
+ 1.00000000e+00,
+ 1.00000000e+00,
+ 2.00000000e+00,
+ 1.28000000e-01,
+ 1.28000000e-01,
+};
+
+const double* pylith::materials::ElasticIsotropic3DData::_stateVarsNondim = 0;
+
+const double pylith::materials::ElasticIsotropic3DData::_density[] = {
+ 2.50000000e+03,
+ 2.00000000e+03,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_strain[] = {
+ 1.10000000e-04,
+ 1.20000000e-04,
+ 1.30000000e-04,
+ 1.40000000e-04,
+ 1.50000000e-04,
+ 1.60000000e-04,
+ 4.10000000e-04,
+ 4.20000000e-04,
+ 4.30000000e-04,
+ 4.40000000e-04,
+ 4.50000000e-04,
+ 4.60000000e-04,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_stress[] = {
+ -2.24790000e+07,
+ -2.24780000e+07,
+ -2.24770000e+07,
+ -8.97600000e+06,
+ 6.61750000e+06,
+ -8.97400000e+06,
+ -2.82900000e+06,
+ -2.82800000e+06,
+ -2.82700000e+06,
+ -1.09800000e+06,
+ 2.60956000e+06,
+ -1.09600000e+06,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_elasticConsts[] = {
+ 6.75000000e+10,
+ 2.25000000e+10,
+ 2.25000000e+10,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 6.75000000e+10,
+ 2.25000000e+10,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 6.75000000e+10,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 4.50000000e+10,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 4.50000000e+10,
+ 0.00000000e+00,
+ 4.50000000e+10,
+ 8.64000000e+09,
+ 2.88000000e+09,
+ 2.88000000e+09,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 8.64000000e+09,
+ 2.88000000e+09,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 8.64000000e+09,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 5.76000000e+09,
+ 0.00000000e+00,
+ 0.00000000e+00,
+ 5.76000000e+09,
+ 0.00000000e+00,
+ 5.76000000e+09,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_initialStress[] = {
+ 2.10000000e+04,
+ 2.20000000e+04,
+ 2.30000000e+04,
+ 2.40000000e+04,
+ 2.50000000e+04,
+ 2.60000000e+04,
+ 5.10000000e+04,
+ 5.20000000e+04,
+ 5.30000000e+04,
+ 5.40000000e+04,
+ 5.50000000e+04,
+ 5.60000000e+04,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_initialStrain[] = {
+ 3.10000000e-04,
+ 3.20000000e-04,
+ 3.30000000e-04,
+ 3.40000000e-04,
+ 3.50000000e-06,
+ 3.60000000e-04,
+ 6.10000000e-04,
+ 6.20000000e-04,
+ 6.30000000e-04,
+ 6.40000000e-04,
+ 6.50000000e-06,
+ 6.60000000e-04,
+};
+
+const double* pylith::materials::ElasticIsotropic3DData::_stateVarsUpdated = 0;
+
+pylith::materials::ElasticIsotropic3DData::ElasticIsotropic3DData(void)
+{ // constructor
+ dimension = _dimension;
+ numLocs = _numLocs;
+ numProperties = _numProperties;
+ numStateVars = _numStateVars;
+ numDBProperties = _numDBProperties;
+ numDBStateVars = _numDBStateVars;
+ numPropsQuadPt = _numPropsQuadPt;
+ numVarsQuadPt = _numVarsQuadPt;
+ lengthScale = _lengthScale;
+ timeScale = _timeScale;
+ pressureScale = _pressureScale;
+ densityScale = _densityScale;
+ dtStableImplicit = _dtStableImplicit;
+ numPropertyValues = const_cast<int*>(_numPropertyValues);
+ numStateVarValues = const_cast<int*>(_numStateVarValues);
+ dbPropertyValues = const_cast<char**>(_dbPropertyValues);
+ dbStateVarValues = const_cast<char**>(_dbStateVarValues);
+ dbProperties = const_cast<double*>(_dbProperties);
+ dbStateVars = const_cast<double*>(_dbStateVars);
+ properties = const_cast<double*>(_properties);
+ stateVars = const_cast<double*>(_stateVars);
+ propertiesNondim = const_cast<double*>(_propertiesNondim);
+ stateVarsNondim = const_cast<double*>(_stateVarsNondim);
+ density = const_cast<double*>(_density);
+ strain = const_cast<double*>(_strain);
+ stress = const_cast<double*>(_stress);
+ elasticConsts = const_cast<double*>(_elasticConsts);
+ initialStress = const_cast<double*>(_initialStress);
+ initialStrain = const_cast<double*>(_initialStrain);
+ stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
+} // constructor
+
+pylith::materials::ElasticIsotropic3DData::~ElasticIsotropic3DData(void)
+{}
+
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,104 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+// DO NOT EDIT THIS FILE
+// This file was generated from python application elasticisotropic3d.
+
+#if !defined(pylith_materials_elasticisotropic3ddata_hh)
+#define pylith_materials_elasticisotropic3ddata_hh
+
+#include "ElasticMaterialData.hh"
+
+namespace pylith {
+ namespace materials {
+ class ElasticIsotropic3DData;
+ } // pylith
+} // materials
+
+class pylith::materials::ElasticIsotropic3DData : public ElasticMaterialData
+{
+
+public:
+
+ /// Constructor
+ ElasticIsotropic3DData(void);
+
+ /// Destructor
+ ~ElasticIsotropic3DData(void);
+
+private:
+
+ static const int _dimension;
+
+ static const int _numLocs;
+
+ static const int _numProperties;
+
+ static const int _numStateVars;
+
+ static const int _numDBProperties;
+
+ static const int _numDBStateVars;
+
+ static const int _numPropsQuadPt;
+
+ static const int _numVarsQuadPt;
+
+ static const double _lengthScale;
+
+ static const double _timeScale;
+
+ static const double _pressureScale;
+
+ static const double _densityScale;
+
+ static const double _dtStableImplicit;
+
+ static const int _numPropertyValues[];
+
+ static const int* _numStateVarValues;
+
+ static const char* _dbPropertyValues[];
+
+ static const char** _dbStateVarValues;
+
+ static const double _dbProperties[];
+
+ static const double* _dbStateVars;
+
+ static const double _properties[];
+
+ static const double* _stateVars;
+
+ static const double _propertiesNondim[];
+
+ static const double* _stateVarsNondim;
+
+ static const double _density[];
+
+ static const double _strain[];
+
+ static const double _stress[];
+
+ static const double _elasticConsts[];
+
+ static const double _initialStress[];
+
+ static const double _initialStrain[];
+
+ static const double* _stateVarsUpdated;
+
+};
+
+#endif // pylith_materials_elasticisotropic3ddata_hh
+
+// End of file
Added: short/3D/PyLith/trunk/unittests/libtests/friction/test_friction.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/test_friction.cc (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/test_friction.cc 2010-01-22 05:54:49 UTC (rev 16163)
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include "petsc.h"
+#include <Python.h>
+
+#include <cppunit/extensions/TestFactoryRegistry.h>
+
+#include <cppunit/BriefTestProgressListener.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/TestResult.h>
+#include <cppunit/TestResultCollector.h>
+#include <cppunit/TestRunner.h>
+#include <cppunit/TextOutputter.h>
+
+#include <stdlib.h> // USES abort()
+
+int
+main(int argc,
+ char* argv[])
+{ // main
+ CppUnit::TestResultCollector result;
+
+ try {
+ // Initialize PETSc
+ PetscErrorCode err = PetscInitialize(&argc, &argv,
+ PETSC_NULL, PETSC_NULL);
+ CHKERRQ(err);
+
+ // Initialize Python (to eliminate need to initialize when
+ // parsing units in spatial databases).
+ Py_Initialize();
+
+ // Create event manager and test controller
+ CppUnit::TestResult controller;
+
+ // Add listener to collect test results
+ controller.addListener(&result);
+
+ // Add listener to show progress as tests run
+ CppUnit::BriefTestProgressListener progress;
+ controller.addListener(&progress);
+
+ // Add top suite to test runner
+ CppUnit::TestRunner runner;
+ runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
+ runner.run(controller);
+
+ // Print tests
+ CppUnit::TextOutputter outputter(&result, std::cerr);
+ outputter.write();
+
+ // Finalize Python
+ Py_Finalize();
+
+ // Finalize PETSc
+ err = PetscFinalize(); CHKERRQ(err);
+ } catch (...) {
+ abort();
+ } // catch
+
+ return (result.wasSuccessful() ? 0 : 1);
+} // main
+
+// End of file
More information about the CIG-COMMITS
mailing list