[cig-commits] r6225 - short/3D/PyLith/trunk/libsrc/materials

brad at geodynamics.org brad at geodynamics.org
Sun Mar 11 19:52:15 PDT 2007


Author: brad
Date: 2007-03-11 19:52:14 -0700 (Sun, 11 Mar 2007)
New Revision: 6225

Added:
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.icc
Removed:
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc
   short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh
Modified:
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
   short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.icc
   short/3D/PyLith/trunk/libsrc/materials/Makefile.am
   short/3D/PyLith/trunk/libsrc/materials/Material.cc
   short/3D/PyLith/trunk/libsrc/materials/Material.hh
Log:
Finished implementing materials interfaces with ElasticIsotropic3D material as usable object. Still need to test.

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -17,6 +17,9 @@
 #include <assert.h> // USES assert()
 
 // ----------------------------------------------------------------------
+// _ElasticIsotropic is a helper class for ElasticIsotropic. We define
+// it in this implementation file to insulate other objects from these
+// details.
 namespace pylith {
   namespace materials {
     class _ElasticIsotropic3D;
@@ -25,18 +28,29 @@
 
 class pylith::materials::_ElasticIsotropic3D {
 public:
+  // Number of elastic constants (for general 3-D elastic material)
+  static const int numElasticConsts;
+
+  // Values expected in spatial database
   static const int numDBValues;
   static const char* namesDBValues[];
-  static const int numParameters;
-  static const char* namesParameters[];
+
+  // Indices (order) of database values
   static const int didDensity;
   static const int didVs;
   static const int didVp;
+
+  // Parameters
+  static const int numParameters;
+  static const char* namesParameters[];
+
+  // Indices (order) of parameters
   static const int pidDensity;
   static const int pidMu;
   static const int pidLambda;
 }; // _ElasticIsotropic3D
 
+const int pylith::materials::_ElasticIsotropic3D::numElasticConsts = 21;
 const int pylith::materials::_ElasticIsotropic3D::numDBValues = 3;
 const char* pylith::materials::_ElasticIsotropic3D::namesDBValues[] =
   {"density", "vp", "vs" };
@@ -66,22 +80,62 @@
 // Copy constructor.
 pylith::materials::ElasticIsotropic3D::ElasticIsotropic3D(
 						const ElasticIsotropic3D& m) :
-  ElasticMaterial3D(m)
+  ElasticMaterial(m)
 { // copy constructor
 } // copy constructor
 
 // ----------------------------------------------------------------------
+// Get number of elastic constants for material.
+const int
+pylith::materials::ElasticIsotropic3D::numElasticConsts(void) const
+{ // numElasticConsts
+  return _ElasticIsotropic3D::numElasticConsts;
+} // numElasticConsts
+
+// ----------------------------------------------------------------------
+// Get names of values expected to be in database of parameters for
+const char**
+pylith::materials::ElasticIsotropic3D::_dbValues(void) const
+{ // _dbValues
+  return _ElasticIsotropic3D::namesDBValues;
+} // _dbValues
+
+// ----------------------------------------------------------------------
+// Get number of values expected to be in database of parameters for
+int
+pylith::materials::ElasticIsotropic3D::_numDBValues(void) const
+{ // _numDBValues
+  return _ElasticIsotropic3D::numDBValues;
+} // _numDBValues
+
+// ----------------------------------------------------------------------
+// Get names of parameters for physical properties.
+const char**
+pylith::materials::ElasticIsotropic3D::_parameterNames(void) const
+{ // _parameterNames
+  return _ElasticIsotropic3D::namesParameters;
+} // _parameterNames
+
+// ----------------------------------------------------------------------
+// Get number of parameters for physical properties.
+int
+pylith::materials::ElasticIsotropic3D::_numParameters(void) const
+{ // _numParameters
+  return _ElasticIsotropic3D::numParameters;
+} // _numParameters
+
+// ----------------------------------------------------------------------
 // Compute parameters from values in spatial database.
 void
-pylith::materials::ElasticIsotropic3D::dbToParams(double* paramVals,
-						  const int numParams,
-						  double* dbValues,
-						  const int numValues) const
+pylith::materials::ElasticIsotropic3D::_dbToParams(double* paramVals,
+						   const int numParams,
+						   double* dbValues,
+						   const int numValues) const
 { // computeParameters
   assert(0 != paramVals);
-  assert(_NUMPARAMETERS == numParams);
+  assert(_ElasticIsotropic3D::numParameters == numParams);
   assert(0 != dbValues);
-  assert(_NUMDBVALUES == numValues);
+  assert(_ElasticIsotropic3D::numDBValues == numValues);
 
   const double density = dbValues[_ElasticIsotropic3D::didDensity];
   const double vs = dbValues[_ElasticIsotropic3D::didVs];
@@ -98,52 +152,60 @@
 // ----------------------------------------------------------------------
 // Compute density at location from parameters.
 void
-pylith::materials::ElasticIsotropic3D::calcDensity(double* density,
-						   const double* parameters,
-						   const int numParameters)
+pylith::materials::ElasticIsotropic3D::_calcDensity(const double* parameters,
+						    const int numParameters,
+						    const int numLocs)
 { // calcDensity
-  assert(0 != density);
-  *density = parameters[_ElasticIsotropic3D::pidDensity];
+  assert(0 != _density);
+  assert(0 != parameters);
+
+  for (int iLoc=0, index=0; iLoc < numLocs; ++iLoc, index+=numParameters)
+    _density[iLoc] = 
+      parameters[index+_ElasticIsotropic3D::pidDensity];
 } // calcDensity
 
 // ----------------------------------------------------------------------
 // Compute density at location from parameters.
 void
-pylith::materials::ElasticIsotropic3D::calcElasticConsts(double* elasticConsts,
-							 const int numConsts,
-							 const double* parameters,
-							 const int numParameters)
+pylith::materials::ElasticIsotropic3D::_calcElasticConsts(const double* parameters,
+							  const int numParameters,
+							  const int numLocs)
 { // calcElasticConsts
-  assert(0 != elasticConsts);
-  assert(NUMELASTCONSTS == numConsts);
+  assert(0 != _elasticConsts);
   assert(0 != parameters);
   assert(_ElasticIsotropic3D::numParameters == numParameters);
 
-  const double density = parameters[_ElasticIsotropic3D::pidDensity];
-  const double mu = parameters[_ElasticIsotropic3D::pidMu];
-  const double lambda = parameters[_ElasticIsotropic3D::pidLambda];
+  for (int iLoc=0, indexP=0, indexC=0;
+       iLoc < numLocs; 
+       ++iLoc, 
+	 indexP+=_ElasticIsotropic3D::numParameters,
+	 indexC+=_ElasticIsotropic3D::numElasticConsts) {
+    const double density = parameters[indexP+_ElasticIsotropic3D::pidDensity];
+    const double mu = parameters[indexP+_ElasticIsotropic3D::pidMu];
+    const double lambda = parameters[indexP+_ElasticIsotropic3D::pidLambda];
   
-  elasticConsts[ 0] = lambda + 2.0*mu; // C1111
-  elasticConsts[ 1] = lambda; // C1122
-  elasticConsts[ 2] = lambda; // C1133
-  elasticConsts[ 3] = 0; // C1112
-  elasticConsts[ 4] = 0; // C1123
-  elasticConsts[ 5] = 0; // C1113
-  elasticConsts[ 6] = lambda + 2.0*mu; // C2222
-  elasticConsts[ 7] = lambda; // C2233
-  elasticConsts[ 8] = 0; // C2212
-  elasticConsts[ 9] = 0; // C2223
-  elasticConsts[10] = 0; // C2212
-  elasticConsts[11] = lambda + 2.0*mu; // C3333
-  elasticConsts[12] = 0; // C3312
-  elasticConsts[13] = 0; // C3323
-  elasticConsts[14] = 0; // C3312
-  elasticConsts[15] = mu; // C1212
-  elasticConsts[16] = 0; // C1223
-  elasticConsts[17] = 0; // C1213
-  elasticConsts[18] = mu; // C2323
-  elasticConsts[19] = 0; // C2313
-  elasticConsts[20] = mu; // C1313
+    _elasticConsts[indexC+ 0] = lambda + 2.0*mu; // C1111
+    _elasticConsts[indexC+ 1] = lambda; // C1122
+    _elasticConsts[indexC+ 2] = lambda; // C1133
+    _elasticConsts[indexC+ 3] = 0; // C1112
+    _elasticConsts[indexC+ 4] = 0; // C1123
+    _elasticConsts[indexC+ 5] = 0; // C1113
+    _elasticConsts[indexC+ 6] = lambda + 2.0*mu; // C2222
+    _elasticConsts[indexC+ 7] = lambda; // C2233
+    _elasticConsts[indexC+ 8] = 0; // C2212
+    _elasticConsts[indexC+ 9] = 0; // C2223
+    _elasticConsts[indexC+10] = 0; // C2212
+    _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+15] = mu; // C1212
+    _elasticConsts[indexC+16] = 0; // C1223
+    _elasticConsts[indexC+17] = 0; // C1213
+    _elasticConsts[indexC+18] = mu; // C2323
+    _elasticConsts[indexC+19] = 0; // C2313
+    _elasticConsts[indexC+20] = mu; // C1313
+  } // for
 } // calcElasticConsts
 
 

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh	2007-03-12 02:52:14 UTC (rev 6225)
@@ -25,7 +25,7 @@
 #if !defined(pylith_materials_elasticisotropic3d_hh)
 #define pylith_materials_elasticisotropic3d_hh
 
-#include "ElasticMaterial3D.hh"
+#include "ElasticMaterial.hh"
 
 /// Namespace for pylith package
 namespace pylith {
@@ -36,7 +36,7 @@
 } // pylith
 
 /// 3-D, isotropic, linear elastic material.
-class pylith::materials::ElasticIsotropic3D : public ElasticMaterial3D
+class pylith::materials::ElasticIsotropic3D : public ElasticMaterial
 { // class ElasticIsotropic3D
   friend class TestElasticIsotropic3D; // unit testing
 
@@ -53,8 +53,18 @@
    *
    * @returns Pointer to copy
    */
-  ElasticMaterial3D* clone(void) const;
+  ElasticMaterial* clone(void) const;
 
+  /** Get number of elastic constants for material.
+   *
+   * 1-D = 1
+   * 2-D = 6
+   * 3-D = 21
+   *
+   * @returns Number of elastic constants
+   */
+  const int numElasticConsts(void) const;
+
   // PROTECTED METHODS //////////////////////////////////////////////////
 protected :
 
@@ -69,26 +79,26 @@
    *
    * @returns Names of values
    */
-  const char** dbValues(void) const;
+  const char** _dbValues(void) const;
 
   /** Get number of values expected to be in database of parameters for
    *  physical properties.
    *
    * @returns Number of values
    */
-  int numDBValues(void) const;
+  int _numDBValues(void) const;
 
   /** Get names of parameters for physical properties.
    *
    * @returns Names of parameters
    */
-  const char** parameterNames(void) const;
+  const char** _parameterNames(void) const;
 
   /** Get number of parameters for physical properties.
    *
    * @returns Number of parameters
    */
-  int numParameters(void) const;
+  int _numParameters(void) const;
 
   /** Compute parameters from values in spatial database.
    *
@@ -100,32 +110,38 @@
    * @param dbValues Array of database values
    * @param numValues Number of database values
    */
-  void dbToParams(double* paramVals,
-		  const int numParams,
-		  double* dbValues,
-		  const int numValues) const;
+  void _dbToParams(double* paramVals,
+		   const int numParams,
+		   double* dbValues,
+		   const int numValues) const;
 
-  /** Compute density at location from parameters.
+  /** Compute density at locations from parameters.
    *
-   * @param density Pointer to density at location
+   * Results are stored in _density.
+   *
+   * Index into parameters = iLoc*numParameters + iParam
+   *
    * @param parameters Parameters at location
    * @param numParameters Number of parameters
+   * @param numLocs Number of locations
    */
-  void calcDensity(double* density,
-		   const double* parameters,
-		   const int numParameters);
+  void _calcDensity(const double* parameters,
+		    const int numParameters,
+		    const int numLocs);
 
-  /** Compute density at location from parameters.
+  /** Compute density at locations from parameters.
    *
-   * @param elasticConsts Pointer to elastic constants at location
-   * @param numConsts Number of elastic constants
+   * Results are stored in _elasticConsts.
+   *
+   * Index into parameters = iLoc*numParameters + iParam
+   *
    * @param parameters Parameters at location
    * @param numParameters Number of parameters
+   * @param numLocs Number of locations
    */
-  void calcElasticConsts(double* elasticConsts,
-			 const int numConsts,
-			 const double* parameters,
-			 const int numParameters);
+  void _calcElasticConsts(const double* parameters,
+			  const int numParameters,
+			  const int numLocs);
 
   // NOT IMPLEMENTED ////////////////////////////////////////////////////
 private :
@@ -133,21 +149,6 @@
   /// Not implemented
   const ElasticIsotropic3D& operator=(const ElasticIsotropic3D& m);
 
-  // PRIVATE MEMBERS ////////////////////////////////////////////////////
-private :
-
-  /// Number of values expected in database of physical property parameters
-  static const int _NUMDBVALUES;
-
-  /// Names of values expected in database of physical property parameters
-  static const char* _NAMESDBVALUES[];
-
-  /// Number of physical property parameters
-  static const int _NUMPARAMETERS;
-
-  /// Names of physical property parameters
-  static const char* _NAMESPARAMETERS[];  
-
 }; // class ElasticIsotropic3D
 
 #include "ElasticIsotropic3D.icc" // inline methods

Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.icc	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.icc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -16,38 +16,10 @@
 
 // Create a pointer to a copy of this.
 inline
-pylith::materials::ElasticMaterial3D*
+pylith::materials::ElasticMaterial*
 pylith::materials::ElasticIsotropic3D::clone(void) const {
   return new ElasticIsotropic3D(*this);
 }
 
-// Get names of values expected to be in database of parameters for
-inline
-const char**
-pylith::materials::ElasticIsotropic3D::dbValues(void) const {
-  return _NAMESDBVALUES;
-}
 
-// Get number of values expected to be in database of parameters for
-inline
-int
-pylith::materials::ElasticIsotropic3D::numDBValues(void) const {
-  return _NUMDBVALUES;
-}
-
-// Get names of parameters for physical properties.
-inline
-const char**
-pylith::materials::ElasticIsotropic3D::parameterNames(void) const {
-  return _NAMESPARAMETERS;
-}
-
-// Get number of parameters for physical properties.
-inline
-int
-pylith::materials::ElasticIsotropic3D::numParameters(void) const {
-  return _NUMPARAMETERS;
-}
-
-
 // End of file 

Copied: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc (from rev 6221, short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc	2007-03-11 04:26:46 UTC (rev 6221)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -0,0 +1,88 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "ElasticMaterial.hh" // implementation of object methods
+
+#include "pylith/feassemble/ParameterManager.hh" // USES ParameterManager
+
+#include <petscmesh.h> // USES Mesh
+
+#include <assert.h> // USES assert()
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::materials::ElasticMaterial::ElasticMaterial(void) :
+  _density(0),
+  _elasticConsts(0)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::materials::ElasticMaterial::~ElasticMaterial(void)
+{ // destructor
+  delete[] _density; _density = 0;
+  delete[] _elasticConsts; _elasticConsts = 0;
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::materials::ElasticMaterial::ElasticMaterial(const ElasticMaterial& m) :
+  Material(m),
+  _density(0),
+  _elasticConsts(0)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute physical properties of cell at quadrature points.
+void
+pylith::materials::ElasticMaterial::calcProperties(
+				     const topology_type::point_type& cell,
+				     const topology_type::patch_type& patch,
+				     const int numQuadPts)
+{ // calcProperties
+  _initCellData(numQuadPts);
+
+  const int numParams = _numParameters();
+  const char** paramNames = _parameterNames();
+
+  int size = numParams * numQuadPts;
+  double* paramsCell = (size > 0) ? new double[size] : 0;
+  for (int iParam=0; iParam < numParams; ++iParam) {
+    const ALE::Obj<real_section_type> parameter = 
+      _parameters->getReal(paramNames[iParam]);
+    assert(numQuadPts == parameter->getFiberDimension(patch, cell));
+    const real_section_type::value_type* parameterCell =
+      parameter->restrict(patch, cell);
+    for (int iQuadPt=0; iQuadPt < numQuadPts; ++iQuadPt)
+      paramsCell[iQuadPt*numParams+iParam] = parameterCell[iQuadPt];
+  } // for
+  _calcDensity(paramsCell, numParams, numQuadPts);
+  _calcElasticConsts(paramsCell, numParams, numQuadPts);
+} // calcProperties
+
+// ----------------------------------------------------------------------
+// Initialize arrays holding cell data.
+void
+pylith::materials::ElasticMaterial::_initCellData(const int numQuadPts)
+{ // _initCellData
+  int size = numQuadPts;
+  delete[] _density; _density = (size > 0) ? new double[size] : 0;
+  size = numQuadPts * numElasticConsts();
+  delete[] _elasticConsts; _elasticConsts = (size > 0) ? new double[size] : 0;
+} // _initCellData
+
+
+// End of file 

Copied: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh (from rev 6221, short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh	2007-03-11 04:26:46 UTC (rev 6221)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh	2007-03-12 02:52:14 UTC (rev 6225)
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/materials/ElasticMaterial.hh
+ *
+ * @brief C++ ElasticMaterial object
+ *
+ * Interface definition for 3-D linear and nonlinear elastic materials.
+ */
+
+#if !defined(pylith_materials_elasticmaterial_hh)
+#define pylith_materials_elasticmaterial_hh
+
+#include "Material.hh" // ISA Material
+
+#include <petscmesh.h> // USES Mesh
+
+/// Namespace for pylith package
+namespace pylith {
+  namespace materials {
+    class ElasticMaterial;
+  } // materials
+} // pylith
+
+/// C++ object for material constitutive model.
+class pylith::materials::ElasticMaterial : public Material
+{ // class ElasticMaterial
+
+  // PUBLIC TYPEDEFS ////////////////////////////////////////////////////
+public :
+
+  typedef ALE::Mesh Mesh;
+  typedef Mesh::topology_type topology_type;
+  typedef Mesh::real_section_type real_section_type;
+
+  // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+  /// Default constructor.
+  ElasticMaterial(void);
+
+  /// Destructor.
+  virtual
+  ~ElasticMaterial(void);
+
+  /** Create a pointer to a copy of this.
+   *
+   * @returns Pointer to copy
+   */
+  virtual
+  ElasticMaterial* clone(void) const = 0;
+
+  /** Get density values for cell at quadrature points.
+   *
+   * @returns Array of density values at cell's quadrature points.
+   */
+  const double* density(void) const;
+
+  /** Get elasticity constants for cell at quadrature points.
+   *
+   * Index into array of elasticity constants:
+   * index = iQuadPt*NUMELASTCONSTS + iConstant
+   *
+   * Order of elasticity constants for 3-D:
+   *  0: C1111,  1: C1122,  2: C1133,  3: C1112,  4: C1123,  5: C1113,
+   *             6: C2222,  7: C2233,  8: C2212,  9: C2223, 10: C2213,
+   *                       11: C3333, 12: C3312, 13: C3323, 14: C3313,
+   *                                  15: C1212, 16: C1223, 17: C1213,
+   *                                             18: C2323, 19: C2313,
+   *                                                        20: C1313
+   *
+   * Order of elasticity constants for 2-D:
+   *  0: C1111,  1: C1122,  2: C1112,
+   *             3: C2222,  4: C2212,
+   *                        5: C1212
+   *
+   * Order of elasticity constants for 1-D:
+   *  0: C1111
+   *
+   * @returns Array of elasticity constants at cell's quadrature points.
+   */
+  const double* elasticConsts(void) const;
+
+  /** Get number of elastic constants for material.
+   *
+   * 1-D = 1
+   * 2-D = 6
+   * 3-D = 21
+   *
+   * @returns Number of elastic constants
+   */
+  virtual
+  const int numElasticConsts(void) const = 0;
+
+  /** Compute physical properties of cell at quadrature points.
+   *
+   * @param cell Finite-element cell
+   * @param patch Finite-element patch
+   * @param numQuadPts Number of quadrature points (consistency check)
+   */
+  void calcProperties(const topology_type::point_type& cell,
+		      const topology_type::patch_type& patch,
+		      const int numQuadPts);
+
+  // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+  /** Copy constructor.
+   *
+   * @param m Material to copy
+   */
+  ElasticMaterial(const ElasticMaterial& m);
+
+  /** Initialize arrays holding cell data.
+   *
+   * @param numQuadPts Number of quadrature points
+   */
+  void _initCellData(const int numQuadPts);
+
+  /** Compute density at locations from parameters.
+   *
+   * Results are stored in _density.
+   *
+   * @param parameters Parameters at location
+   * @param numParameters Number of parameters
+   * @param numLocs Number of locations
+   */
+  virtual
+  void _calcDensity(const double* parameters,
+		    const int numParameters,
+		    const int numLocs) = 0;
+
+  /** Compute density at locations from parameters.
+   *
+   * Results are stored in _elasticConsts.
+   *
+   * @param parameters Parameters at location
+   * @param numParameters Number of parameters
+   * @param numLocs Number of locations
+   */
+  virtual
+  void _calcElasticConsts(const double* parameters,
+			  const int numParameters,
+			  const int numLocs) = 0;
+
+  // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+  /// Not implemented
+  const ElasticMaterial& operator=(const ElasticMaterial& m);
+
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  /** Density value at quadrature points for current cell.
+   *
+   * size = numQuadPts
+   * index = iQuadPt
+   */
+  double* _density;
+
+  /** Array of elasticity constants at quadrature points for current cell.
+   *
+   * size = numElasticConsts*numQuadPts
+   * index = iQuadPt*numElasticConsts+iElasticConst
+   */
+  double* _elasticConsts;
+
+}; // class ElasticMaterial
+
+#include "ElasticMaterial.icc" // inline methods
+
+#endif // pylith_materials_elasticmaterial_hh
+
+
+// End of file 

Added: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.icc	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.icc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -0,0 +1,32 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+//                           Brad T. Aagaard
+//                        U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_materials_elasticmaterial_hh)
+#error "ElasticMaterial.icc can only be included from ElasticMaterial.hh"
+#endif
+
+// Get elasticity constants for cell at quadrature points.
+inline
+const double*
+pylith::materials::ElasticMaterial::elasticConsts(void) const {
+  return _elasticConsts;
+}
+
+// Get density values for cell at quadrature points.
+inline
+const double*
+pylith::materials::ElasticMaterial::density(void) const {
+  return _density;
+}
+
+
+// End of file 

Deleted: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.cc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -1,56 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-//                           Brad T. Aagaard
-//                        U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-#include <portinfo>
-
-#include "ElasticMaterial3D.hh" // implementation of object methods
-
-#include <assert.h> // USES assert()
-
-// ----------------------------------------------------------------------
-const int pylith::materials::ElasticMaterial3D::NUMELASTCONSTS = 21;
-
-// ----------------------------------------------------------------------
-// Default constructor.
-pylith::materials::ElasticMaterial3D::ElasticMaterial3D(void)
-{ // constructor
-} // constructor
-
-// ----------------------------------------------------------------------
-// Destructor.
-pylith::materials::ElasticMaterial3D::~ElasticMaterial3D(void)
-{ // destructor
-} // destructor
-
-// ----------------------------------------------------------------------
-// Copy constructor.
-pylith::materials::ElasticMaterial3D::ElasticMaterial3D(const ElasticMaterial3D& m) :
-  Material(m)
-{ // copy constructor
-} // copy constructor
-
-// ----------------------------------------------------------------------
-// Get section with inertia values.
-const ALE::Obj<ALE::Mesh::real_section_type>&
-pylith::materials::ElasticMaterial3D::density(void)
-{ // density
-} // density
-
-// ----------------------------------------------------------------------
-// Get section with elasticity constants.
-const ALE::Obj<ALE::Mesh::real_section_type>&
-pylith::materials::ElasticMaterial3D::elasticityConstants(void)
-{ // elasticityConstants
-} // elasticityConstants
-
-
-// End of file 

Deleted: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial3D.hh	2007-03-12 02:52:14 UTC (rev 6225)
@@ -1,132 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-//                           Brad T. Aagaard
-//                        U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-/** @file libsrc/materials/ElasticMaterial3D.hh
- *
- * @brief C++ ElasticMaterial object
- *
- * Interface definition for 3-D linear and nonlinear elastic materials.
- */
-
-#if !defined(pylith_materials_elasticmaterial3d_hh)
-#define pylith_materials_elasticmaterial3d_hh
-
-#include "Material.hh" // ISA Material
-
-#include <petscmesh.h> // USES Mesh
-
-
-/// Namespace for pylith package
-namespace pylith {
-  namespace materials {
-    class ElasticMaterial3D;
-  } // materials
-} // pylith
-
-/// C++ object for material constitutive model.
-class pylith::materials::ElasticMaterial3D : public Material
-{ // class ElasticMaterial3D
-
-  typedef ALE::Mesh::real_section_type real_section_type;
-
-
-  // PUBLIC METHODS /////////////////////////////////////////////////////
-public :
-
-  /// Default constructor.
-  ElasticMaterial3D(void);
-
-  /// Destructor.
-  virtual
-  ~ElasticMaterial3D(void);
-
-  /** Create a pointer to a copy of this.
-   *
-   * @returns Pointer to copy
-   */
-  virtual
-  ElasticMaterial3D* clone(void) const = 0;
-
-  /** Get section with density values.
-   *
-   * @returns Section with density values.
-   */
-  const ALE::Obj<real_section_type>& density(void);
-
-  /** Get section with elasticity constants.
-   *
-   * Index into array of elasticity constants:
-   * index = iQuadPt*NUMELASTCONSTS + iConstant
-   *
-   * Order of elasticity constants:
-   *  0: C1111,  1: C1122,  2: C1133,  3: C1112,  4: C1123,  5: C1113,
-   *             6: C2222,  7: C2233,  8: C2212,  9: C2223, 10: C2213,
-   *                       11: C3333, 12: C3312, 13: C3323, 14: C3313,
-   *                                  15: C1212, 16: C1223, 17: C1213,
-   *                                             18: C2323, 19: C2313,
-   *                                                        20: C1313
-   *
-   * @returns Section with elasticity constants.
-   */
-  const ALE::Obj<real_section_type>& elasticityConstants(void);
-
-  // PUBLIC MEMBERS /////////////////////////////////////////////////////
-public :
-
-  static const int NUMELASTCONSTS; ///< Number of elastic constants
-
-  // PROTECTED METHODS //////////////////////////////////////////////////
-protected :
-
-  /** Copy constructor.
-   *
-   * @param m Material to copy
-   */
-  ElasticMaterial3D(const ElasticMaterial3D& m);
-
-
-  /** Compute density at location from parameters.
-   *
-   * @param density Pointer to density at location
-   * @param parameters Parameters at location
-   * @param numParameters Number of parameters
-   */
-  virtual
-  void calcDensity(double* density,
-		   const double* parameters,
-		   const int numParameters) = 0;
-
-  /** Compute density at location from parameters.
-   *
-   * @param elasticConsts Pointer to elastic constants at location
-   * @param numConsts Number of elastic constants
-   * @param parameters Parameters at location
-   * @param numParameters Number of parameters
-   */
-  virtual
-  void calcElasticConsts(double* elasticConsts,
-			 const int numConstants,
-			 const double* parameters,
-			 const int numParameters) = 0;
-
-  // NOT IMPLEMENTED ////////////////////////////////////////////////////
-private :
-
-  /// Not implemented
-  const ElasticMaterial3D& operator=(const ElasticMaterial3D& m);
-
-}; // class ElasticMaterial3D
-
-#endif // pylith_materials_elasticmaterial3d_hh
-
-
-// End of file 

Modified: short/3D/PyLith/trunk/libsrc/materials/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Makefile.am	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/Makefile.am	2007-03-12 02:52:14 UTC (rev 6225)
@@ -16,8 +16,10 @@
 subpkginclude_HEADERS = \
 	ElasticIsotropic3D.hh \
 	ElasticIsotropic3D.icc \
-	ElasticMaterial3D.hh \
-	Material.hh
+	ElasticMaterial.hh \
+	ElasticMaterial.icc \
+	Material.hh \
+	Material.icc
 
 noinst_HEADERS =
 

Modified: short/3D/PyLith/trunk/libsrc/materials/Material.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.cc	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.cc	2007-03-12 02:52:14 UTC (rev 6225)
@@ -28,8 +28,8 @@
 // ----------------------------------------------------------------------
 // Default constructor.
 pylith::materials::Material::Material(void) :
+  _parameters(0),
   _db(0),
-  _parameters(0),
   _id(0),
   _label("")
 { // constructor
@@ -48,8 +48,8 @@
 // ----------------------------------------------------------------------
 // Copy constructor.
 pylith::materials::Material::Material(const Material& m) :
+  _parameters(m._parameters),
   _db(m._db),
-  _parameters(m._parameters),
   _id(m._id),
   _label(m._label)
 { // copy constructor
@@ -90,8 +90,8 @@
    * this material, we want to carry around storage for density,
    * etc. for cells not of this material.
    */
-  const int numParams = numParameters();
-  const char** paramNames = parameterNames();
+  const int numParams = _numParameters();
+  const char** paramNames = _parameterNames();
 
   ALE::Obj<real_section_type>* paramSections = 
     (numParams > 0) ? new ALE::Obj<real_section_type>[numParams] : 0;
@@ -104,9 +104,9 @@
   } // for
 
   // Setup database for querying
-  const int numValues = numDBValues();
+  const int numValues = _numDBValues();
   _db->open();
-  _db->queryVals(dbValues(), numValues);
+  _db->queryVals(_dbValues(), numValues);
   
   // Loop over cells
   double* queryData = (numValues > 0) ? new double[numValues] : 0;
@@ -147,7 +147,7 @@
 	delete[] paramData; paramData = 0;
 	throw std::runtime_error(msg.str());
       } // if
-      dbToParams(paramData, numParams, queryData, numValues);
+      _dbToParams(paramData, numParams, queryData, numValues);
 
       for (int iParam=0; iParam < numParams; ++iParam)
 	cellData[iParam][iQuadPt] = paramData[iParam];

Modified: short/3D/PyLith/trunk/libsrc/materials/Material.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Material.hh	2007-03-11 16:17:07 UTC (rev 6224)
+++ short/3D/PyLith/trunk/libsrc/materials/Material.hh	2007-03-12 02:52:14 UTC (rev 6225)
@@ -122,7 +122,7 @@
    * @returns Names of values
    */
   virtual
-  const char** dbValues(void) const = 0;
+  const char** _dbValues(void) const = 0;
 
   /** Get number of values expected to be in database of parameters for
    *  physical properties.
@@ -130,21 +130,21 @@
    * @returns Number of values
    */
   virtual
-  int numDBValues(void) const = 0;
+  int _numDBValues(void) const = 0;
 
   /** Get names of parameters for physical properties.
    *
    * @returns Names of parameters
    */
   virtual
-  const char** parameterNames(void) const = 0;
+  const char** _parameterNames(void) const = 0;
 
   /** Get number of parameters for physical properties.
    *
    * @returns Number of parameters
    */
   virtual
-  int numParameters(void) const = 0;
+  int _numParameters(void) const = 0;
 
   /** Compute parameters from values in spatial database.
    *
@@ -154,7 +154,7 @@
    * @param numValues Number of database values
    */
   virtual
-  void dbToParams(double* paramVals,
+  void _dbToParams(double* paramVals,
 		  const int numParams,
 		  double* dbValues,
 		  const int numValues) const = 0;
@@ -165,15 +165,18 @@
   /// Not implemented
   const Material& operator=(const Material& m);
 
+  // PROTECTED MEMBERS //////////////////////////////////////////////////
+protected :
+
+  ///< Manager of parameters for physical properties of material
+  pylith::feassemble::ParameterManager* _parameters;
+
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 private :
 
   /// Database of parameters for physical properties of material
   spatialdata::spatialdb::SpatialDB* _db;
 
-  ///< Manager of parameters for physical properties of material
-  pylith::feassemble::ParameterManager* _parameters;
-
   int _id; ///< Material identifier
   std::string _label; ///< Label of material
 



More information about the cig-commits mailing list