[cig-commits] r16164 - in short/3D/PyLith/trunk: libsrc/friction unittests/libtests/friction unittests/libtests/friction/data unittests/libtests/materials/data

brad at geodynamics.org brad at geodynamics.org
Fri Jan 22 16:30:52 PST 2010


Author: brad
Date: 2010-01-22 16:30:50 -0800 (Fri, 22 Jan 2010)
New Revision: 16164

Added:
   short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.cc
   short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.hh
Removed:
   short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc
   short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh
Modified:
   short/3D/PyLith/trunk/libsrc/friction/Makefile.am
   short/3D/PyLith/trunk/libsrc/friction/StaticFriction.cc
   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/data/FrictionModelData.cc
   short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh
   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/materials/data/MaterialData.cc
Log:
Finished setting up unit tests for StaticFriction.

Modified: short/3D/PyLith/trunk/libsrc/friction/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/Makefile.am	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/libsrc/friction/Makefile.am	2010-01-23 00:30:50 UTC (rev 16164)
@@ -15,6 +15,7 @@
 
 subpkginclude_HEADERS = \
 	FrictionModel.hh \
+	FrictionModel.icc \
 	StaticFriction.hh \
 	frictionfwd.hh
 

Modified: short/3D/PyLith/trunk/libsrc/friction/StaticFriction.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/friction/StaticFriction.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/libsrc/friction/StaticFriction.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -37,7 +37,7 @@
 
       // Physical properties.
       const pylith::materials::Metadata::ParamDescription properties[] = {
-	{ "friction-coefficient", 1, pylith::topology::FieldBase::SCALAR },
+	{ "friction_coefficient", 1, pylith::topology::FieldBase::SCALAR },
       };
 
       // Values expected in spatial database

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/Makefile.am	2010-01-23 00:30:50 UTC (rev 16164)
@@ -21,29 +21,25 @@
 
 # Primary source files
 testfriction_SOURCES = \
-	test_friction.cc
+	test_friction.cc \
+	TestFrictionModel.cc \
+	TestStaticFriction.cc
 
-#	TestFrictionModel.cc \
-#	TestStaticFriction.cc
 
-
 noinst_HEADERS = 
+	TestFrictionModel.hh \
+	TestStaticFriction.hh
 
-#	TestFrictionModel.hh \
-#	TestStaticFriction.hh
-
 # Source files associated with testing data
-testfriction_SOURCES += 
+testfriction_SOURCES += \
+	data/FrictionModelData.cc \
+	data/StaticFrictionData.cc
 
-#	data/FrictionModelData.cc \
-#	data/StaticFrictionData.cc
 
+noinst_HEADERS += \
+	data/FrictionModelData.hh \
+	data/StaticFrictionData.hh
 
-noinst_HEADERS += 
-
-#	data/FrictionModelData.hh \
-#	data/StaticFrictionData.hh
-
 AM_CPPFLAGS = \
 	$(PYTHON_EGG_CPPFLAGS) -I$(PYTHON_INCDIR) \
 	$(PETSC_SIEVE_FLAGS) $(PETSC_INCLUDE)

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -12,18 +12,16 @@
 
 #include <portinfo>
 
-#include "TestElasticMaterial.hh" // Implementation of class methods
+#include "TestFrictionModel.hh" // Implementation of class methods
 
-#include "data/ElasticMaterialData.hh" // USES ElasticMaterialData
-#include "data/ElasticStrain1DData.hh" // USES ElasticStrain1DData
+#include "data/StaticFrictionData.hh" // USES StaticFrictionData
 
-#include "pylith/topology/Mesh.hh" // USES Mesh
+#include "pylith/topology/SubMesh.hh" // USES SubMesh
 #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/friction/StaticFriction.hh" // USES StaticFriction
 #include "pylith/feassemble/Quadrature.hh" // USES Quadrature
-#include "pylith/feassemble/GeometryLine1D.hh" // USES GeometryLine1D
+#include "pylith/feassemble/GeometryTri2D.hh" // USES GeometryTri2D
 
 #include "pylith/utils/array.hh" // USES double_array
 
@@ -37,584 +35,493 @@
 //#define PRECOMPUTE_GEOMETRY
 
 // ----------------------------------------------------------------------
-CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticMaterial );
+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;
 
 // ----------------------------------------------------------------------
-// Test dbInitialStress()
+// Test label()
 void
-pylith::materials::TestElasticMaterial::testDBInitialStress(void)
-{ // testDBInitialStress
+pylith::friction::TestFrictionModel::testLabel(void)
+{ // testLabel
+  const std::string& label = "the database";
+  StaticFriction friction;
+  friction.label(label.c_str());
+  
+  CPPUNIT_ASSERT_EQUAL(label, std::string(friction.label()));
+} // testLabel
+    
+// ----------------------------------------------------------------------
+// Test timestep()
+void
+pylith::friction::TestFrictionModel::testTimeStep(void) 
+{ // testTimeStep
+  const double dt = 2.0;
+  StaticFriction friction;
+  friction.timeStep(dt);
+  
+  CPPUNIT_ASSERT_EQUAL(dt, friction.timeStep());
+} // testTimeStep
+
+// ----------------------------------------------------------------------
+// Test dbProperties()
+void
+pylith::friction::TestFrictionModel::testDBProperties(void)
+{ // testDBProperties
   const std::string& label = "my_database";
   spatialdata::spatialdb::SimpleDB db;
   db.label(label.c_str());
   
-  ElasticIsotropic3D material;
-  material.dbInitialStress(&db);
+  StaticFriction friction;
+  friction.dbProperties(&db);
   
-  CPPUNIT_ASSERT(0 != material._dbInitialStress);
-  CPPUNIT_ASSERT_EQUAL(label, std::string(material._dbInitialStress->label()));
-} // testDBInitialStress
+  CPPUNIT_ASSERT(0 != friction._dbProperties);
+  CPPUNIT_ASSERT_EQUAL(label, std::string(friction._dbProperties->label()));
+} // testDBProperties
 
 // ----------------------------------------------------------------------
