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

brad at geodynamics.org brad at geodynamics.org
Sun Mar 18 21:19:08 PDT 2007


Author: brad
Date: 2007-03-18 21:19:07 -0700 (Sun, 18 Mar 2007)
New Revision: 6277

Added:
   short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/header.hh
Modified:
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
   short/3D/PyLith/trunk/libsrc/materials/Material.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
   short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
   short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
   short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh
Log:
Implemented a bunch of material unit tests. Still need to implement 2 tests (currently forced to fail).

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -53,7 +53,7 @@
 const int pylith::materials::_ElasticIsotropic3D::numElasticConsts = 21;
 const int pylith::materials::_ElasticIsotropic3D::numDBValues = 3;
 const char* pylith::materials::_ElasticIsotropic3D::namesDBValues[] =
-  {"density", "vp", "vs" };
+  {"density", "vs", "vp" };
 const int pylith::materials::_ElasticIsotropic3D::numParameters = 3;
 const char* pylith::materials::_ElasticIsotropic3D::namesParameters[] =
   {"density", "mu", "lambda" };
@@ -129,7 +129,7 @@
 void
 pylith::materials::ElasticIsotropic3D::_dbToParameters(double* paramVals,
 						       const int numParams,
-						       double* dbValues,
+						       const double* dbValues,
 						       const int numValues) const
 { // computeParameters
   assert(0 != paramVals);
@@ -194,11 +194,11 @@
     _elasticConsts[indexC+ 7] = lambda; // C2233
     _elasticConsts[indexC+ 8] = 0; // C2212
     _elasticConsts[indexC+ 9] = 0; // C2223
-    _elasticConsts[indexC+10] = 0; // C2212
+    _elasticConsts[indexC+10] = 0; // C2213
     _elasticConsts[indexC+11] = lambda + 2.0*mu; // C3333
     _elasticConsts[indexC+12] = 0; // C3312
     _elasticConsts[indexC+13] = 0; // C3323
-    _elasticConsts[indexC+14] = 0; // C3312
+    _elasticConsts[indexC+14] = 0; // C3313
     _elasticConsts[indexC+15] = mu; // C1212
     _elasticConsts[indexC+16] = 0; // C1223
     _elasticConsts[indexC+17] = 0; // C1213

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -112,7 +112,7 @@
    */
   void _dbToParameters(double* paramVals,
 		       const int numParams,
-		       double* dbValues,
+		       const double* dbValues,
 		       const int numValues) const;
 
   /** Compute density at locations from parameters.

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -28,12 +28,15 @@
 namespace pylith {
   namespace materials {
     class ElasticMaterial;
+
+    class TestElasticMaterial; // unit testing
   } // materials
 } // pylith
 
 /// C++ object for material constitutive model.
 class pylith::materials::ElasticMaterial : public Material
 { // class ElasticMaterial
+  friend class TestElasticMaterial; ///< unit testing
 
   // PUBLIC TYPEDEFS ////////////////////////////////////////////////////
 public :

Modified: short/3D/PyLith/trunk/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -156,7 +156,7 @@
   virtual
   void _dbToParameters(double* paramVals,
 		       const int numParams,
-		       double* dbValues,
+		       const double* dbValues,
 		       const int numValues) const = 0;
 
   // NOT IMPLEMENTED ////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/Makefile.am	2007-03-19 04:19:07 UTC (rev 6277)
@@ -20,6 +20,8 @@
 # Primary source files
 testmaterials_SOURCES = \
 	TestMaterial.cc \
+	TestElasticMaterial.cc \
+	TestElasticIsotropic3D.cc \
 	test_materials.cc
 
 noinst_HEADERS = \
@@ -28,10 +30,12 @@
 # Source files associated with testing data
 testmaterials_SOURCES += \
 	data/MaterialData.cc \
+	data/ElasticMaterialData.cc \
 	data/ElasticIsotropic3DData.cc
 
 noinst_HEADERS += \
 	data/MaterialData.hh \
+	data/ElasticMaterialData.hh \
 	data/ElasticIsotropic3DData.hh
 
 testmaterials_LDFLAGS = $(PETSC_LIB)

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,74 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticIsotropic3D.hh" // Implementation of class methods
+
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "data/ElasticIsotropic3DData.hh" // USES ElasticIsotropic3DData
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticIsotropic3D );
+
+// ----------------------------------------------------------------------
+// Test DBValues()
+void
+pylith::materials::TestElasticIsotropic3D::testDBValues(void)
+{ // testDBValues
+  ElasticIsotropic3D material;
+  ElasticIsotropic3DData data;
+  _testDBValues(&material, data);
+} // testDBValues
+
+// ----------------------------------------------------------------------
+// Test parameters()
+void
+pylith::materials::TestElasticIsotropic3D::testParameters(void)
+{ // testParameters
+  ElasticIsotropic3D material;
+  ElasticIsotropic3DData data;
+  _testParameters(&material, data);
+} // testParameters
+
+// ----------------------------------------------------------------------
+// Test _dbToParameters()
+void
+pylith::materials::TestElasticIsotropic3D::testDBToParameters(void)
+{ // testDBToParameters
+  ElasticIsotropic3D material;
+  ElasticIsotropic3DData data;
+  _testDBToParameters(&material, data);
+} // testDBToParameters
+
+// ----------------------------------------------------------------------
+// Test calcDensity()
+void
+pylith::materials::TestElasticIsotropic3D::testCalcDensity(void)
+{ // testCalcDensity
+  ElasticIsotropic3D material;
+  ElasticIsotropic3DData data;
+  _testCalcDensity(&material, data);
+} // testCalcDensity
+
+// ----------------------------------------------------------------------
+// Test calcElasticConsts()
+void
+pylith::materials::TestElasticIsotropic3D::testCalcElasticConsts(void)
+{ // testElasticConsts
+  ElasticIsotropic3D material;
+  ElasticIsotropic3DData data;
+  _testCalcElasticConsts(&material, data);
+} // testElasticConsts
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticIsotropic3D.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,71 @@
+// -*- 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 ElasticIsotropic3D;
+    class TestElasticIsotropic3D;
+    class ElasticIsotropic3DData;
+  } // materials
+} // pylith
+
+/// C++ unit testing for ElasticIsotropic3D
+class pylith::materials::TestElasticIsotropic3D : public TestElasticMaterial
+{ // class TestElasticIsotropic3D
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticIsotropic3D );
+  CPPUNIT_TEST( testDBToParameters );
+  CPPUNIT_TEST( testDBValues );
+  CPPUNIT_TEST( testParameters );
+  CPPUNIT_TEST( testCalcDensity );
+  CPPUNIT_TEST( testCalcElasticConsts );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test DBValues()
+  void testDBValues(void);
+
+  /// Test parameters()
+  void testParameters(void);
+
+  /// Test _dbToParameters()
+  void testDBToParameters(void);
+
+  /// Test calcDensity()
+  void testCalcDensity(void);
+
+  /// Test calcElasticConsts()
+  void testCalcElasticConsts(void);
+
+}; // class TestElasticIsotropic3D
+
+#endif // pylith_materials_testelasticisotropic3d_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,152 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "TestElasticMaterial.hh" // Implementation of class methods
+
+#include "pylith/materials/ElasticIsotropic3D.hh" // USES ElasticIsotropic3D
+#include "data/ElasticMaterialData.hh" // USES ElasticMaterialData
+
+// ----------------------------------------------------------------------
+CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestElasticMaterial );
+
+// ----------------------------------------------------------------------
+// Test clone()
+void
+pylith::materials::TestElasticMaterial::testClone(void)
+{ // testClone
+  const char* label = "my_material";
+  const int id = 34;
+  ElasticIsotropic3D material;
+  material.label(label);
+  material.id(id);
+
+  ElasticMaterial* mycopy = material.clone();
+  CPPUNIT_ASSERT(0 != mycopy);
+  CPPUNIT_ASSERT(0 == strcmp(label, material.label().c_str()));
+  CPPUNIT_ASSERT_EQUAL(id, material.id());
+} // testClone
+
+// ----------------------------------------------------------------------
+// Test density()
+void
+pylith::materials::TestElasticMaterial::testDensity(void)
+{ // testDensity
+  const double densityE[] = { 1.0, 8.0 };
+  const int numQuadPts = 2;
+
+  ElasticIsotropic3D material;
+  material._density = (numQuadPts > 0) ? new double[numQuadPts] : 0;
+  CPPUNIT_ASSERT(0 != material._density);
+  memcpy(material._density, densityE, numQuadPts*sizeof(double));
+  
+  const double* density = material.density();
+  for (int i=0; i < numQuadPts; ++i)
+    CPPUNIT_ASSERT_EQUAL(densityE[i], density[i]);
+} // testDensity
+
+// ----------------------------------------------------------------------
+// Test numElasticConsts() and elasticConsts()
+void
+pylith::materials::TestElasticMaterial::testElasticConsts(void)
+{ // testElasticConsts
+  const double elasticConstsE[] = { 4.0, 1.0, 2.0 };
+  const int numQuadPts = 3;
+
+  ElasticIsotropic3D material;
+  material._elasticConsts = (numQuadPts > 0) ? new double[numQuadPts] : 0;
+  CPPUNIT_ASSERT(0 != material._elasticConsts);
+  memcpy(material._elasticConsts, elasticConstsE, numQuadPts*sizeof(double));
+  
+  const double* elasticConsts = material.elasticConsts();
+  for (int i=0; i < numQuadPts; ++i)
+    CPPUNIT_ASSERT_EQUAL(elasticConstsE[i], elasticConsts[i]);
+
+  CPPUNIT_ASSERT_EQUAL(21, material.numElasticConsts());
+} // testElasticConsts
+
+// ----------------------------------------------------------------------
+// Test calcProperties()
+void
+pylith::materials::TestElasticMaterial::testCalcProperties(void)
+{ // testCalcProperties
+  CPPUNIT_ASSERT(false);
+} // testCalcProperties
+    
+// ----------------------------------------------------------------------
+// Test _initCellData()
+void
+pylith::materials::TestElasticMaterial::testInitCellData(void)
+{ // testInitCellData
+  ElasticIsotropic3D material;
+
+  CPPUNIT_ASSERT(0 == material._density);
+  CPPUNIT_ASSERT(0 == material._elasticConsts);
+  const int numQuadPts = 4;
+  material._initCellData(numQuadPts);
+  CPPUNIT_ASSERT(0 != material._density);
+  CPPUNIT_ASSERT(0 != material._elasticConsts);
+} // testInitCellData
+
+// ----------------------------------------------------------------------
+// Test _calcDensity()
+void
+pylith::materials::TestElasticMaterial::_testCalcDensity(
+					ElasticMaterial* material,
+					const ElasticMaterialData& data) const
+{ // _testCalcDensity
+  const int numQuadPts = data.numLocs;
+  material->_initCellData(numQuadPts);
+  material->_calcDensity(data.parameterData, data.numParameters, data.numLocs);
+  const double* density = material->density();
+  const double* densityE = data.density;
+  
+  CPPUNIT_ASSERT(0 != density);
+  CPPUNIT_ASSERT(0 != densityE);
+
+  const double tolerance = 1.0e-06;
+  const double size = numQuadPts;
+  for (int i=0; i < size; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density[i]/densityE[i], tolerance);
+} // _testCalcDensity
+
+// ----------------------------------------------------------------------
+// Test _calcElasticConsts()
+void
+pylith::materials::TestElasticMaterial::_testCalcElasticConsts(
+				       ElasticMaterial* material,
+				       const ElasticMaterialData& data) const
+{ // _testCalcElasticConsts
+  const int numQuadPts = data.numLocs;
+  material->_initCellData(numQuadPts);
+  material->_calcElasticConsts(data.parameterData, data.numParameters, 
+			       data.numLocs);
+  const double* elasticConsts = material->elasticConsts();
+  const double* elasticConstsE = data.elasticConsts;
+  
+  CPPUNIT_ASSERT(0 != elasticConsts);
+  CPPUNIT_ASSERT(0 != elasticConstsE);
+
+  const double tolerance = 1.0e-06;
+  const double size = numQuadPts * material->numElasticConsts();
+  for (int i=0; i < size; ++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);
+} // _testCalcElasticConsts
+
+
+// End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/**
+ * @file unittests/libtests/materials/TestElasticMaterial.hh
+ *
+ * @brief C++ TestElasticMaterial object
+ *
+ * C++ unit testing for ElasticMaterial.
+ */
+
+#if !defined(pylith_materials_testelasticmaterial_hh)
+#define pylith_materials_testelasticmaterial_hh
+
+#include "TestMaterial.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace materials {
+    class ElasticMaterial;
+    class TestElasticMaterial;
+    class ElasticMaterialData;
+  } // materials
+} // pylith
+
+/// C++ unit testing for ElasticMaterial
+class pylith::materials::TestElasticMaterial : public TestMaterial
+{ // class TestElasticMaterial
+
+  // CPPUNIT TEST SUITE /////////////////////////////////////////////////
+  CPPUNIT_TEST_SUITE( TestElasticMaterial );
+  CPPUNIT_TEST( testClone );
+  CPPUNIT_TEST( testDensity );
+  CPPUNIT_TEST( testElasticConsts );
+  CPPUNIT_TEST( testCalcProperties );
+  CPPUNIT_TEST( testInitCellData );
+  CPPUNIT_TEST_SUITE_END();
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Test clone()
+  void testClone(void);
+
+  /// Test density()
+  void testDensity(void);
+
+  /// Test elaticConsts()
+  void testElasticConsts(void);
+
+  /// Test calcProperties()
+  void testCalcProperties(void);
+
+  /// Test _initCellData()
+  void testInitCellData(void);
+
+  // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+  /** Test _calcDensity()
+   *
+   * @param material Pointer to material
+   * @param data Data for testing material
+   */
+  void _testCalcDensity(ElasticMaterial* material,
+			const ElasticMaterialData& data) const;
+
+  /** Test _calcElasticConsts()
+   *
+   * @param material Pointer to material
+   * @param data Data for testing material
+   */
+  void _testCalcElasticConsts(ElasticMaterial* material,
+			      const ElasticMaterialData& data) const;
+
+}; // class TestElasticMaterial
+
+#endif // pylith_materials_testelasticmaterial_hh
+
+// End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -19,6 +19,8 @@
 
 #include "spatialdata/spatialdb/SimpleDB.hh" // USES SimpleDB
 