-// Test dbInitialStrain()
+// Test dbStateVars()
 void
-pylith::materials::TestElasticMaterial::testDBInitialStrain(void)
-{ // testDBInitialStrain
+pylith::friction::TestFrictionModel::testDBStateVars(void)
+{ // testDBStateVars
   const std::string& label = "my_database";
   spatialdata::spatialdb::SimpleDB db;
   db.label(label.c_str());
   
-  ElasticIsotropic3D material;
-  material.dbInitialStrain(&db);
+  StaticFriction friction;
+  friction.dbInitialState(&db);
   
-  CPPUNIT_ASSERT(0 != material._dbInitialStrain);
-  CPPUNIT_ASSERT_EQUAL(label, std::string(material._dbInitialStrain->label()));
-} // testDBInitialStrain
+  CPPUNIT_ASSERT(0 != friction._dbInitialState);
+  CPPUNIT_ASSERT_EQUAL(label, std::string(friction._dbInitialState->label()));
+} // testDBStateVars
 
 // ----------------------------------------------------------------------
+// Test normalizer()
+void
+pylith::friction::TestFrictionModel::testNormalizer(void)
+{ // testNormalizer
+  spatialdata::units::Nondimensional normalizer;
+  const double lengthScale = 2.0;
+  normalizer.lengthScale(lengthScale);
+
+  StaticFriction friction;
+  friction.normalizer(normalizer);
+  
+  CPPUNIT_ASSERT(0 != friction._normalizer);
+  CPPUNIT_ASSERT_EQUAL(lengthScale, friction._normalizer->lengthScale());
+} // testNormalizer
+
+// ----------------------------------------------------------------------
 // Test initialize()
 void
-pylith::materials::TestElasticMaterial::testInitialize(void)
+pylith::friction::TestFrictionModel::testInitialize(void)
 { // testInitialize
   topology::Mesh mesh;
-  ElasticStrain1D material;
-  ElasticStrain1DData data;
-  _initialize(&mesh, &material, &data);
+  StaticFriction friction;
+  StaticFrictionData data;
+  _initialize(&mesh, &friction, &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();
+#if 1
+  CPPUNIT_ASSERT(false);
+#else
+  // :TODO: ADD STUFF HERE
+  // Test propertiesVertex with mesh
 
-  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_t size = data.numLocs*data.numPropsVertex;
+  CPPUNIT_ASSERT_EQUAL(size, friction._propertiesVertex.size());
 
-  size = data.numLocs*data.numVarsQuadPt;
-  CPPUNIT_ASSERT_EQUAL(size, material._stateVarsCell.size());
+  size = data.numLocs*data.numVarsVertex;
+  CPPUNIT_ASSERT_EQUAL(size, friction._stateVarsVertex.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());
+  CPPUNIT_ASSERT_EQUAL(size, material._frictionVertex.size());
+#endif
 } // testInitialize
 
 // ----------------------------------------------------------------------
 // Test retrievePropsAndVars().
 void
-pylith::materials::TestElasticMaterial::testRetrievePropsAndVars(void)
+pylith::friction::TestFrictionModel::testRetrievePropsAndVars(void)
 { // testRetrievePropsAndVars
   topology::Mesh mesh;
-  ElasticStrain1D material;
-  ElasticStrain1DData data;
-  _initialize(&mesh, &material, &data);
+  StaticFriction friction;
+  StaticFrictionData data;
+  _initialize(&mesh, &friction, &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();
+#if 1
+  CPPUNIT_ASSERT(false);
+#else
+  // ADD STUFF HERE
 
-  material.retrievePropsAndVars(cell);
+  friction.retrievePropsAndVars(vertex);
 
   const double tolerance = 1.0e-06;
-  const int tensorSize = material._tensorSize;
-  const int numQuadPts = data.numLocs;
-  const int numVarsQuadPt = data.numVarsQuadPt;
+  const int numVarsVertex = data.numVarsVertex;
 
-  // Test cell arrays
+  // Test vertex arrays
   const double* propertiesE = data.properties;
   CPPUNIT_ASSERT(0 != propertiesE);
   const double_array& properties = material._propertiesCell;
-  size_t size = data.numLocs*data.numPropsQuadPt;
+  size_t size = data.numLocs*data.numPropsVertex;
   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) );
+  CPPUNIT_ASSERT( (0 < numVarsVertex && 0 != stateVarsE) ||
+		  (0 == numVarsVertex && 0 == stateVarsE) );
   const double_array& stateVars = material._stateVarsCell;
-  size = data.numLocs*numVarsQuadPt;
+  size = data.numLocs*numVarsVertex;
   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);
+#endif
 } // testRetrievePropsAndVars
 
 // ----------------------------------------------------------------------
-// Test calcDensity()
+// Test calcFriction()
 void
-pylith::materials::TestElasticMaterial::testCalcDensity(void)
-{ // testCalcDensity
+pylith::friction::TestFrictionModel::testCalcFriction(void)
+{ // testCalcFriction
   topology::Mesh mesh;
-  ElasticStrain1D material;
-  ElasticStrain1DData data;
-  _initialize(&mesh, &material, &data);
+  StaticFriction friction;
+  StaticFrictionData data;
+  _initialize(&mesh, &friction, &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();
+#if 1
+  CPPUNIT_ASSERT(false);
+#else
 
-  material.retrievePropsAndVars(cell);
-  const double_array& density = material.calcDensity();
+  friction.retrievePropsAndVars(vertex);
+  const double_array& friction = friction.calcFriction();
 
-  const int tensorSize = material._tensorSize;
-  const int numQuadPts = data.numLocs;
-
-  const double* densityE = data.density;
-  CPPUNIT_ASSERT(0 != densityE);
-  const size_t size = numQuadPts;
+  const double* densityE = data.friction;
+  CPPUNIT_ASSERT(0 != frictionE);
+  const size_t size = numVertexs;
   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
+#endif
+} // testCalcFriction
     
 // ----------------------------------------------------------------------
-// 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)
+pylith::friction::TestFrictionModel::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)
+pylith::friction::TestFrictionModel::setUp(void)
 { // setUp
-  TestMaterial::setUp();
-  _matElastic = 0;
-  _dataElastic = 0;
+  _friction = 0;
+  _data = 0;
 } // setUp
 
 // ----------------------------------------------------------------------
 // Tear down testing data.
 void
-pylith::materials::TestElasticMaterial::tearDown(void)
+pylith::friction::TestFrictionModel::tearDown(void)
 { // tearDown
-  TestMaterial::tearDown();
-  delete _matElastic; _matElastic = 0;
-  delete _dataElastic; _dataElastic = 0;
+  delete _friction; _friction = 0;
+  delete _data; _data = 0;
 } // tearDown
 
 // ----------------------------------------------------------------------
-// Test _calcDensity()
+// Test _dbToProperties().
 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;
+pylith::friction::TestFrictionModel::testDBToProperties(void)
+{ // testDBToProperties
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
   
-  double density = 0;
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
+  const int numLocs = _data->numLocs;
+  const int numDBProperties = _data->numDBProperties;
+  double_array dbValues(numDBProperties);
 
+  const int propertiesSize = _data->numPropsVertex;
+  double_array properties(propertiesSize);
+
   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));
+    for (int i=0; i < numDBProperties; ++i)
+      dbValues[i] = _data->dbProperties[iLoc*numDBProperties+i];
 
-    _matElastic->_calcDensity(&density, 
-			      &properties[0], properties.size(),
-			      &stateVars[0], stateVars.size());
+    _friction->_dbToProperties(&properties[0], dbValues);
     
-    const double densityE = data->density[iLoc];
-    
+    const double* const propertiesE = &_data->properties[iLoc*propertiesSize];
     const double tolerance = 1.0e-06;
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density/densityE, tolerance);
+    for (int i=0; i < propertiesSize; ++i) {
+      if (fabs(propertiesE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     properties[i]/propertiesE[i],
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[i], properties[i],
+				     tolerance);
+    } // for
   } // for
-} // _testCalcDensity
+} // testDBToProperties
 
 // ----------------------------------------------------------------------
-// Test _calcStress()
+// Test _nondimProperties().
 void
-pylith::materials::TestElasticMaterial::test_calcStress(void)
-{ // _testCalcStress
-  CPPUNIT_ASSERT(0 != _matElastic);
-  CPPUNIT_ASSERT(0 != _dataElastic);
-  const ElasticMaterialData* data = _dataElastic;
+pylith::friction::TestFrictionModel::testNonDimProperties(void)
+{ // testNonDimProperties
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
+  
+  const int numLocs = _data->numLocs;
+  const int propertiesSize = _data->numPropsVertex;
+  double_array propertiesNondim(propertiesSize);
+  double_array properties(propertiesSize);
 
-  const bool computeStateVars = true;
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    for (int i=0; i < propertiesSize; ++i)
+      properties[i] = _data->properties[iLoc*propertiesSize+i];
+    _friction->_nondimProperties(&properties[0], properties.size());
+    
+    const double* const propertiesNondimE =
+      &_data->propertiesNondim[iLoc*propertiesSize];
+    CPPUNIT_ASSERT(0 != propertiesNondimE);
 
-  const int numLocs = data->numLocs;
-  const int numPropsQuadPt = data->numPropsQuadPt;
-  const int numVarsQuadPt = data->numVarsQuadPt;
-  const int tensorSize = _matElastic->_tensorSize;
+    const double tolerance = 1.0e-06;
+    for (int i=0; i < propertiesSize; ++i) {
+      if (fabs(propertiesNondimE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     properties[i]/propertiesNondimE[i],
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesNondimE[i], properties[i],
+				     tolerance);
+    } // for
+  } // for
+} // testNonDimProperties
+
+// ----------------------------------------------------------------------
+// Test _dimProperties().
+void
+pylith::friction::TestFrictionModel::testDimProperties(void)
+{ // testDimProperties
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
   
-  double_array stress(tensorSize);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  const int numLocs = _data->numLocs;
+  const int propertiesSize = _data->numPropsVertex;
+  double_array properties(propertiesSize);
 
   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));