+#include <math.h> // USES assert()
+
 // ----------------------------------------------------------------------
 CPPUNIT_TEST_SUITE_REGISTRATION( pylith::materials::TestMaterial );
 
@@ -76,7 +78,24 @@
 pylith::materials::TestMaterial::_testDBToParameters(Material* material,
 						     const MaterialData& data) const
 { // _testDBToParameters
-  CPPUNIT_ASSERT(false);
+  CPPUNIT_ASSERT(0 != material);
+  
+  const int numDBValues = data.numDBValues;
+  double* const dbData = data.dbData;
+  const int numParameters = data.numParameters;
+  double* const parameterDataE = data.parameterData;
+
+  double* parameterData = (numParameters > 0) ? new double[numParameters] : 0;
+  material->_dbToParameters(parameterData, numParameters,
+			    dbData, numDBValues);
+
+  const double tolerance = 1.0e-06;
+  for (int i=0; i < numParameters; ++i)
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, 
+				 parameterData[i]/parameterDataE[i],
+				 tolerance);
+
+  delete[] parameterData; parameterData = 0;
 } // _testDBToParameters
 
 // ----------------------------------------------------------------------
@@ -85,6 +104,8 @@
 pylith::materials::TestMaterial::_testDBValues(Material* material,
 					       const MaterialData& data) const
 { // _testDBValues
+  CPPUNIT_ASSERT(0 != material);
+
   const int numDBValues = data.numDBValues;
 
   CPPUNIT_ASSERT(numDBValues == material->_numDBValues());
@@ -100,6 +121,8 @@
 pylith::materials::TestMaterial::_testParameters(Material* material,
 						 const MaterialData& data) const
 { // _testParameters
+  CPPUNIT_ASSERT(0 != material);
+
   const int numParameters = data.numParameters;
 
   CPPUNIT_ASSERT(numParameters == material->_numParameters());

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestMaterial.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -18,8 +18,8 @@
  * C++ unit testing for Material.
  */
 
-#if !defined(pylith_materials_testquadrature_hh)
-#define pylith_materials_testquadrature_hh
+#if !defined(pylith_materials_testmaterial_hh)
+#define pylith_materials_testmaterial_hh
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -88,6 +88,6 @@
 
 }; // class TestMaterial
 
-#endif // pylith_materials_testquadrature_hh
+#endif // pylith_materials_testmaterial_hh
 
 // End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3D.py	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/materials/data/ElasticIsotropic3D.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ ElasticIsotropic3D object.
+
+from ElasticMaterialApp import ElasticMaterialApp
+
+import numpy
+
+# ----------------------------------------------------------------------
+# ElasticIsotropic3D class
+class ElasticIsotropic3D(ElasticMaterialApp):
+  """
+  Python application for generating C++ data files for testing C++
+  ElasticIsotropic3D object.
+  """
+  
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+  
+  def __init__(self, name="elasticisotropic3d"):
+    """
+    Constructor.
+    """
+    ElasticMaterialApp.__init__(self, name)
+
+    self.numDBValues = 3
+    self.dbValues = ["density", "vs", "vp"]
+    self.numParameters = 3
+    self.parameterNames = ["density", "mu", "lambda"]
+
+    densityA = 2500.0
+    vsA = 3000.0
+    vpA = vsA*3**0.5
+    densityB = 2000.0
+    vsB = 1200.0
+    vpB = vsB*3**0.5
+    self.dbData = numpy.array([ [densityA, vsA, vpA],
+                                [densityB, vsB, vpB] ],
+                              dtype=numpy.float64)
+    muA = vsA*vsA*densityA
+    lambdaA = vpA*vpA*densityA - 2.0*muA
+    muB = vsB*vsB*densityB
+    lambdaB = vpB*vpB*densityB - 2.0*muB
+    self.parameterData = numpy.array([ [densityA, muA, lambdaA],
+                                       [densityB, muB, lambdaB] ],
+                                     dtype=numpy.float64)
+    
+    self.numLocs = 2
+    numElasticConsts = 21
+    self.density = numpy.array([densityA, densityB],
+                               dtype=numpy.float64)
+    self.elasticConsts = numpy.zeros( (self.numLocs, numElasticConsts),
+                                      dtype=numpy.float64)
+    self.elasticConsts[0,:] = self._calcElasticConsts(densityA, muA, lambdaA)
+    self.elasticConsts[1,:] = self._calcElasticConsts(densityB, muB, lambdaB)
+    return
+
+
+  def _calcElasticConsts(self, densityV, muV, lambdaV):
+    """
+    Compute elastic constants.
+    """
+    C1111 = lambdaV + 2.0*muV
+    C1122 = lambdaV
+    C1133 = lambdaV
+    C1112 = 0.0
+    C1123 = 0.0
+    C1113 = 0.0
+    C2222 = lambdaV + 2.0*muV
+    C2233 = lambdaV
+    C2212 = 0.0
+    C2223 = 0.0
+    C2213 = 0.0
+    C3333 = lambdaV + 2.0*muV
+    C3312 = 0.0
+    C3323 = 0.0
+    C3313 = 0.0
+    C1212 = muV
+    C1223 = 0.0
+    C1213 = 0.0
+    C2323 = muV
+    C2313 = 0.0
+    C1313 = muV
+    elasticConsts = numpy.array([C1111, C1122, C1133, C1112, C1123, C1113,
+                                 C2222, C2233, C2212, C2223, C2213,
+                                 C3333, C3312, C3323, C3313,
+                                 C1212, C1223, C1213,
+                                 C2323, C2313,
+                                 C1313], dtype=numpy.float64)
+    return elasticConsts
+  
+
+# MAIN /////////////////////////////////////////////////////////////////
+if __name__ == "__main__":
+
+  app = ElasticIsotropic3D()
+  app.run()
+
+
+# End of file 

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -10,25 +10,108 @@
 // ======================================================================
 //
 
+// DO NOT EDIT THIS FILE
+// This file was generated from python application elasticisotropic3d.
+
 #include "ElasticIsotropic3DData.hh"
 
 const int pylith::materials::ElasticIsotropic3DData::_numDBValues = 3;
 
-const int pylith::materials::ElasticIsotropic3DData::_numParameters = 1;
+const int pylith::materials::ElasticIsotropic3DData::_numParameters = 3;
 
-const char* pylith::materials::ElasticIsotropic3DData::_dbValues[] =
-  { "density", "vp", "vs" };
+const int pylith::materials::ElasticIsotropic3DData::_numLocs = 2;
 
-const char* pylith::materials::ElasticIsotropic3DData::_parameterNames[] =
-  { "density", "mu", "lambda" };
+const char* pylith::materials::ElasticIsotropic3DData::_dbValues[] = {
+"density",
+"vs",
+"vp",
+};
 
+const char* pylith::materials::ElasticIsotropic3DData::_parameterNames[] = {
+"density",
+"mu",
+"lambda",
+};
 
+const double pylith::materials::ElasticIsotropic3DData::_dbData[] = {
+  2.50000000e+03,
+  3.00000000e+03,
+  5.19615242e+03,
+  2.00000000e+03,
+  1.20000000e+03,
+  2.07846097e+03,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_parameterData[] = {
+  2.50000000e+03,
+  2.25000000e+10,
+  2.25000000e+10,
+  2.00000000e+03,
+  2.88000000e+09,
+  2.88000000e+09,
+};
+
+const double pylith::materials::ElasticIsotropic3DData::_density[] = {
+  2.50000000e+03,
+  2.00000000e+03,
+};
+
+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,
+  2.25000000e+10,
+  0.00000000e+00,
+  0.00000000e+00,
+  2.25000000e+10,
+  0.00000000e+00,
+  2.25000000e+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,
+  2.88000000e+09,
+  0.00000000e+00,
+  0.00000000e+00,
+  2.88000000e+09,
+  0.00000000e+00,
+  2.88000000e+09,
+};
+
 pylith::materials::ElasticIsotropic3DData::ElasticIsotropic3DData(void)
 { // constructor
   numDBValues = _numDBValues;
   numParameters = _numParameters;
+  numLocs = _numLocs;
   dbValues = const_cast<char**>(_dbValues);
   parameterNames = const_cast<char**>(_parameterNames);
+  dbData = const_cast<double*>(_dbData);
+  parameterData = const_cast<double*>(_parameterData);
+  density = const_cast<double*>(_density);
+  elasticConsts = const_cast<double*>(_elasticConsts);
 } // constructor
 
 pylith::materials::ElasticIsotropic3DData::~ElasticIsotropic3DData(void)

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticIsotropic3DData.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -1,4 +1,3 @@
-
 // -*- C++ -*-
 //
 // ======================================================================
@@ -11,10 +10,13 @@
 // ======================================================================
 //
 
+// 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 "MaterialData.hh"
+#include "ElasticMaterialData.hh"
 
 namespace pylith {
   namespace materials {
@@ -22,7 +24,7 @@
   } // pylith
 } // materials
 
-class pylith::materials::ElasticIsotropic3DData : public MaterialData
+class pylith::materials::ElasticIsotropic3DData : public ElasticMaterialData
 {
 
 public: 
@@ -36,13 +38,25 @@
 private:
 
   static const int _numDBValues;
+
   static const int _numParameters;
+
+  static const int _numLocs;
+
   static const char* _dbValues[];
+
   static const char* _parameterNames[];
 
+  static const double _dbData[];
+
+  static const double _parameterData[];
+
+  static const double _density[];
+
+  static const double _elasticConsts[];
+
 };
 
 #endif // pylith_materials_elasticisotropic3ddata_hh
 
-
 // End of file

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialApp.py	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,125 @@
+#!/usr/bin/env python
+#
+# ----------------------------------------------------------------------
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# <LicenseText>
+#
+# ----------------------------------------------------------------------
+#
+
+## @file unittests/libtests/materials/data/ElasticMaterialApp.py
+
+## @brief Python application for generating C++ data files for testing
+## C++ elastic material objects.
+
+from pyre.applications.Script import Script
+
+import numpy
+
+# ElasticMaterialApp class
+class ElasticMaterialApp(Script):
+  """
+  Python application for generating C++ data files for testing C++
+  elastic material objects.
+  """
+  
+  # INVENTORY //////////////////////////////////////////////////////////
+
+  class Inventory(Script.Inventory):
+    """
+    Python object for managing ElasticMaterialApp facilities and properties.
+    """
+
+    ## @class Inventory
+    ## Python object for managing ElasticMaterialApp facilities and properties.
+    ##
+    ## \b Properties
+    ## @li None
+    ##
+    ## \b Facilities
+    ## @li \b data Data manager.
+
+    import pyre.inventory
+
+    from pylith.utils.CppData import CppData
+    data = pyre.inventory.facility("data", factory=CppData)
+    data.meta['tip'] = "Data manager."
+
+
+  # PUBLIC METHODS /////////////////////////////////////////////////////
+
+  def __init__(self, name="elasticmaterialapp"):
+    """
+    Constructor.
+    """
+    Script.__init__(self, name)
+
+    # Material information
+    self.numDBValues = None
+    self.numParameters = None
+    self.dbValues = None
+    self.parameterNames = None
+    self.dbData = None
+    self.parameterData = None
+
+    # Elastic material information
+    self.numLocs = None
+    self.density = None
+    self.parameters = None
+    return
+
+
+  def main(self):
+    """
+    Run the application.
+    """
+    self._initData()
+    self.data.write(self.name)
+    return
+  
+
+  # PRIVATE METHODS ////////////////////////////////////////////////////
+
+  def _configure(self):
+    """
+    Set members using inventory.
+    """
+    Script._configure(self)
+    self.data = self.inventory.data
+    return
+
+
+  def _initData(self):
+    self.data.addScalar(vtype="int", name="_numDBValues",
+                        value=self.numDBValues,
+                        format="%d")
+    self.data.addScalar(vtype="int", name="_numParameters",
+                        value=self.numParameters,
+                        format="%d")
+    self.data.addArray(vtype="char*", name="_dbValues", values=self.dbValues,
+                       format="\"%s\"", ncols=1)
+    self.data.addArray(vtype="char*", name="_parameterNames",
+                       values=self.parameterNames,
+                       format="\"%s\"", ncols=1)
+    self.data.addArray(vtype="double", name="_dbData", values=self.dbData,
+                       format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_parameterData",
+                       values=self.parameterData,
+                       format="%16.8e", ncols=1)
+
+    self.data.addScalar(vtype="int", name="_numLocs", value=self.numLocs,
+                        format="%d")
+    self.data.addArray(vtype="double", name="_density",
+                       values=self.density,
+                       format="%16.8e", ncols=1)
+    self.data.addArray(vtype="double", name="_elasticConsts",
+                       values=self.elasticConsts,
+                       format="%16.8e", ncols=1)
+      
+    return
+
+  
+# End of file 

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.cc	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.cc	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include "ElasticMaterialData.hh"
+
+pylith::materials::ElasticMaterialData::ElasticMaterialData(void) :
+  numLocs(0),
+  density(0),
+  elasticConsts(0)
+{ // constructor
+} // constructor
+
+pylith::materials::ElasticMaterialData::~ElasticMaterialData(void)
+{}
+
+
+// End of file

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/ElasticMaterialData.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,49 @@
+
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_materials_elasticmaterialdata_hh)
+#define pylith_materials_elasticmaterialdata_hh
+
+#include "MaterialData.hh"
+
+namespace pylith {
+  namespace materials {
+     class ElasticMaterialData;
+  } // pylith
+} // materials
+
+class pylith::materials::ElasticMaterialData : public MaterialData
+{
+
+public: 
+
+  /// Constructor
+  ElasticMaterialData(void);
+
+  /// Destructor
+  ~ElasticMaterialData(void);
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public:
+
+  int numLocs; ///< Number of locations
+
+  double* density; ///< Density at locations
+  double* elasticConsts; ///< Elastic constants at locations
+
+};
+
+#endif // pylith_materials_elasticmaterialdata_hh
+
+
+// End of file