+    for (int i=0; i < propertiesSize; ++i)
+      properties[i] = _data->propertiesNondim[iLoc*propertiesSize+i];
+    _friction->_dimProperties(&properties[0], properties.size());
+    
+    const double* const propertiesE =
+      &_data->properties[iLoc*propertiesSize];
+    CPPUNIT_ASSERT(0 != propertiesE);
 
-    _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 tolerance = 1.0e-06;
+    for (int i=0; i < propertiesSize; ++i) {
+      if (fabs(propertiesE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     properties[i]/propertiesE[i],
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(propertiesE[i], properties[i],
+				     tolerance);
+    } // for
+  } // for
+} // testDimProperties
 
-    const double* stressE = &data->stress[iLoc*tensorSize];
-    CPPUNIT_ASSERT(0 != stressE);
+// ----------------------------------------------------------------------
+// Test _dbToStateVars().
+void
+pylith::friction::TestFrictionModel::testDBToStateVars(void)
+{ // testDBToStateVars
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
+  
+  const int numLocs = _data->numLocs;
+  const int numDBStateVars = _data->numDBStateVars;
+  double_array dbValues(numDBStateVars);
 
+  const int stateVarsSize = _data->numVarsVertex;
+  double_array stateVars(stateVarsSize);
+
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    for (int i=0; i < numDBStateVars; ++i)
+      dbValues[i] = _data->dbStateVars[iLoc*numDBStateVars+i];
+
+    _friction->_dbToStateVars(&stateVars[0], dbValues);
+    
+    const double* const stateVarsE = 
+      (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
+		    (0 == stateVarsSize && 0 == stateVarsE) );
     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], 
+    for (int i=0; i < stateVarsSize; ++i) {
+      if (fabs(stateVarsE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     stateVars[i]/stateVarsE[i],
 				     tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(stressE[i], stress[i],
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i],
 				     tolerance);
+    } // for
   } // for
-} // _testCalcStress
+} // testDBToStateVars
 
 // ----------------------------------------------------------------------
-// Test _calcElasticConsts()
+// Test _nondimStateVars().
 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;
+pylith::friction::TestFrictionModel::testNonDimStateVars(void)
+{ // testNonDimStateVars
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
   
-  double_array elasticConsts(numConsts);
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  const int numLocs = _data->numLocs;
+  const int stateVarsSize = _data->numVarsVertex;
+  double_array stateVars(stateVarsSize);
 
   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));
+    for (int i=0; i < stateVarsSize; ++i)
+      stateVars[i] = _data->dbStateVars[iLoc*stateVarsSize+i];
+    _friction->_nondimStateVars(&stateVars[0], stateVars.size());
+    
+    const double* const stateVarsNondimE =
+      (stateVarsSize > 0) ? &_data->stateVarsNondim[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsNondimE) ||
+		    (0 == stateVarsSize && 0 == stateVarsNondimE) );
 
-    _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 tolerance = 1.0e-06;
+    for (int i=0; i < stateVarsSize; ++i) {
+      if (fabs(stateVarsNondimE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     stateVars[i]/stateVarsNondimE[i],
+				     tolerance);
+      else
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsNondimE[i], stateVars[i],
+				     tolerance);
+    } // for
+  } // for
+} // testNonDimStateVars
 
-    const double* elasticConstsE = &data->elasticConsts[iLoc*numConsts];
-    CPPUNIT_ASSERT(0 != elasticConstsE);
+// ----------------------------------------------------------------------
+// Test _dimStateVars().
+void
+pylith::friction::TestFrictionModel::testDimStateVars(void)
+{ // testDimStateVars
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
+  
+  const int numLocs = _data->numLocs;
+  const int stateVarsSize = _data->numVarsVertex;
+  double_array stateVars(stateVarsSize);
+
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    for (int i=0; i < stateVarsSize; ++i)
+      stateVars[i] = _data->stateVarsNondim[iLoc*stateVarsSize+i];
+    _friction->_dimStateVars(&stateVars[0], stateVars.size());
     
+    const double* const stateVarsE =
+      (stateVarsSize > 0) ? &_data->stateVars[iLoc*stateVarsSize] : 0;
+    CPPUNIT_ASSERT( (0 < stateVarsSize && 0 != stateVarsE) ||
+		    (0 == stateVarsSize && 0 == stateVarsE) );
+
     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], 
+    for (int i=0; i < stateVarsSize; ++i) {
+      if (fabs(stateVarsE[i]) > tolerance)
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				     stateVars[i]/stateVarsE[i],
 				     tolerance);
       else
-	CPPUNIT_ASSERT_DOUBLES_EQUAL(elasticConstsE[i], elasticConsts[i],
+	CPPUNIT_ASSERT_DOUBLES_EQUAL(stateVarsE[i], stateVars[i],
 				     tolerance);
+    } // for
   } // for
-} // _testCalcElasticConsts
+} // testDimStateVars
 
 // ----------------------------------------------------------------------
+// Test _calcFriction()
+void
+pylith::friction::TestFrictionModel::test_calcFriction(void)
+{ // _testCalcFriction
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
+
+  const int numLocs = _data->numLocs;
+  const int numPropsVertex = _data->numPropsVertex;
+  const int numVarsVertex = _data->numVarsVertex;
+  
+  double_array properties(numPropsVertex);
+  double_array stateVars(numVarsVertex);
+
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    for (int i=0; i < numPropsVertex; ++i)
+      properties[i] = _data->properties[iLoc*numPropsVertex+i];
+    for (int i=0; i < numVarsVertex; ++i)
+      stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
+    const double slip = _data->slip[iLoc];
+    const double slipRate = _data->slipRate[iLoc];
+    const double normalTraction = _data->normalTraction[iLoc];
+
+    const double friction = _friction->_calcFriction(
+					slip, slipRate, normalTraction,
+					&properties[0], properties.size(),
+					&stateVars[0], stateVars.size());
+    
+    const double frictionE = _data->friction[iLoc];
+    
+    const double tolerance = 1.0e-06;
+    if (0.0 != frictionE)
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, friction/frictionE, tolerance);
+    else
+      CPPUNIT_ASSERT_DOUBLES_EQUAL(frictionE, friction, tolerance);
+  } // for
+} // _testCalcFriction
+
+// ----------------------------------------------------------------------
 // Test _updateStateVars()
 void
-pylith::materials::TestElasticMaterial::test_updateStateVars(void)
+pylith::friction::TestFrictionModel::test_updateStateVars(void)
 { // test_updateStateVars
-  CPPUNIT_ASSERT(0 != _matElastic);
-  CPPUNIT_ASSERT(0 != _dataElastic);
-  const ElasticMaterialData* data = _dataElastic;
+  CPPUNIT_ASSERT(0 != _friction);
+  CPPUNIT_ASSERT(0 != _data);
 
   const bool computeStateVars = true;
 
-  const int numLocs = data->numLocs;
-  const int numPropsQuadPt = data->numPropsQuadPt;
-  const int numVarsQuadPt = data->numVarsQuadPt;
-  const int tensorSize = _matElastic->_tensorSize;
+  const int numLocs = _data->numLocs;
+  const int numPropsVertex = _data->numPropsVertex;
+  const int numVarsVertex = _data->numVarsVertex;
   
-  double_array properties(numPropsQuadPt);
-  double_array stateVars(numVarsQuadPt);
-  double_array strain(tensorSize);
-  double_array initialStress(tensorSize);
-  double_array initialStrain(tensorSize);
+  double_array properties(numPropsVertex);
+  double_array stateVars(numVarsVertex);
 
   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));
+    for (int i=0; i < numPropsVertex; ++i)
+      properties[i] = _data->properties[iLoc*numPropsVertex+i];
+    for (int i=0; i < numVarsVertex; ++i)
+      stateVars[i] = _data->stateVars[iLoc*numVarsVertex+i];
 
-    _matElastic->_updateStateVars(&stateVars[0], stateVars.size(),
-				  &properties[0], properties.size(),
-				  &strain[0], strain.size(),
-				  &initialStress[0], initialStress.size(),
-				  &initialStrain[0], initialStrain.size());
+    _friction->_updateStateVars(&stateVars[0], stateVars.size(),
+				&properties[0], properties.size());
     
     const double* stateVarsE = 
-      (numVarsQuadPt > 0) ? &data->stateVarsUpdated[iLoc*numVarsQuadPt] : 0;
-    CPPUNIT_ASSERT( (0 < numVarsQuadPt && 0 != stateVarsE) ||
-		    (0 == numVarsQuadPt && 0 == stateVarsE) );
+      (numVarsVertex > 0) ? &_data->stateVarsUpdated[iLoc*numVarsVertex] : 0;
+    CPPUNIT_ASSERT( (0 < numVarsVertex && 0 != stateVarsE) ||
+		    (0 == numVarsVertex && 0 == stateVarsE) );
 
     const double tolerance = 1.0e-06;
-    for (int i=0; i < numVarsQuadPt; ++i)
-      if (fabs(stateVarsE[i]) > tolerance)
+    for (int i=0; i < numVarsVertex; ++i)
+      if (0.0 != stateVarsE[i])
 	CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stateVars[i]/stateVarsE[i], 
 				     tolerance);
       else
@@ -624,50 +531,31 @@
 } // 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)
+pylith::friction::TestFrictionModel::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);
+  _friction->normalizer(normalizer);
 } // setupNormalizer
 
 // ----------------------------------------------------------------------
 // Setup mesh and material.
 void
-pylith::materials::TestElasticMaterial::_initialize(
+pylith::friction::TestFrictionModel::_initialize(
 					  topology::Mesh* mesh,
-					  ElasticStrain1D* material,
-					  const ElasticStrain1DData* data)
+					  StaticFriction* friction,
+					  const StaticFrictionData* data)
 { // _initialize
   CPPUNIT_ASSERT(0 != mesh);
-  CPPUNIT_ASSERT(0 != material);
+  CPPUNIT_ASSERT(0 != friction);
   CPPUNIT_ASSERT(0 != data);
 
+#if 0
   meshio::MeshIOAscii iohandler;
   iohandler.filename("data/line3.mesh");
   iohandler.read(mesh);
@@ -739,12 +627,13 @@
   
   material->dbProperties(&db);
   material->id(materialId);
-  material->label("my_material");
+  material->label("my_friction");
   material->normalizer(normalizer);
   material->dbInitialStress(&dbStress);
   material->dbInitialStrain(&dbStrain);
   
   material->initialize(*mesh, &quadrature);
+#endif
 } // _initialize
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestFrictionModel.hh	2010-01-23 00:30:50 UTC (rev 16164)
@@ -31,6 +31,7 @@
   namespace friction {
     class TestFrictionModel;
     class FrictionModelData;
+    class StaticFrictionData;
   } // friction
 } // pylith
 