Modified: short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/MaterialData.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -39,6 +39,9 @@
 
   char** dbValues; ///< Aray of names of database values;
   char** parameterNames; //< Array of names of parameters
+
+  double* dbData; ///< Array of database values
+  double* parameterData; ///< Array of parameter values
 };
 
 #endif // pylith_materials_materialdata_hh

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,37 @@
+#!/bin/bash
+#
+# ======================================================================
+#
+#                           Brad T. Aagaard
+#                        U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+if (( $# != 1 )); then
+  echo "usage: generate.sh elastic|viscoelastic|all"
+  exit 1
+fi
+
+# //////////////////////////////////////////////////////////////////////
+if [ $1 == "elastic" ] || [ $1 == "all" ]; then
+
+  # 3-D ----------------------------------------------------------------
+
+  python ElasticIsotropic3D.py \
+    --data.namespace=pylith,materials \
+    --data.object=ElasticIsotropic3DData \
+    --data.parent=ElasticMaterialData
+
+fi
+
+# //////////////////////////////////////////////////////////////////////
+if [ $1 == "viscoelastic" ] || [ $1 == "all" ]; then
+  echo "" >& /dev/null
+
+fi
+
+
+# End of file 


Property changes on: short/3D/PyLith/trunk/unittests/libtests/materials/data/generate.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: short/3D/PyLith/trunk/unittests/libtests/materials/data/header.hh
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/data/header.hh	2007-03-17 02:03:36 UTC (rev 6276)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/data/header.hh	2007-03-19 04:19:07 UTC (rev 6277)
@@ -0,0 +1,12 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+



More information about the cig-commits mailing list