@@ -48,6 +49,8 @@
   CPPUNIT_TEST( testNormalizer );
   CPPUNIT_TEST( testInitialize );
   CPPUNIT_TEST( testRetrievePropsAndVars );
+  CPPUNIT_TEST( testCalcFriction );
+  CPPUNIT_TEST( testUpdateStateVars );
 
   CPPUNIT_TEST_SUITE_END();
 
@@ -69,9 +72,6 @@
   /// Test normalizer().
   void testNormalizer(void);
 
-  /// Test needNewJacobian()
-  void testNeedNewJacobian(void);
-
   /// Test initialize()
   void testInitialize(void);
 
@@ -97,18 +97,30 @@
   virtual
   void tearDown(void);
 
+  /// Test _dbToProperties().
+  void testDBToProperties(void);
+
+  /// Test _nondimProperties().
+  void testNonDimProperties(void);
+
+  /// Test _dimProperties().
+  void testDimProperties(void);
+
+  /// Test _dbToStateVars().
+  void testDBToStateVars(void);
+
+  /// Test _nondimStateVars().
+  void testNonDimStateVars(void);
+
+  /// Test _dimStateVars().
+  void testDimStateVars(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 :
 
@@ -127,8 +139,12 @@
   /** Setup mesh and material.
    *
    * @param mesh Finite-element mesh.
+   * @param friction Friction model.
+   * @param data Data with properties for friction model.
    */
-  void _initialize(topology::SubMesh* mesh);
+  void _initialize(topology::Mesh* mesh,
+		   StaticFriction* friction,
+		   const StaticFrictionData* data);
 
 }; // class TestFrictionModel
 

Deleted: short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -1,76 +0,0 @@
-// -*- 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 

Deleted: short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh	2010-01-23 00:30:50 UTC (rev 16164)
@@ -1,80 +0,0 @@
-// -*- 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 

Copied: short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.cc (from rev 16163, short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.cc)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.cc	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -0,0 +1,56 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestStaticFriction.hh" // Implementation of class methods
+
+#include "data/StaticFrictionData.hh" // USES StaticFrictionData
+
+#include "pylith/friction/StaticFriction.hh" // USES StaticFriction
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::friction::TestStaticFriction );
+
+// ----------------------------------------------------------------------
+// Setup testing data.
+void
+pylith::friction::TestStaticFriction::setUp(void)
+{ // setUp
+  _friction = new StaticFriction();
+  _data = new StaticFrictionData();
+  setupNormalizer();
+} // setUp
+
+// ----------------------------------------------------------------------
+// Test hasProperty().
+void
+pylith::friction::TestStaticFriction::testHasProperty(void)
+{ // testHasProperty
+  StaticFriction material;
+
+  CPPUNIT_ASSERT(material.hasProperty("friction_coefficient"));
+  CPPUNIT_ASSERT(!material.hasProperty("aaa"));
+} // testHasProperty
+
+// ----------------------------------------------------------------------
+// Test hasStateVar().
+void
+pylith::friction::TestStaticFriction::testHasStateVar(void)
+{ // testHasStateVar
+  StaticFriction material;
+
+  CPPUNIT_ASSERT(!material.hasStateVar("aaa"));
+} // testHasStateVar
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.hh (from rev 16163, short/3D/PyLith/trunk/unittests/libtests/friction/TestStatiFriction.hh)
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.hh	                        (rev 0)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/TestStaticFriction.hh	2010-01-23 00:30:50 UTC (rev 16164)
@@ -0,0 +1,70 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/friction/TestStaticFriction.hh
+ *
+ * @brief C++ TestStaticFriction object
+ *
+ * C++ unit testing for StaticFriction.
+ */
+
+#if !defined(pylith_friction_testelasticisotropic3d_hh)
+#define pylith_friction_testelasticisotropic3d_hh
+
+#include "TestFrictionModel.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace friction {
+    class TestStaticFriction;
+  } // friction
+} // pylith
+
+/// C++ unit testing for StaticFriction
+class pylith::friction::TestStaticFriction : public TestFrictionModel
+{ // class TestStaticFriction
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestStaticFriction );
+
+  CPPUNIT_TEST( testDBToProperties );
+  CPPUNIT_TEST( testNonDimProperties );
+  CPPUNIT_TEST( testDimProperties );
+  CPPUNIT_TEST( testDBToStateVars );
+  CPPUNIT_TEST( testNonDimStateVars );
+  CPPUNIT_TEST( testDimStateVars );
+  CPPUNIT_TEST( testHasProperty );
+  CPPUNIT_TEST( testHasStateVar );
+  CPPUNIT_TEST( test_calcFriction );
+  CPPUNIT_TEST( test_updateStateVars );
+
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Setup testing data.
+  void setUp(void);
+
+  /// Test hasProperty().
+  void testHasProperty(void);
+
+  /// Test hasStateVar().
+  void testHasStateVar(void);
+
+}; // class TestStaticFriction
+
+#endif // pylith_friction_testelasticisotropic3d_hh
+
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -10,19 +10,18 @@
 // ======================================================================
 //
 
-#include "MaterialData.hh"
+#include "FrictionModelData.hh"
 
 // ----------------------------------------------------------------------
 // Constructor
-pylith::materials::MaterialData::MaterialData(void) :
-  dimension(0),
+pylith::friction::FrictionModelData::FrictionModelData(void) :
   numLocs(0),
   numProperties(0),
   numStateVars(0),
   numDBProperties(0),
   numDBStateVars(0),
-  numPropsQuadPt(0),
-  numVarsQuadPt(0),
+  numPropsVertex(0),
+  numVarsVertex(0),
   numPropertyValues(0),
   numStateVarValues(0),
   dbPropertyValues(0),
@@ -31,6 +30,13 @@
   dbStateVars(0),
   properties(0),
   stateVars(0),
+  propertiesNondim(0),
+  stateVarsNondim(0),
+  friction(0),
+  slip(0),
+  slipRate(0),
+  normalTraction(0),
+  stateVarsUpdated(0),
   lengthScale(0),
   timeScale(0),
   pressureScale(0),
@@ -40,7 +46,7 @@
 
 // ----------------------------------------------------------------------
 // Destructor
-pylith::materials::MaterialData::~MaterialData(void)
+pylith::friction::FrictionModelData::~FrictionModelData(void)
 { // destructor
 } // destructor
 

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/FrictionModelData.hh	2010-01-23 00:30:50 UTC (rev 16164)
@@ -33,13 +33,15 @@
 // PUBLIC MEMBERS ///////////////////////////////////////////////////////
 public:
 
+  int numLocs; ///< Number of locations
+
   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 numPropsVertex; ///< Number of properties at each vertex.
+  int numVarsVertex; ///< Number of state variables at each vertex.
 
   int* numPropertyValues; ///< Number of values for each property
   int* numStateVarValues; ///< Number of values for each state variable
@@ -54,7 +56,11 @@
   double* propertiesNondim; ///< Nondimensional properties at locations.
   double* stateVarsNondim; ///< Nondimensional state variables at locations.
 
-  double* friction; ///< Friction at location.
+  double* friction; ///< Friction at locations.
+  double* slip; ///< Slip at locations.
+  double* slipRate; ///< Slip rate at locations.
+  double* normalTraction; ///< Normal traction at locations.
+
   double* stateVarsUpdated; ///< Updated state variables at location.
 
   double lengthScale; ///< Length scale for nondimensionalization.

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -10,213 +10,98 @@
 // ======================================================================
 //
 
-// DO NOT EDIT THIS FILE
-// This file was generated from python application elasticisotropic3d.
+#include "StaticFrictionData.hh"
 
-#include "ElasticIsotropic3DData.hh"
+const int pylith::friction::StaticFrictionData::_numLocs = 2;
 
-const int pylith::materials::ElasticIsotropic3DData::_dimension = 3;
+const int pylith::friction::StaticFrictionData::_numProperties = 1;
 
-const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
+const int pylith::friction::StaticFrictionData::_numStateVars = 0;
 
-const int pylith::materials::ElasticIsotropic3DData::_numProperties = 3;
+const int pylith::friction::StaticFrictionData::_numDBProperties = 1;
 
-const int pylith::materials::ElasticIsotropic3DData::_numStateVars = 0;
+const int pylith::friction::StaticFrictionData::_numDBStateVars = 0;
 
-const int pylith::materials::ElasticIsotropic3DData::_numDBProperties = 3;
+const int pylith::friction::StaticFrictionData::_numPropsVertex = 1;
 
-const int pylith::materials::ElasticIsotropic3DData::_numDBStateVars = 0;
+const int pylith::friction::StaticFrictionData::_numVarsVertex = 0;
 
-const int pylith::materials::ElasticIsotropic3DData::_numPropsQuadPt = 3;
+const double pylith::friction::StaticFrictionData::_lengthScale =   1.00000000e+03;
 
-const int pylith::materials::ElasticIsotropic3DData::_numVarsQuadPt = 0;
+const double pylith::friction::StaticFrictionData::_timeScale =   1.00000000e+00;
 
-const double pylith::materials::ElasticIsotropic3DData::_lengthScale =   1.00000000e+03;
+const double pylith::friction::StaticFrictionData::_pressureScale =   2.25000000e+10;
 
-const double pylith::materials::ElasticIsotropic3DData::_timeScale =   1.00000000e+00;
+const double pylith::friction::StaticFrictionData::_densityScale =   1.00000000e+03;
 
-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[] = {
+const int pylith::friction::StaticFrictionData::_numPropertyValues[] = {
 1,
-1,
-1,
 };
 
-const int* pylith::materials::ElasticIsotropic3DData::_numStateVarValues = 0;
+const int* pylith::friction::StaticFrictionData::_numStateVarValues = 0;
 
-const char* pylith::materials::ElasticIsotropic3DData::_dbPropertyValues[] = {
-"density",
-"vs",
-"vp",
+const char* pylith::friction::StaticFrictionData::_dbPropertyValues[] = {
+"friction-coefficient",
 };
 
-const char** pylith::materials::ElasticIsotropic3DData::_dbStateVarValues = 0;
+const char** pylith::friction::StaticFrictionData::_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::friction::StaticFrictionData::_dbProperties[] = {
+  0.6,
+  0.6,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_dbStateVars = 0;
+const double* pylith::friction::StaticFrictionData::_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::friction::StaticFrictionData::_properties[] = {
+  0.6,
+  0.6,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_stateVars = 0;
+const double* pylith::friction::StaticFrictionData::_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::friction::StaticFrictionData::_propertiesNondim[] = {
+   0.6,
+   0.6,
 };
 
-const double* pylith::materials::ElasticIsotropic3DData::_stateVarsNondim = 0;
+const double* pylith::friction::StaticFrictionData::_stateVarsNondim = 0;
 
-const double pylith::materials::ElasticIsotropic3DData::_density[] = {
-  2.50000000e+03,
-  2.00000000e+03,
+const double pylith::friction::StaticFrictionData::_friction[] = {
+  1.32,
+   0.0,
 };
 
-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::friction::StaticFrictionData::_slip[] = {
+  0.12,
+  0.25,
 };
 
-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::friction::StaticFrictionData::_slipRate[] = {
+  0.74,
+  0.64,
 };
 
-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::friction::StaticFrictionData::_normalTraction[] = {
+  -2.2,
+  0.8,
 };
 
-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::friction::StaticFrictionData::_stateVarsUpdated = 0;
 
-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)
+pylith::friction::StaticFrictionData::StaticFrictionData(void)
 { // constructor
-  dimension = _dimension;
   numLocs = _numLocs;
   numProperties = _numProperties;
   numStateVars = _numStateVars;
   numDBProperties = _numDBProperties;
   numDBStateVars = _numDBStateVars;
-  numPropsQuadPt = _numPropsQuadPt;
-  numVarsQuadPt = _numVarsQuadPt;
+  numPropsVertex = _numPropsVertex;
+  numVarsVertex = _numVarsVertex;
   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);
@@ -227,16 +112,14 @@
   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);
+  friction = const_cast<double*>(_friction);
+  slip = const_cast<double*>(_slip);
+  slipRate = const_cast<double*>(_slipRate);
+  normalTraction = const_cast<double*>(_normalTraction);
   stateVarsUpdated = const_cast<double*>(_stateVarsUpdated);
 } // constructor
 
-pylith::materials::ElasticIsotropic3DData::~ElasticIsotropic3DData(void)
+pylith::friction::StaticFrictionData::~StaticFrictionData(void)
 {}
 
 

Modified: short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/friction/data/StaticFrictionData.hh	2010-01-23 00:30:50 UTC (rev 16164)
@@ -10,35 +10,30 @@
 // ======================================================================
 //
 
-// DO NOT EDIT THIS FILE
-// This file was generated from python application elasticisotropic3d.
+#if !defined(pylith_friction_staticfrictiondata_hh)
+#define pylith_friction_staticfrictiondata_hh
 
-#if !defined(pylith_materials_elasticisotropic3ddata_hh)
-#define pylith_materials_elasticisotropic3ddata_hh
+#include "FrictionModelData.hh"
 
-#include "ElasticMaterialData.hh"
-
 namespace pylith {
-  namespace materials {
-     class ElasticIsotropic3DData;
+  namespace friction {
+     class StaticFrictionData;
   } // pylith
-} // materials
+} // friction
 
-class pylith::materials::ElasticIsotropic3DData : public ElasticMaterialData
+class pylith::friction::StaticFrictionData : public FrictionModelData
 {
 
 public: 
 
   /// Constructor
-  ElasticIsotropic3DData(void);
+  StaticFrictionData(void);
 
   /// Destructor
-  ~ElasticIsotropic3DData(void);
+  ~StaticFrictionData(void);
 
 private:
 
-  static const int _dimension;
-
   static const int _numLocs;
 
   static const int _numProperties;
@@ -49,9 +44,9 @@
 
   static const int _numDBStateVars;
 
-  static const int _numPropsQuadPt;
+  static const int _numPropsVertex;
 
-  static const int _numVarsQuadPt;
+  static const int _numVarsVertex;
 
   static const double _lengthScale;
 
@@ -61,8 +56,6 @@
 
   static const double _densityScale;
 
-  static const double _dtStableImplicit;
-
   static const int _numPropertyValues[];
 
   static const int* _numStateVarValues;
@@ -83,22 +76,18 @@
 
   static const double* _stateVarsNondim;
 
-  static const double _density[];
+  static const double _friction[];
 
-  static const double _strain[];
+  static const double _slip[];
 
-  static const double _stress[];
+  static const double _slipRate[];
 
-  static const double _elasticConsts[];
+  static const double _normalTraction[];
 
-  static const double _initialStress[];
-
-  static const double _initialStrain[];
-
   static const double* _stateVarsUpdated;
 
 };
 
-#endif // pylith_materials_elasticisotropic3ddata_hh
+#endif // pylith_friction_staticfrictiondata_hh
 
 // End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc	2010-01-22 05:54:49 UTC (rev 16163)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.cc	2010-01-23 00:30:50 UTC (rev 16164)
@@ -31,6 +31,8 @@
   dbStateVars(0),
   properties(0),
   stateVars(0),
+  propertiesNondim(0),
+  stateVarsNondim(0),
   lengthScale(0),
   timeScale(0),
   pressureScale(0),



More information about the CIG-COMMITS mailing list