[cig-commits] r6521 - in short/3D/PyLith/trunk: libsrc
libsrc/materials unittests/libtests/materials
brad at geodynamics.org
brad at geodynamics.org
Sat Apr 7 19:00:48 PDT 2007
Author: brad
Date: 2007-04-07 19:00:47 -0700 (Sat, 07 Apr 2007)
New Revision: 6521
Added:
short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.icc
short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.icc
Removed:
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc
Modified:
short/3D/PyLith/trunk/libsrc/Makefile.am
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
short/3D/PyLith/trunk/libsrc/materials/Makefile.am
short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
Log:
Moved quadrature loop from specific material to ElasticMaterial (simplifies specific Material routines). Updated unit tests accordingly. Created meaningful 1-D elastic materials. Still need to setup tests for 1-D and 2-D materials.
Modified: short/3D/PyLith/trunk/libsrc/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/Makefile.am 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/Makefile.am 2007-04-08 02:00:47 UTC (rev 6521)
@@ -32,7 +32,8 @@
feassemble/Quadrature3D.cc \
feassemble/ParameterManager.cc \
materials/Material.cc \
- materials/ElasticIsotropic1D.cc \
+ materials/ElasticStress1D.cc \
+ materials/ElasticStrain1D.cc \
materials/ElasticIsotropic3D.cc \
materials/ElasticMaterial.cc \
materials/ElasticPlaneStrain.cc \
Deleted: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -1,236 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-// Brad T. Aagaard
-// U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-#include <portinfo>
-
-#include "ElasticIsotropic1D.hh" // implementation of object methods
-
-#include <assert.h> // USES assert()
-
-// ----------------------------------------------------------------------
-// _ElasticIsotropic1D is a helper class for ElasticIsotropic1D. We define
-// it in this implementation file to insulate other objects from these
-// details.
-namespace pylith {
- namespace materials {
- class _ElasticIsotropic1D;
- } // materials
-} // pylith
-
-class pylith::materials::_ElasticIsotropic1D {
-public:
- // Number of entries in stress tensor.
- static const int stressSize;
-
- // Number of entries in derivative of elasticity matrix.
- static const int numElasticConsts;
-
- // Values expected in spatial database
- static const int numDBValues;
- static const char* namesDBValues[];
-
- // 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;
-}; // _ElasticIsotropic1D
-
-const int pylith::materials::_ElasticIsotropic1D::stressSize = 1;
-const int pylith::materials::_ElasticIsotropic1D::numElasticConsts = 1;
-const int pylith::materials::_ElasticIsotropic1D::numDBValues = 3;
-const char* pylith::materials::_ElasticIsotropic1D::namesDBValues[] =
- {"density", "vs", "vp" };
-const int pylith::materials::_ElasticIsotropic1D::numParameters = 3;
-const char* pylith::materials::_ElasticIsotropic1D::namesParameters[] =
- {"density", "mu", "lambda" };
-const int pylith::materials::_ElasticIsotropic1D::didDensity = 0;
-const int pylith::materials::_ElasticIsotropic1D::didVs = 1;
-const int pylith::materials::_ElasticIsotropic1D::didVp = 2;
-const int pylith::materials::_ElasticIsotropic1D::pidDensity = 0;
-const int pylith::materials::_ElasticIsotropic1D::pidMu = 1;
-const int pylith::materials::_ElasticIsotropic1D::pidLambda = 2;
-
-// ----------------------------------------------------------------------
-// Default constructor.
-pylith::materials::ElasticIsotropic1D::ElasticIsotropic1D(void)
-{ // constructor
- _dimension = 1;
-} // constructor
-
-// ----------------------------------------------------------------------
-// Destructor.
-pylith::materials::ElasticIsotropic1D::~ElasticIsotropic1D(void)
-{ // destructor
-} // destructor
-
-// ----------------------------------------------------------------------
-// Copy constructor.
-pylith::materials::ElasticIsotropic1D::ElasticIsotropic1D(
- const ElasticIsotropic1D& m) :
- ElasticMaterial(m)
-{ // copy constructor
-} // copy constructor
-
-// ----------------------------------------------------------------------
-// Get number of entries in stress tensor.
-int
-pylith::materials::ElasticIsotropic1D::stressSize(void) const
-{ // stressSize
- return _ElasticIsotropic1D::stressSize;
-} // stressSize
-
-// ----------------------------------------------------------------------
-// Get number of elastic constants for material.
-int
-pylith::materials::ElasticIsotropic1D::numElasticConsts(void) const
-{ // numElasticConsts
- return _ElasticIsotropic1D::numElasticConsts;
-} // numElasticConsts
-
-// ----------------------------------------------------------------------
-// Get names of values expected to be in database of parameters for
-const char**
-pylith::materials::ElasticIsotropic1D::_dbValues(void) const
-{ // _dbValues
- return _ElasticIsotropic1D::namesDBValues;
-} // _dbValues
-
-// ----------------------------------------------------------------------
-// Get number of values expected to be in database of parameters for
-int
-pylith::materials::ElasticIsotropic1D::_numDBValues(void) const
-{ // _numDBValues
- return _ElasticIsotropic1D::numDBValues;
-} // _numDBValues
-
-// ----------------------------------------------------------------------
-// Get names of parameters for physical properties.
-const char**
-pylith::materials::ElasticIsotropic1D::_parameterNames(void) const
-{ // _parameterNames
- return _ElasticIsotropic1D::namesParameters;
-} // _parameterNames
-
-// ----------------------------------------------------------------------
-// Get number of parameters for physical properties.
-int
-pylith::materials::ElasticIsotropic1D::_numParameters(void) const
-{ // _numParameters
- return _ElasticIsotropic1D::numParameters;
-} // _numParameters
-
-// ----------------------------------------------------------------------
-// Compute parameters from values in spatial database.
-void
-pylith::materials::ElasticIsotropic1D::_dbToParameters(double* paramVals,
- const int numParams,
- const double* dbValues,
- const int numValues) const
-{ // computeParameters
- assert(0 != paramVals);
- assert(_ElasticIsotropic1D::numParameters == numParams);
- assert(0 != dbValues);
- assert(_ElasticIsotropic1D::numDBValues == numValues);
-
- const double density = dbValues[_ElasticIsotropic1D::didDensity];
- const double vs = dbValues[_ElasticIsotropic1D::didVs];
- const double vp = dbValues[_ElasticIsotropic1D::didVp];
-
- const double mu = density * vs*vs;
- const double lambda = density * vp*vp - 2.0*mu;
-
- paramVals[_ElasticIsotropic1D::pidDensity] = density;
- paramVals[_ElasticIsotropic1D::pidMu] = mu;
- paramVals[_ElasticIsotropic1D::pidLambda] = lambda;
-} // computeParameters
-
-// ----------------------------------------------------------------------
-// Compute density at location from parameters.
-void
-pylith::materials::ElasticIsotropic1D::_calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs)
-{ // _calcDensity
- assert(0 != _density);
- assert(0 != parameters);
-
- for (int iLoc=0, index=0; iLoc < numLocs; ++iLoc, index+=numParameters)
- _density[iLoc] =
- parameters[index+_ElasticIsotropic1D::pidDensity];
-} // _calcDensity
-
-// ----------------------------------------------------------------------
-// Compute stress tensor at location from parameters.
-void
-pylith::materials::ElasticIsotropic1D::_calcStress(const double* parameters,
- const int numParameters,
- const double* totalStrain,
- const int numLocs,
- const int spaceDim)
-{ // _calcStress
- assert(0 != _stress);
- assert(0 != parameters);
- assert(_ElasticIsotropic1D::numParameters == numParameters);
- assert(spaceDim == _dimension);
-
- for (int iLoc=0, indexP=0, indexS=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticIsotropic1D::numParameters,
- indexS+=_ElasticIsotropic1D::stressSize) {
- const double density = parameters[indexP+_ElasticIsotropic1D::pidDensity];
- const double mu = parameters[indexP+_ElasticIsotropic1D::pidMu];
- const double lambda = parameters[indexP+_ElasticIsotropic1D::pidLambda];
-
- const double e11 = totalStrain[indexS ];
- _stress[indexS ] = mu*(3.0*lambda+2.0*mu)/(lambda + mu) * e11;
- } // for
-} // _calcStress
-
-// ----------------------------------------------------------------------
-// Compute derivative of elasticity matrix at location from parameters.
-void
-pylith::materials::ElasticIsotropic1D::_calcElasticConsts(const double* parameters,
- const int numParameters,
- const double* totalStrain,
- const int numLocs,
- const int spaceDim)
-{ // _calcElasticConsts
- assert(0 != _elasticConsts);
- assert(0 != parameters);
- assert(_ElasticIsotropic1D::numParameters == numParameters);
- assert(spaceDim == _dimension);
-
- for (int iLoc=0, indexP=0, indexC=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticIsotropic1D::numParameters,
- indexC+=_ElasticIsotropic1D::numElasticConsts) {
- const double density = parameters[indexP+_ElasticIsotropic1D::pidDensity];
- const double mu = parameters[indexP+_ElasticIsotropic1D::pidMu];
- const double lambda = parameters[indexP+_ElasticIsotropic1D::pidLambda];
-
- _elasticConsts[indexC ] = mu*(3.0*lambda+2.0*mu)/(lambda + mu);
- } // for
-} // _calcElasticConsts
-
-
-// End of file
Deleted: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -1,188 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-// Brad T. Aagaard
-// U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-/** @file libsrc/materials/ElasticIsotropic1D.h
- *
- * @brief C++ ElasticIsotropic1D object
- *
- * 1-D, isotropic, linear elastic material. The physical properties
- * are specified using density and compressional-wave speed. The
- * physical properties are stored internally using density and lambda
- * + 2 mu, which are directly related to the elasticity constants used
- * in the finite-element integration.
- */
-
-#if !defined(pylith_materials_elasticisotropic1d_hh)
-#define pylith_materials_elasticisotropic1d_hh
-
-#include "ElasticMaterial.hh"
-
-/// Namespace for pylith package
-namespace pylith {
- namespace materials {
- class ElasticIsotropic1D;
- class TestElasticIsotropic1D; // unit testing
- } // materials
-} // pylith
-
-/// 3-D, isotropic, linear elastic material.
-class pylith::materials::ElasticIsotropic1D : public ElasticMaterial
-{ // class ElasticIsotropic1D
- friend class TestElasticIsotropic1D; // unit testing
-
- // PUBLIC METHODS /////////////////////////////////////////////////////
-public :
-
- /// Default constructor
- ElasticIsotropic1D(void);
-
- /// Destructor
- ~ElasticIsotropic1D(void);
-
- /** Create a pointer to a copy of this.
- *
- * @returns Pointer to copy
- */
- ElasticMaterial* clone(void) const;
-
- /** Get number of entries in stress tensor.
- *
- * 1-D = 1
- * 2-D = 3
- * 3-D = 6
- *
- * @returns Number of entries in stress tensor.
- */
- int stressSize(void) const;
-
- /** Get number of elastic constants for material.
- *
- * 1-D = 1
- * 2-D = 6
- * 3-D = 21
- *
- * @returns Number of elastic constants
- */
- int numElasticConsts(void) const;
-
- // PROTECTED METHODS //////////////////////////////////////////////////
-protected :
-
- /** Copy constructor
- *
- * @param m Material to copy
- */
- ElasticIsotropic1D(const ElasticIsotropic1D& m);
-
- /** Get names of values expected to be in database of parameters for
- * physical properties.
- *
- * @returns Names of values
- */
- 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;
-
- /** Get names of parameters for physical properties.
- *
- * @returns Names of parameters
- */
- const char** _parameterNames(void) const;
-
- /** Get number of parameters for physical properties.
- *
- * @returns Number of parameters
- */
- int _numParameters(void) const;
-
- /** Compute parameters from values in spatial database.
- *
- * Order of values in arrays matches order used in dbValues() and
- * parameterNames().
- *
- * @param paramVals Array of parameters
- * @param numParams Number of parameters
- * @param dbValues Array of database values
- * @param numValues Number of database values
- */
- void _dbToParameters(double* paramVals,
- const int numParams,
- const double* dbValues,
- const int numValues) const;
-
- /** Compute density at locations from parameters.
- *
- * 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(const double* parameters,
- const int numParameters,
- const int numLocs);
-
- /** Compute stress tensor at locations from parameters.
- *
- * Results are stored in _stress.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
- * @param parameters Parameters at location
- * @param numParameters Number of parameters
- * @param totalStrain Total strain at locations
- * @param numLocs Number of locations
- * @param spaceDim Spatial dimension for locations.
- */
- void _calcStress(const double* parameters,
- const int numParameters,
- const double* totalStrain,
- const int numLocs,
- const int spaceDim);
-
- /** Compute derivatives of elasticity matrix at locations from parameters.
- *
- * Results are stored in _elasticConsts.
- *
- * @param parameters Parameters at locations.
- * @param numParameters Number of parameters.
- * @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
- * @param spaceDim Spatial dimension for locations.
- */
- void _calcElasticConsts(const double* parameters,
- const int numParameters,
- const double* totalStrain,
- const int numLocs,
- const int spaceDim);
-
- // NOT IMPLEMENTED ////////////////////////////////////////////////////
-private :
-
- /// Not implemented
- const ElasticIsotropic1D& operator=(const ElasticIsotropic1D& m);
-
-}; // class ElasticIsotropic1D
-
-#include "ElasticIsotropic1D.icc" // inline methods
-
-#endif // pylith_materials_elasticisotropic1d_hh
-
-
-// End of file
Deleted: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -1,25 +0,0 @@
-// -*- C++ -*-
-//
-// ----------------------------------------------------------------------
-//
-// Brad T. Aagaard
-// U.S. Geological Survey
-//
-// {LicenseText}
-//
-// ----------------------------------------------------------------------
-//
-
-#if !defined(pylith_materials_elasticisotropic1d_hh)
-#error "ElasticIsotropic1D.icc can only be included from ElasticIsotropic1D.hh"
-#endif
-
-// Create a pointer to a copy of this.
-inline
-pylith::materials::ElasticMaterial*
-pylith::materials::ElasticIsotropic1D::clone(void) const {
- return new ElasticIsotropic1D(*this);
-}
-
-
-// End of file
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -17,37 +17,38 @@
#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;
} // materials
} // pylith
+/** _ElasticIsotropic is a helper class for ElasticIsotropic. We define
+ * it in this implementation file to insulate other objects from these
+ * details.
+ */
class pylith::materials::_ElasticIsotropic3D {
public:
- // Number of entries in stress tensor.
+ /// Number of entries in stress tensor.
static const int stressSize;
- // Number of entries in derivative of elasticity matrix.
+ /// Number of entries in derivative of elasticity matrix.
static const int numElasticConsts;
- // Values expected in spatial database
+ /// Values expected in spatial database
static const int numDBValues;
static const char* namesDBValues[];
- // Indices (order) of database values
+ /// Indices (order) of database values
static const int didDensity;
static const int didVs;
static const int didVp;
- // Parameters
+ /// Parameters
static const int numParameters;
static const char* namesParameters[];
- // Indices (order) of parameters
+ /// Indices (order) of parameters
static const int pidDensity;
static const int pidMu;
static const int pidLambda;
@@ -165,108 +166,100 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticIsotropic3D::_calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs)
+pylith::materials::ElasticIsotropic3D::_calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters)
{ // _calcDensity
- assert(0 != _density);
+ assert(0 != density);
+ assert(1 == size);
assert(0 != parameters);
- for (int iLoc=0, index=0; iLoc < numLocs; ++iLoc, index+=numParameters)
- _density[iLoc] =
- parameters[index+_ElasticIsotropic3D::pidDensity];
+ *density = parameters[_ElasticIsotropic3D::pidDensity];
} // _calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticIsotropic3D::_calcStress(const double* parameters,
+pylith::materials::ElasticIsotropic3D::_calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // _calcStress
- assert(0 != _stress);
+ assert(0 != stress);
+ assert(_ElasticIsotropic3D::stressSize == size);
assert(0 != parameters);
assert(_ElasticIsotropic3D::numParameters == numParameters);
assert(spaceDim == _dimension);
- for (int iLoc=0, indexP=0, indexS=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticIsotropic3D::numParameters,
- indexS+=_ElasticIsotropic3D::stressSize) {
- const double density = parameters[indexP+_ElasticIsotropic3D::pidDensity];
- const double mu = parameters[indexP+_ElasticIsotropic3D::pidMu];
- const double lambda = parameters[indexP+_ElasticIsotropic3D::pidLambda];
+ const double density = parameters[_ElasticIsotropic3D::pidDensity];
+ const double mu = parameters[_ElasticIsotropic3D::pidMu];
+ const double lambda = parameters[_ElasticIsotropic3D::pidLambda];
- const double lambda2mu = lambda + 2.0 * mu;
+ const double lambda2mu = lambda + 2.0 * mu;
- const double e11 = totalStrain[indexS ];
- const double e22 = totalStrain[indexS+1];
- const double e33 = totalStrain[indexS+2];
- const double e12 = totalStrain[indexS+3];
- const double e23 = totalStrain[indexS+4];
- const double e13 = totalStrain[indexS+5];
+ const double e11 = totalStrain[0];
+ const double e22 = totalStrain[1];
+ const double e33 = totalStrain[2];
+ const double e12 = totalStrain[3];
+ const double e23 = totalStrain[4];
+ const double e13 = totalStrain[5];
+
+ const double s123 = lambda * (e11 + e22 + e33);
- const double s123 = lambda * (e11 + e22 + e33);
-
- _stress[indexS ] = s123 + 2.0*mu*e11;
- _stress[indexS+1] = s123 + 2.0*mu*e22;
- _stress[indexS+2] = s123 + 2.0*mu*e33;
- _stress[indexS+3] = 2.0 * mu * e12;
- _stress[indexS+4] = 2.0 * mu * e23;
- _stress[indexS+5] = 2.0 * mu * e13;
- } // for
+ stress[0] = s123 + 2.0*mu*e11;
+ stress[1] = s123 + 2.0*mu*e22;
+ stress[2] = s123 + 2.0*mu*e33;
+ stress[3] = 2.0 * mu * e12;
+ stress[4] = 2.0 * mu * e23;
+ stress[5] = 2.0 * mu * e13;
} // _calcStress
// ----------------------------------------------------------------------
// Compute derivative of elasticity matrix at location from parameters.
void
-pylith::materials::ElasticIsotropic3D::_calcElasticConsts(const double* parameters,
+pylith::materials::ElasticIsotropic3D::_calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // _calcElasticConsts
- assert(0 != _elasticConsts);
+ assert(0 != elasticConsts);
+ assert(_ElasticIsotropic3D::numElasticConsts == size);
assert(0 != parameters);
assert(_ElasticIsotropic3D::numParameters == numParameters);
assert(spaceDim == _dimension);
- 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];
+ const double density = parameters[_ElasticIsotropic3D::pidDensity];
+ const double mu = parameters[_ElasticIsotropic3D::pidMu];
+ const double lambda = parameters[_ElasticIsotropic3D::pidLambda];
- const double lambda2mu = lambda + 2.0 * mu;
+ const double lambda2mu = lambda + 2.0 * mu;
- _elasticConsts[indexC+ 0] = lambda2mu; // 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] = lambda2mu; // C2222
- _elasticConsts[indexC+ 7] = lambda; // C2233
- _elasticConsts[indexC+ 8] = 0; // C2212
- _elasticConsts[indexC+ 9] = 0; // C2223
- _elasticConsts[indexC+10] = 0; // C2213
- _elasticConsts[indexC+11] = lambda2mu; // C3333
- _elasticConsts[indexC+12] = 0; // C3312
- _elasticConsts[indexC+13] = 0; // C3323
- _elasticConsts[indexC+14] = 0; // C3313
- _elasticConsts[indexC+15] = 2.0 * mu; // C1212
- _elasticConsts[indexC+16] = 0; // C1223
- _elasticConsts[indexC+17] = 0; // C1213
- _elasticConsts[indexC+18] = 2.0 * mu; // C2323
- _elasticConsts[indexC+19] = 0; // C2313
- _elasticConsts[indexC+20] = 2.0 * mu; // C1313
- } // for
+ elasticConsts[ 0] = lambda2mu; // C1111
+ elasticConsts[ 1] = lambda; // C1122
+ elasticConsts[ 2] = lambda; // C1133
+ elasticConsts[ 3] = 0; // C1112
+ elasticConsts[ 4] = 0; // C1123
+ elasticConsts[ 5] = 0; // C1113
+ elasticConsts[ 6] = lambda2mu; // C2222
+ elasticConsts[ 7] = lambda; // C2233
+ elasticConsts[ 8] = 0; // C2212
+ elasticConsts[ 9] = 0; // C2223
+ elasticConsts[10] = 0; // C2213
+ elasticConsts[11] = lambda2mu; // C3333
+ elasticConsts[12] = 0; // C3312
+ elasticConsts[13] = 0; // C3323
+ elasticConsts[14] = 0; // C3313
+ elasticConsts[15] = 2.0 * mu; // C1212
+ elasticConsts[16] = 0; // C1223
+ elasticConsts[17] = 0; // C1213
+ elasticConsts[18] = 2.0 * mu; // C2323
+ elasticConsts[19] = 0; // C2313
+ elasticConsts[20] = 2.0 * mu; // C1313
} // _calcElasticConsts
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic3D.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -125,54 +125,51 @@
const double* dbValues,
const int numValues) const;
- /** Compute density at locations from parameters.
+ /** Compute density from parameters.
*
- * Results are stored in _density.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
+ * @param density Array for density
+ * @param size Size of array for density
* @param parameters Parameters at location
* @param numParameters Number of parameters
- * @param numLocs Number of locations
*/
- void _calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs);
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters);
- /** Compute stress tensor at locations from parameters.
+ /** Compute stress tensor from parameters.
*
- * Results are stored in _stress.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
- * @param parameters Parameters at location
- * @param numParameters Number of parameters
- * @param totalStrain Total strain at locations
- * @param numLocs Number of locations
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcStress(const double* parameters,
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
- /** Compute derivatives of elasticity matrix at locations from parameters.
+ /** Compute derivatives of elasticity matrix from parameters.
*
- * Results are stored in _elasticConsts.
- *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
* @param parameters Parameters at locations.
* @param numParameters Number of parameters.
* @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcElasticConsts(const double* parameters,
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
+
// NOT IMPLEMENTED ////////////////////////////////////////////////////
private :
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -62,7 +62,8 @@
double* paramsCell = 0;
_getParameters(¶msCell, cell, numQuadPts);
const int numParams = _numParameters();
- _calcDensity(paramsCell, numParams, numQuadPts);
+ for (int iQuad=0, indexP=0; iQuad < numQuadPts; ++iQuad, indexP+=numParams)
+ _calcDensity(&_density[iQuad], 1, ¶msCell[indexP], numParams);
delete[] paramsCell; paramsCell = 0;
return _density;
@@ -71,11 +72,10 @@
// ----------------------------------------------------------------------
// Compute stress tensor for cell at quadrature points.
const double*
-pylith::materials::ElasticMaterial::calcStress(
- const Mesh::point_type& cell,
- const double* totalStrain,
- const int numQuadPts,
- const int spaceDim)
+pylith::materials::ElasticMaterial::calcStress(const Mesh::point_type& cell,
+ const double* totalStrain,
+ const int numQuadPts,
+ const int spaceDim)
{ // calcStress
assert(0 != totalStrain);
assert(0 != _stress);
@@ -86,7 +86,13 @@
double* paramsCell = 0;
_getParameters(¶msCell, cell, numQuadPts);
const int numParams = _numParameters();
- _calcStress(paramsCell, numParams, totalStrain, numQuadPts, spaceDim);
+ const int stressOffset = stressSize();
+ for (int iQuad=0, iStress=0, indexP=0;
+ iQuad < numQuadPts;
+ ++iQuad, iStress+=stressOffset, indexP+=numParams)
+ _calcStress(&_stress[iStress], stressOffset,
+ ¶msCell[indexP], numParams,
+ &totalStrain[iStress], spaceDim);
delete[] paramsCell; paramsCell = 0;
return _stress;
@@ -110,7 +116,14 @@
double* paramsCell = 0;
_getParameters(¶msCell, cell, numQuadPts);
const int numParams = _numParameters();
- _calcElasticConsts(paramsCell, numParams, totalStrain, numQuadPts, spaceDim);
+ const int stressOffset = stressSize();
+ const int constOffset = numElasticConsts();
+ for (int iQuad=0, iStress=0, iConst=0, indexP=0;
+ iQuad < numQuadPts;
+ ++iQuad, iStress+=stressOffset, iConst += constOffset, indexP+=numParams)
+ _calcElasticConsts(&_elasticConsts[iConst], constOffset,
+ ¶msCell[indexP], numParams,
+ &totalStrain[iStress], spaceDim);
delete[] paramsCell; paramsCell = 0;
return _elasticConsts;
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -41,7 +41,7 @@
// PUBLIC TYPEDEFS ////////////////////////////////////////////////////
public :
- typedef ALE::Mesh Mesh;
+ typedef ALE::Mesh Mesh;
typedef Mesh::real_section_type real_section_type;
// PUBLIC METHODS /////////////////////////////////////////////////////
@@ -168,51 +168,51 @@
*/
ElasticMaterial(const ElasticMaterial& m);
- /** Compute density at locations from parameters.
+ /** Compute density from parameters.
*
- * Results are stored in _density.
- *
+ * @param density Array for density
+ * @param size Size of array for 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;
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters) = 0;
- /** Compute stress density at locations from parameters.
+ /** Compute stress tensor from parameters.
*
- * Results are stored in _stress.
- *
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
* @param parameters Parameters at locations.
* @param numParameters Number of parameters.
* @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
* @param spaceDim Spatial dimension for locations.
*/
virtual
- void _calcStress(const double* parameters,
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim) = 0;
- /** Compute derivatives of elasticity matrix at locations from parameters.
+ /** Compute derivatives of elasticity matrix from parameters.
*
- * Results are stored in _elasticConsts.
- *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
* @param parameters Parameters at locations.
* @param numParameters Number of parameters.
* @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
* @param spaceDim Spatial dimension for locations.
*/
virtual
- void _calcElasticConsts(const double* parameters,
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim) = 0;
// NOT IMPLEMENTED ////////////////////////////////////////////////////
@@ -221,9 +221,27 @@
/// Not implemented
const ElasticMaterial& operator=(const ElasticMaterial& m);
- // PROTECTED MEMBERS //////////////////////////////////////////////////
-protected :
+ // PRIVATE METHODS ////////////////////////////////////////////////////
+private :
+ /** Get parameters for cell.
+ *
+ * Parameters are returned in paramsCells.
+ *
+ * size = numQuadPts * numParams
+ * index = iQuad*numParams + iParam
+ *
+ * @param paramsCell Array of parameters for cell
+ * @param cell Finite-element cell
+ * @param numQuadPts Number of quadrature points (consistency check)
+ */
+ void _getParameters(double** paramsCells,
+ const Mesh::point_type& cell,
+ const int numQuadPts);
+
+ // PRIVATE MEMBERS ////////////////////////////////////////////////////
+private :
+
/** Density value at quadrature points for current cell.
*
* size = numQuadPts
@@ -231,33 +249,20 @@
*/
double* _density;
- /** Array of stress tensor at quadrature points for current cell.
+ /** Stress tensor at quadrature points for current cell.
*
* size = stressSize*numQuadPts
* index = iQuadPt*stressSize+iStress
*/
double* _stress;
- /** Array of elasticity constants at quadrature points for current cell.
+ /** Elasticity matrix at quadrature points for current cell.
*
* size = numElasticConsts*numQuadPts
* index = iQuadPt*numElasticConsts+iConstant
*/
double* _elasticConsts;
- // PRIVATE METHODS ////////////////////////////////////////////////////
-private :
-
- /** Get parameters for cell.
- *
- * @param paramsCell Array of parameters for cell
- * @param cell Finite-element cell
- * @param numQuadPts Number of quadrature points (consistency check)
- */
- void _getParameters(double** paramsCells,
- const Mesh::point_type& cell,
- const int numQuadPts);
-
}; // class ElasticMaterial
#endif // pylith_materials_elasticmaterial_hh
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -17,37 +17,38 @@
#include <assert.h> // USES assert()
// ----------------------------------------------------------------------
-// _ElasticPlaneStrain is a helper class for ElasticPlaneStrain. We define
-// it in this implementation file to insulate other objects from these
-// details.
namespace pylith {
namespace materials {
class _ElasticPlaneStrain;
} // materials
} // pylith
+/** _ElasticPlaneStrain is a helper class for ElasticPlaneStrain. We define
+ * it in this implementation file to insulate other objects from these
+ * details.
+ */
class pylith::materials::_ElasticPlaneStrain {
public:
- // Number of entries in stress tensor.
+ /// Number of entries in stress tensor.
static const int stressSize;
- // Number of elastic constants (for general 3-D elastic material)
+ /// Number of elastic constants (for general 3-D elastic material)
static const int numElasticConsts;
- // Values expected in spatial database
+ /// Values expected in spatial database
static const int numDBValues;
static const char* namesDBValues[];
- // Indices (order) of database values
+ /// Indices (order) of database values
static const int didDensity;
static const int didVs;
static const int didVp;
- // Parameters
+ /// Parameters
static const int numParameters;
static const char* namesParameters[];
- // Indices (order) of parameters
+ /// Indices (order) of parameters
static const int pidDensity;
static const int pidMu;
static const int pidLambda;
@@ -165,86 +166,78 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs)
+pylith::materials::ElasticPlaneStrain::_calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters)
{ // calcDensity
- assert(0 != _density);
+ assert(0 != density);
+ assert(1 == size);
assert(0 != parameters);
- for (int iLoc=0, index=0; iLoc < numLocs; ++iLoc, index+=numParameters)
- _density[iLoc] =
- parameters[index+_ElasticPlaneStrain::pidDensity];
+ *density = parameters[_ElasticPlaneStrain::pidDensity];
} // calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcStress(const double* parameters,
+pylith::materials::ElasticPlaneStrain::_calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // _calcStress
- assert(0 != _stress);
+ assert(0 != stress);
+ assert(_ElasticPlaneStrain::stressSize == size);
assert(0 != parameters);
assert(_ElasticPlaneStrain::numParameters == numParameters);
assert(spaceDim == _dimension);
- for (int iLoc=0, indexP=0, indexS=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticPlaneStrain::numParameters,
- indexS+=_ElasticPlaneStrain::stressSize) {
- const double density = parameters[indexP+_ElasticPlaneStrain::pidDensity];
- const double mu = parameters[indexP+_ElasticPlaneStrain::pidMu];
- const double lambda = parameters[indexP+_ElasticPlaneStrain::pidLambda];
-
- const double lambda2mu = lambda + 2.0 * mu;
+ const double density = parameters[_ElasticPlaneStrain::pidDensity];
+ const double mu = parameters[_ElasticPlaneStrain::pidMu];
+ const double lambda = parameters[_ElasticPlaneStrain::pidLambda];
- const double e11 = totalStrain[indexS ];
- const double e22 = totalStrain[indexS+1];
- const double e12 = totalStrain[indexS+3];
+ const double lambda2mu = lambda + 2.0 * mu;
+
+ const double e11 = totalStrain[0];
+ const double e22 = totalStrain[1];
+ const double e12 = totalStrain[2];
- const double s12 = lambda * (e11 + e22);
+ const double s12 = lambda * (e11 + e22);
- _stress[indexS ] = s12 + 2.0*mu*e11;
- _stress[indexS+1] = s12 + 2.0*mu*e22;
- _stress[indexS+2] = 2.0 * mu * e12;
- } // for
+ stress[0] = s12 + 2.0*mu*e11;
+ stress[1] = s12 + 2.0*mu*e22;
+ stress[2] = 2.0 * mu * e12;
} // _calcStress
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStrain::_calcElasticConsts(const double* parameters,
+pylith::materials::ElasticPlaneStrain::_calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // calcElasticConsts
- assert(0 != _elasticConsts);
+ assert(0 != elasticConsts);
+ assert(_ElasticPlaneStrain::numElasticConsts == size);
assert(0 != parameters);
assert(_ElasticPlaneStrain::numParameters == numParameters);
- for (int iLoc=0, indexP=0, indexC=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticPlaneStrain::numParameters,
- indexC+=_ElasticPlaneStrain::numElasticConsts) {
- const double density = parameters[indexP+_ElasticPlaneStrain::pidDensity];
- const double mu = parameters[indexP+_ElasticPlaneStrain::pidMu];
- const double lambda = parameters[indexP+_ElasticPlaneStrain::pidLambda];
+ const double density = parameters[_ElasticPlaneStrain::pidDensity];
+ const double mu = parameters[_ElasticPlaneStrain::pidMu];
+ const double lambda = parameters[_ElasticPlaneStrain::pidLambda];
- const double lambda2mu = lambda + 2.0*mu;
+ const double lambda2mu = lambda + 2.0*mu;
- _elasticConsts[indexC+ 0] = lambda2mu; // C1111
- _elasticConsts[indexC+ 1] = lambda; // C1122
- _elasticConsts[indexC+ 3] = 0; // C1112
- _elasticConsts[indexC+ 6] = lambda2mu; // C2222
- _elasticConsts[indexC+ 8] = 0; // C2212
- _elasticConsts[indexC+15] = 2.0*mu; // C1212
- } // for
+ elasticConsts[0] = lambda2mu; // C1111
+ elasticConsts[1] = lambda; // C1122
+ elasticConsts[2] = 0; // C1112
+ elasticConsts[3] = lambda2mu; // C2222
+ elasticConsts[4] = 0; // C2212
+ elasticConsts[5] = 2.0*mu; // C1212
} // calcElasticConsts
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStrain.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -14,7 +14,7 @@
*
* @brief C++ ElasticPlaneStrain object
*
- * 3-D, isotropic, linear elastic material for plane strain. The
+ * 2-D, isotropic, linear elastic material for plane strain. The
* physical properties are specified using density, shear-wave speed,
* and compressional-wave speed. The physical properties are stored
* internally using density, lambda, and mu, which are directly
@@ -125,52 +125,48 @@
const double* dbValues,
const int numValues) const;
- /** Compute density at locations from parameters.
+ /** Compute density from parameters.
*
- * Results are stored in _density.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
+ * @param density Array for density
+ * @param size Size of array for density
* @param parameters Parameters at location
* @param numParameters Number of parameters
- * @param numLocs Number of locations
*/
- void _calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs);
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters);
- /** Compute stress tensor at locations from parameters.
+ /** Compute stress tensor from parameters.
*
- * Results are stored in _stress.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
- * @param parameters Parameters at location
- * @param numParameters Number of parameters
- * @param totalStrain Total strain at locations
- * @param numLocs Number of locations
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcStress(const double* parameters,
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
- /** Compute derivatives of elasticity matrix at locations from parameters.
+ /** Compute derivatives of elasticity matrix from parameters.
*
- * Results are stored in _elasticConsts.
- *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
* @param parameters Parameters at locations.
* @param numParameters Number of parameters.
* @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcElasticConsts(const double* parameters,
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -17,37 +17,38 @@
#include <assert.h> // USES assert()
// ----------------------------------------------------------------------
-// _ElasticPlaneStress is a helper class for ElasticPlaneStress. We define
-// it in this implementation file to insulate other objects from these
-// details.
namespace pylith {
namespace materials {
class _ElasticPlaneStress;
} // materials
} // pylith
+/** _ElasticPlaneStress is a helper class for ElasticPlaneStress. We define
+ * it in this implementation file to insulate other objects from these
+ * details.
+ */
class pylith::materials::_ElasticPlaneStress {
public:
- // Number of entries in stress tensor.
+ /// Number of entries in stress tensor.
static const int stressSize;
- // Number of elastic constants (for general 3-D elastic material)
+ /// Number of elastic constants (for general 3-D elastic material)
static const int numElasticConsts;
- // Values expected in spatial database
+ /// Values expected in spatial database
static const int numDBValues;
static const char* namesDBValues[];
- // Indices (order) of database values
+ /// Indices (order) of database values
static const int didDensity;
static const int didVs;
static const int didVp;
- // Parameters
+ /// Parameters
static const int numParameters;
static const char* namesParameters[];
- // Indices (order) of parameters
+ /// Indices (order) of parameters
static const int pidDensity;
static const int pidMu;
static const int pidLambda;
@@ -165,88 +166,78 @@
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStress::_calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs)
+pylith::materials::ElasticPlaneStress::_calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters)
{ // calcDensity
- assert(0 != _density);
+ assert(0 != density);
+ assert(1 == size);
assert(0 != parameters);
- for (int iLoc=0, index=0; iLoc < numLocs; ++iLoc, index+=numParameters)
- _density[iLoc] =
- parameters[index+_ElasticPlaneStress::pidDensity];
+ *density = parameters[_ElasticPlaneStress::pidDensity];
} // calcDensity
// ----------------------------------------------------------------------
// Compute stress tensor at location from parameters.
void
-pylith::materials::ElasticPlaneStress::_calcStress(const double* parameters,
+pylith::materials::ElasticPlaneStress::_calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // _calcStress
- assert(0 != _stress);
+ assert(0 != stress);
+ assert(_ElasticPlaneStress::stressSize == size);
assert(0 != parameters);
assert(_ElasticPlaneStress::numParameters == numParameters);
assert(spaceDim == _dimension);
- for (int iLoc=0, indexP=0, indexS=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticPlaneStress::numParameters,
- indexS+=_ElasticPlaneStress::stressSize) {
- const double density = parameters[indexP+_ElasticPlaneStress::pidDensity];
- const double mu = parameters[indexP+_ElasticPlaneStress::pidMu];
- const double lambda = parameters[indexP+_ElasticPlaneStress::pidLambda];
+ const double density = parameters[_ElasticPlaneStress::pidDensity];
+ const double mu = parameters[_ElasticPlaneStress::pidMu];
+ const double lambda = parameters[_ElasticPlaneStress::pidLambda];
- const double lambda2mu = lambda + 2.0 * mu;
- const double lambdamu = lambda + mu;
+ const double lambda2mu = lambda + 2.0 * mu;
+ const double lambdamu = lambda + mu;
- const double e11 = totalStrain[indexS ];
- const double e22 = totalStrain[indexS+1];
- const double e12 = totalStrain[indexS+3];
+ const double e11 = totalStrain[0];
+ const double e22 = totalStrain[1];
+ const double e12 = totalStrain[2];
- _stress[indexS ] =
- (4.0*mu*lambdamu * e11 + 2.0*mu*lambda * e22)/lambda2mu;
- _stress[indexS+1] =
- (2.0*mu*lambda * e11 + 4.0*mu*lambdamu * e22)/lambda2mu;
- _stress[indexS+2] = 2.0 * mu * e12;
- } // for
+ stress[0] = (4.0*mu*lambdamu * e11 + 2.0*mu*lambda * e22)/lambda2mu;
+ stress[1] = (2.0*mu*lambda * e11 + 4.0*mu*lambdamu * e22)/lambda2mu;
+ stress[2] = 2.0 * mu * e12;
} // _calcStress
// ----------------------------------------------------------------------
// Compute density at location from parameters.
void
-pylith::materials::ElasticPlaneStress::_calcElasticConsts(const double* parameters,
+pylith::materials::ElasticPlaneStress::_calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim)
{ // calcElasticConsts
- assert(0 != _elasticConsts);
+ assert(0 != elasticConsts);
+ assert(_ElasticPlaneStress::numElasticConsts == size);
assert(0 != parameters);
assert(_ElasticPlaneStress::numParameters == numParameters);
- for (int iLoc=0, indexP=0, indexC=0;
- iLoc < numLocs;
- ++iLoc,
- indexP+=_ElasticPlaneStress::numParameters,
- indexC+=_ElasticPlaneStress::numElasticConsts) {
- const double density = parameters[indexP+_ElasticPlaneStress::pidDensity];
- const double mu = parameters[indexP+_ElasticPlaneStress::pidMu];
- const double lambda = parameters[indexP+_ElasticPlaneStress::pidLambda];
+ const double density = parameters[_ElasticPlaneStress::pidDensity];
+ const double mu = parameters[_ElasticPlaneStress::pidMu];
+ const double lambda = parameters[_ElasticPlaneStress::pidLambda];
- const double lambda2mu = lambda + 2.0 * mu;
- const double c11 = 4.0 * mu * (lambda + mu) / lambda2mu;
+ const double lambda2mu = lambda + 2.0 * mu;
+ const double c11 = 4.0 * mu * (lambda + mu) / lambda2mu;
- _elasticConsts[indexC+0] = c11; // C1111
- _elasticConsts[indexC+1] = 2.0 * mu * lambda / lambda2mu; // C1122
- _elasticConsts[indexC+2] = 0; // C1112
- _elasticConsts[indexC+3] = c11; // C2222
- _elasticConsts[indexC+4] = 0; // C2212
- _elasticConsts[indexC+5] = 2.0 * mu; // C1212
- } // for
+ elasticConsts[0] = c11; // C1111
+ elasticConsts[1] = 2.0 * mu * lambda / lambda2mu; // C1122
+ elasticConsts[2] = 0; // C1112
+ elasticConsts[3] = c11; // C2222
+ elasticConsts[4] = 0; // C2212
+ elasticConsts[5] = 2.0 * mu; // C1212
} // calcElasticConsts
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticPlaneStress.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -125,52 +125,48 @@
const double* dbValues,
const int numValues) const;
- /** Compute density at locations from parameters.
+ /** Compute density from parameters.
*
- * Results are stored in _density.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
+ * @param density Array for density
+ * @param size Size of array for density
* @param parameters Parameters at location
* @param numParameters Number of parameters
- * @param numLocs Number of locations
*/
- void _calcDensity(const double* parameters,
- const int numParameters,
- const int numLocs);
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters);
- /** Compute stress tensor at locations from parameters.
+ /** Compute stress tensor from parameters.
*
- * Results are stored in _stress.
- *
- * Index into parameters = iLoc*numParameters + iParam
- *
- * @param parameters Parameters at location
- * @param numParameters Number of parameters
- * @param totalStrain Total strain at locations
- * @param numLocs Number of locations
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcStress(const double* parameters,
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
- /** Compute derivatives of elasticity matrix at locations from parameters.
+ /** Compute derivatives of elasticity matrix from parameters.
*
- * Results are stored in _elasticConsts.
- *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
* @param parameters Parameters at locations.
* @param numParameters Number of parameters.
* @param totalStrain Total strain at locations.
- * @param numLocs Number of locations.
* @param spaceDim Spatial dimension for locations.
*/
- void _calcElasticConsts(const double* parameters,
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
const int numParameters,
const double* totalStrain,
- const int numLocs,
const int spaceDim);
// NOT IMPLEMENTED ////////////////////////////////////////////////////
Added: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,219 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "ElasticStrain1D.hh" // implementation of object methods
+
+#include <assert.h> // USES assert()
+
+// ----------------------------------------------------------------------
+namespace pylith {
+ namespace materials {
+ class _ElasticStrain1D;
+ } // materials
+} // pylith
+
+/** _ElasticStrain1D is a helper class for ElasticStrain1D. We define
+ * it in this implementation file to insulate other objects from these
+ * details.
+ */
+class pylith::materials::_ElasticStrain1D {
+public:
+ /// Number of entries in stress tensor.
+ static const int stressSize;
+
+ /// Number of entries in derivative of elasticity matrix.
+ static const int numElasticConsts;
+
+ /// Values expected in spatial database
+ static const int numDBValues;
+ static const char* namesDBValues[];
+
+ /// Indices (order) of database values
+ static const int didDensity;
+ static const int didVp;
+
+ /// Parameters
+ static const int numParameters;
+ static const char* namesParameters[];
+
+ /// Indices (order) of parameters
+ static const int pidDensity;
+ static const int pidLambda2mu;
+}; // _ElasticStrain1D
+
+const int pylith::materials::_ElasticStrain1D::stressSize = 1;
+const int pylith::materials::_ElasticStrain1D::numElasticConsts = 1;
+const int pylith::materials::_ElasticStrain1D::numDBValues = 2;
+const char* pylith::materials::_ElasticStrain1D::namesDBValues[] =
+ {"density", "vp" };
+const int pylith::materials::_ElasticStrain1D::numParameters = 2;
+const char* pylith::materials::_ElasticStrain1D::namesParameters[] =
+ {"density", "lambda2mu" };
+const int pylith::materials::_ElasticStrain1D::didDensity = 0;
+const int pylith::materials::_ElasticStrain1D::didVp = 1;
+const int pylith::materials::_ElasticStrain1D::pidDensity = 0;
+const int pylith::materials::_ElasticStrain1D::pidLambda2mu = 1;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::materials::ElasticStrain1D::ElasticStrain1D(void)
+{ // constructor
+ _dimension = 1;
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::materials::ElasticStrain1D::~ElasticStrain1D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::materials::ElasticStrain1D::ElasticStrain1D(
+ const ElasticStrain1D& m) :
+ ElasticMaterial(m)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Get number of entries in stress tensor.
+int
+pylith::materials::ElasticStrain1D::stressSize(void) const
+{ // stressSize
+ return _ElasticStrain1D::stressSize;
+} // stressSize
+
+// ----------------------------------------------------------------------
+// Get number of elastic constants for material.
+int
+pylith::materials::ElasticStrain1D::numElasticConsts(void) const
+{ // numElasticConsts
+ return _ElasticStrain1D::numElasticConsts;
+} // numElasticConsts
+
+// ----------------------------------------------------------------------
+// Get names of values expected to be in database of parameters for
+const char**
+pylith::materials::ElasticStrain1D::_dbValues(void) const
+{ // _dbValues
+ return _ElasticStrain1D::namesDBValues;
+} // _dbValues
+
+// ----------------------------------------------------------------------
+// Get number of values expected to be in database of parameters for
+int
+pylith::materials::ElasticStrain1D::_numDBValues(void) const
+{ // _numDBValues
+ return _ElasticStrain1D::numDBValues;
+} // _numDBValues
+
+// ----------------------------------------------------------------------
+// Get names of parameters for physical properties.
+const char**
+pylith::materials::ElasticStrain1D::_parameterNames(void) const
+{ // _parameterNames
+ return _ElasticStrain1D::namesParameters;
+} // _parameterNames
+
+// ----------------------------------------------------------------------
+// Get number of parameters for physical properties.
+int
+pylith::materials::ElasticStrain1D::_numParameters(void) const
+{ // _numParameters
+ return _ElasticStrain1D::numParameters;
+} // _numParameters
+
+// ----------------------------------------------------------------------
+// Compute parameters from values in spatial database.
+void
+pylith::materials::ElasticStrain1D::_dbToParameters(double* paramVals,
+ const int numParams,
+ const double* dbValues,
+ const int numValues) const
+{ // computeParameters
+ assert(0 != paramVals);
+ assert(_ElasticStrain1D::numParameters == numParams);
+ assert(0 != dbValues);
+ assert(_ElasticStrain1D::numDBValues == numValues);
+
+ const double density = dbValues[_ElasticStrain1D::didDensity];
+ const double vp = dbValues[_ElasticStrain1D::didVp];
+ const double lambda2mu = density * vp*vp;
+
+ paramVals[_ElasticStrain1D::pidDensity] = density;
+ paramVals[_ElasticStrain1D::pidLambda2mu] = lambda2mu;
+} // computeParameters
+
+// ----------------------------------------------------------------------
+// Compute density at location from parameters.
+void
+pylith::materials::ElasticStrain1D::_calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters)
+{ // _calcDensity
+ assert(0 != density);
+ assert(1 == size);
+ assert(0 != parameters);
+
+ *density = parameters[_ElasticStrain1D::pidDensity];
+} // _calcDensity
+
+// ----------------------------------------------------------------------
+// Compute stress tensor at location from parameters.
+void
+pylith::materials::ElasticStrain1D::_calcStress(double* const stress,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim)
+{ // _calcStress
+ assert(0 != stress);
+ assert(_ElasticStrain1D::stressSize == size);
+ assert(0 != parameters);
+ assert(_ElasticStrain1D::numParameters == numParameters);
+ assert(spaceDim == _dimension);
+
+ const double density = parameters[_ElasticStrain1D::pidDensity];
+ const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu];
+
+ const double e11 = totalStrain[0];
+ stress[0] = lambda2mu * e11;
+} // _calcStress
+
+// ----------------------------------------------------------------------
+// Compute derivative of elasticity matrix at location from parameters.
+void
+pylith::materials::ElasticStrain1D::_calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim)
+{ // _calcElasticConsts
+ assert(0 != elasticConsts);
+ assert(_ElasticStrain1D::numElasticConsts == size);
+ assert(0 != parameters);
+ assert(_ElasticStrain1D::numParameters == numParameters);
+ assert(spaceDim == _dimension);
+
+ const double density = parameters[_ElasticStrain1D::pidDensity];
+ const double lambda2mu = parameters[_ElasticStrain1D::pidLambda2mu];
+
+ elasticConsts[0] = lambda2mu;
+} // _calcElasticConsts
+
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,184 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/materials/ElasticStrain1D.h
+ *
+ * @brief C++ ElasticStrain1D object
+ *
+ * 1-D, linear elastic material with axial strain. The physical
+ * properties are specified using density and compressional-wave
+ * speed. The physical properties are stored internally using density
+ * and lambda + 2 mu, which are directly related to the elasticity
+ * constants used in the finite-element integration.
+ */
+
+#if !defined(pylith_materials_elasticstrain1d_hh)
+#define pylith_materials_elasticstrain1d_hh
+
+#include "ElasticMaterial.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace materials {
+ class ElasticStrain1D;
+ class TestElasticStrain1D; // unit testing
+ } // materials
+} // pylith
+
+/// 3-D, linear elastic material with axial strain.
+class pylith::materials::ElasticStrain1D : public ElasticMaterial
+{ // class ElasticStrain1D
+ friend class TestElasticStrain1D; // unit testing
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Default constructor
+ ElasticStrain1D(void);
+
+ /// Destructor
+ ~ElasticStrain1D(void);
+
+ /** Create a pointer to a copy of this.
+ *
+ * @returns Pointer to copy
+ */
+ ElasticMaterial* clone(void) const;
+
+ /** Get number of entries in stress tensor.
+ *
+ * 1-D = 1
+ * 2-D = 3
+ * 3-D = 6
+ *
+ * @returns Number of entries in stress tensor.
+ */
+ int stressSize(void) const;
+
+ /** Get number of elastic constants for material.
+ *
+ * 1-D = 1
+ * 2-D = 6
+ * 3-D = 21
+ *
+ * @returns Number of elastic constants
+ */
+ int numElasticConsts(void) const;
+
+ // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor
+ *
+ * @param m Material to copy
+ */
+ ElasticStrain1D(const ElasticStrain1D& m);
+
+ /** Get names of values expected to be in database of parameters for
+ * physical properties.
+ *
+ * @returns Names of values
+ */
+ 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;
+
+ /** Get names of parameters for physical properties.
+ *
+ * @returns Names of parameters
+ */
+ const char** _parameterNames(void) const;
+
+ /** Get number of parameters for physical properties.
+ *
+ * @returns Number of parameters
+ */
+ int _numParameters(void) const;
+
+ /** Compute parameters from values in spatial database.
+ *
+ * Order of values in arrays matches order used in dbValues() and
+ * parameterNames().
+ *
+ * @param paramVals Array of parameters
+ * @param numParams Number of parameters
+ * @param dbValues Array of database values
+ * @param numValues Number of database values
+ */
+ void _dbToParameters(double* paramVals,
+ const int numParams,
+ const double* dbValues,
+ const int numValues) const;
+
+ /** Compute density from parameters.
+ *
+ * @param density Array for density
+ * @param size Size of array for density
+ * @param parameters Parameters at location
+ * @param numParameters Number of parameters
+ */
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters);
+
+ /** Compute stress tensor from parameters.
+ *
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
+ * @param spaceDim Spatial dimension for locations.
+ */
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim);
+
+ /** Compute derivatives of elasticity matrix from parameters.
+ *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
+ * @param spaceDim Spatial dimension for locations.
+ */
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim);
+
+ // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const ElasticStrain1D& operator=(const ElasticStrain1D& m);
+
+}; // class ElasticStrain1D
+
+#include "ElasticStrain1D.icc" // inline methods
+
+#endif // pylith_materials_elasticstrain1d_hh
+
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.icc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStrain1D.icc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,25 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_materials_elasticstrain1d_hh)
+#error "ElasticStrain1D.icc can only be included from ElasticStrain1D.hh"
+#endif
+
+// Create a pointer to a copy of this.
+inline
+pylith::materials::ElasticMaterial*
+pylith::materials::ElasticStrain1D::clone(void) const {
+ return new ElasticStrain1D(*this);
+}
+
+
+// End of file
Copied: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc (from rev 6518, short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.cc 2007-04-07 19:05:26 UTC (rev 6518)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,229 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#include <portinfo>
+
+#include "ElasticStress1D.hh" // implementation of object methods
+
+#include <assert.h> // USES assert()
+
+// ----------------------------------------------------------------------
+namespace pylith {
+ namespace materials {
+ class _ElasticStress1D;
+ } // materials
+} // pylith
+
+/** _ElasticStress1D is a helper class for ElasticStress1D. We define
+ * it in this implementation file to insulate other objects from these
+ * details.
+ */
+class pylith::materials::_ElasticStress1D {
+public:
+ /// Number of entries in stress tensor.
+ static const int stressSize;
+
+ /// Number of entries in derivative of elasticity matrix.
+ static const int numElasticConsts;
+
+ /// Values expected in spatial database
+ static const int numDBValues;
+ static const char* namesDBValues[];
+
+ /// 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;
+}; // _ElasticStress1D
+
+const int pylith::materials::_ElasticStress1D::stressSize = 1;
+const int pylith::materials::_ElasticStress1D::numElasticConsts = 1;
+const int pylith::materials::_ElasticStress1D::numDBValues = 3;
+const char* pylith::materials::_ElasticStress1D::namesDBValues[] =
+ {"density", "vs", "vp" };
+const int pylith::materials::_ElasticStress1D::numParameters = 3;
+const char* pylith::materials::_ElasticStress1D::namesParameters[] =
+ {"density", "mu", "lambda" };
+const int pylith::materials::_ElasticStress1D::didDensity = 0;
+const int pylith::materials::_ElasticStress1D::didVs = 1;
+const int pylith::materials::_ElasticStress1D::didVp = 2;
+const int pylith::materials::_ElasticStress1D::pidDensity = 0;
+const int pylith::materials::_ElasticStress1D::pidMu = 1;
+const int pylith::materials::_ElasticStress1D::pidLambda = 2;
+
+// ----------------------------------------------------------------------
+// Default constructor.
+pylith::materials::ElasticStress1D::ElasticStress1D(void)
+{ // constructor
+ _dimension = 1;
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor.
+pylith::materials::ElasticStress1D::~ElasticStress1D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::materials::ElasticStress1D::ElasticStress1D(
+ const ElasticStress1D& m) :
+ ElasticMaterial(m)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Get number of entries in stress tensor.
+int
+pylith::materials::ElasticStress1D::stressSize(void) const
+{ // stressSize
+ return _ElasticStress1D::stressSize;
+} // stressSize
+
+// ----------------------------------------------------------------------
+// Get number of elastic constants for material.
+int
+pylith::materials::ElasticStress1D::numElasticConsts(void) const
+{ // numElasticConsts
+ return _ElasticStress1D::numElasticConsts;
+} // numElasticConsts
+
+// ----------------------------------------------------------------------
+// Get names of values expected to be in database of parameters for
+const char**
+pylith::materials::ElasticStress1D::_dbValues(void) const
+{ // _dbValues
+ return _ElasticStress1D::namesDBValues;
+} // _dbValues
+
+// ----------------------------------------------------------------------
+// Get number of values expected to be in database of parameters for
+int
+pylith::materials::ElasticStress1D::_numDBValues(void) const
+{ // _numDBValues
+ return _ElasticStress1D::numDBValues;
+} // _numDBValues
+
+// ----------------------------------------------------------------------
+// Get names of parameters for physical properties.
+const char**
+pylith::materials::ElasticStress1D::_parameterNames(void) const
+{ // _parameterNames
+ return _ElasticStress1D::namesParameters;
+} // _parameterNames
+
+// ----------------------------------------------------------------------
+// Get number of parameters for physical properties.
+int
+pylith::materials::ElasticStress1D::_numParameters(void) const
+{ // _numParameters
+ return _ElasticStress1D::numParameters;
+} // _numParameters
+
+// ----------------------------------------------------------------------
+// Compute parameters from values in spatial database.
+void
+pylith::materials::ElasticStress1D::_dbToParameters(double* paramVals,
+ const int numParams,
+ const double* dbValues,
+ const int numValues) const
+{ // computeParameters
+ assert(0 != paramVals);
+ assert(_ElasticStress1D::numParameters == numParams);
+ assert(0 != dbValues);
+ assert(_ElasticStress1D::numDBValues == numValues);
+
+ const double density = dbValues[_ElasticStress1D::didDensity];
+ const double vs = dbValues[_ElasticStress1D::didVs];
+ const double vp = dbValues[_ElasticStress1D::didVp];
+
+ const double mu = density * vs*vs;
+ const double lambda = density * vp*vp - 2.0*mu;
+
+ paramVals[_ElasticStress1D::pidDensity] = density;
+ paramVals[_ElasticStress1D::pidMu] = mu;
+ paramVals[_ElasticStress1D::pidLambda] = lambda;
+} // computeParameters
+
+// ----------------------------------------------------------------------
+// Compute density at location from parameters.
+void
+pylith::materials::ElasticStress1D::_calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters)
+{ // _calcDensity
+ assert(0 != density);
+ assert(1 == size);
+ assert(0 != parameters);
+
+ *density = parameters[_ElasticStress1D::pidDensity];
+} // _calcDensity
+
+// ----------------------------------------------------------------------
+// Compute stress tensor at location from parameters.
+void
+pylith::materials::ElasticStress1D::_calcStress(double* const stress,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim)
+{ // _calcStress
+ assert(0 != stress);
+ assert(_ElasticStress1D::stressSize == size);
+ assert(0 != parameters);
+ assert(_ElasticStress1D::numParameters == numParameters);
+ assert(spaceDim == _dimension);
+
+ const double density = parameters[_ElasticStress1D::pidDensity];
+ const double mu = parameters[_ElasticStress1D::pidMu];
+ const double lambda = parameters[_ElasticStress1D::pidLambda];
+
+ const double e11 = totalStrain[0];
+ stress[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu) * e11;
+} // _calcStress
+
+// ----------------------------------------------------------------------
+// Compute derivative of elasticity matrix at location from parameters.
+void
+pylith::materials::ElasticStress1D::_calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim)
+{ // _calcElasticConsts
+ assert(0 != elasticConsts);
+ assert(_ElasticStress1D::numElasticConsts == size);
+ assert(0 != parameters);
+ assert(_ElasticStress1D::numParameters == numParameters);
+ assert(spaceDim == _dimension);
+
+ const double density = parameters[_ElasticStress1D::pidDensity];
+ const double mu = parameters[_ElasticStress1D::pidMu];
+ const double lambda = parameters[_ElasticStress1D::pidLambda];
+
+ elasticConsts[0] = mu * (3.0*lambda+2.0*mu) / (lambda + mu);
+} // _calcElasticConsts
+
+
+// End of file
Copied: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh (from rev 6518, short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh)
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.hh 2007-04-07 19:05:26 UTC (rev 6518)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.hh 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,185 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+/** @file libsrc/materials/ElasticStress1D.h
+ *
+ * @brief C++ ElasticStress1D object
+ *
+ * 1-D, linear elastic material with axial stress. The physical
+ * properties are specified using density, shear-wave speed, and
+ * compressional-wave speed. The physical properties are stored
+ * internally using density, mu, and lambda, which are directly
+ * related to the elasticity constants used in the finite-element
+ * integration.
+ */
+
+#if !defined(pylith_materials_elasticstress1d_hh)
+#define pylith_materials_elasticstress1d_hh
+
+#include "ElasticMaterial.hh"
+
+/// Namespace for pylith package
+namespace pylith {
+ namespace materials {
+ class ElasticStress1D;
+ class TestElasticStress1D; // unit testing
+ } // materials
+} // pylith
+
+/// 1-D, linear elastic material with axial stres.
+class pylith::materials::ElasticStress1D : public ElasticMaterial
+{ // class ElasticStress1D
+ friend class TestElasticStress1D; // unit testing
+
+ // PUBLIC METHODS /////////////////////////////////////////////////////
+public :
+
+ /// Default constructor
+ ElasticStress1D(void);
+
+ /// Destructor
+ ~ElasticStress1D(void);
+
+ /** Create a pointer to a copy of this.
+ *
+ * @returns Pointer to copy
+ */
+ ElasticMaterial* clone(void) const;
+
+ /** Get number of entries in stress tensor.
+ *
+ * 1-D = 1
+ * 2-D = 3
+ * 3-D = 6
+ *
+ * @returns Number of entries in stress tensor.
+ */
+ int stressSize(void) const;
+
+ /** Get number of elastic constants for material.
+ *
+ * 1-D = 1
+ * 2-D = 6
+ * 3-D = 21
+ *
+ * @returns Number of elastic constants
+ */
+ int numElasticConsts(void) const;
+
+ // PROTECTED METHODS //////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor
+ *
+ * @param m Material to copy
+ */
+ ElasticStress1D(const ElasticStress1D& m);
+
+ /** Get names of values expected to be in database of parameters for
+ * physical properties.
+ *
+ * @returns Names of values
+ */
+ 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;
+
+ /** Get names of parameters for physical properties.
+ *
+ * @returns Names of parameters
+ */
+ const char** _parameterNames(void) const;
+
+ /** Get number of parameters for physical properties.
+ *
+ * @returns Number of parameters
+ */
+ int _numParameters(void) const;
+
+ /** Compute parameters from values in spatial database.
+ *
+ * Order of values in arrays matches order used in dbValues() and
+ * parameterNames().
+ *
+ * @param paramVals Array of parameters
+ * @param numParams Number of parameters
+ * @param dbValues Array of database values
+ * @param numValues Number of database values
+ */
+ void _dbToParameters(double* paramVals,
+ const int numParams,
+ const double* dbValues,
+ const int numValues) const;
+
+ /** Compute density from parameters.
+ *
+ * @param density Array for density
+ * @param size Size of array for density
+ * @param parameters Parameters at location
+ * @param numParameters Number of parameters
+ */
+ void _calcDensity(double* const density,
+ const int size,
+ const double* parameters,
+ const int numParameters);
+
+ /** Compute stress tensor from parameters.
+ *
+ * @param stress Array for stress tensor
+ * @param size Size of array for stress tensor
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
+ * @param spaceDim Spatial dimension for locations.
+ */
+ void _calcStress(double* const stress,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim);
+
+ /** Compute derivatives of elasticity matrix from parameters.
+ *
+ * @param elasticConsts Array for elastic constants
+ * @param size Size of array
+ * @param parameters Parameters at locations.
+ * @param numParameters Number of parameters.
+ * @param totalStrain Total strain at locations.
+ * @param spaceDim Spatial dimension for locations.
+ */
+ void _calcElasticConsts(double* const elasticConsts,
+ const int size,
+ const double* parameters,
+ const int numParameters,
+ const double* totalStrain,
+ const int spaceDim);
+
+ // NOT IMPLEMENTED ////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const ElasticStress1D& operator=(const ElasticStress1D& m);
+
+}; // class ElasticStress1D
+
+#include "ElasticStress1D.icc" // inline methods
+
+#endif // pylith_materials_elasticstress1d_hh
+
+
+// End of file
Copied: short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.icc (from rev 6518, short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc)
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticIsotropic1D.icc 2007-04-07 19:05:26 UTC (rev 6518)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticStress1D.icc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -0,0 +1,25 @@
+// -*- C++ -*-
+//
+// ----------------------------------------------------------------------
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ----------------------------------------------------------------------
+//
+
+#if !defined(pylith_materials_elasticstress1d_hh)
+#error "ElasticStress1D.icc can only be included from ElasticStress1D.hh"
+#endif
+
+// Create a pointer to a copy of this.
+inline
+pylith::materials::ElasticMaterial*
+pylith::materials::ElasticStress1D::clone(void) const {
+ return new ElasticStress1D(*this);
+}
+
+
+// End of file
Modified: short/3D/PyLith/trunk/libsrc/materials/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/Makefile.am 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/libsrc/materials/Makefile.am 2007-04-08 02:00:47 UTC (rev 6521)
@@ -14,8 +14,10 @@
include $(top_srcdir)/subpackage.am
subpkginclude_HEADERS = \
- ElasticIsotropic1D.hh \
- ElasticIsotropic1D.icc \
+ ElasticStrain1D.hh \
+ ElasticStrain1D.icc \
+ ElasticStress1D.hh \
+ ElasticStress1D.icc \
ElasticIsotropic3D.hh \
ElasticIsotropic3D.icc \
ElasticMaterial.hh \
Modified: short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc 2007-04-07 22:16:54 UTC (rev 6520)
+++ short/3D/PyLith/trunk/unittests/libtests/materials/TestElasticMaterial.cc 2007-04-08 02:00:47 UTC (rev 6521)
@@ -335,19 +335,14 @@
ElasticMaterial* material,
const ElasticMaterialData& data) const
{ // _testCalcDensity
- const int numQuadPts = data.numLocs;
- material->initCellData(numQuadPts);
- material->_calcDensity(data.parameterData, data.numParameters, data.numLocs);
+ double density = 0;
+ material->_calcDensity(&density, 1, data.parameterData, data.numParameters);
const double* densityE = data.density;
- const double* density = material->_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);
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, density/densityE[0], tolerance);
} // _testCalcDensity
// ----------------------------------------------------------------------
@@ -357,18 +352,17 @@
ElasticMaterial* material,
const ElasticMaterialData& data) const
{ // _testCalcElasticConsts
- const int numQuadPts = data.numLocs;
- material->initCellData(numQuadPts);
- material->_calcStress(data.parameterData, data.numParameters, data.strain,
- data.numLocs, data.dimension);
+ const int size = material->stressSize();
+ double* stress = (size > 0) ? new double[size] : 0;
+ material->_calcStress(stress, size,
+ data.parameterData, data.numParameters,
+ data.strain, data.dimension);
const double* stressE = data.stress;
- const double* stress = material->_stress;
CPPUNIT_ASSERT(0 != stress);
CPPUNIT_ASSERT(0 != stressE);
const double tolerance = 1.0e-06;
- const double size = numQuadPts * material->stressSize();
for (int i=0; i < size; ++i)
if (fabs(stressE[i]) > tolerance)
CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, stress[i]/stressE[i],
@@ -376,6 +370,7 @@
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(stressE[i], stress[i],
tolerance);
+ delete[] stress; stress = 0;
} // _testCalcStress
// ----------------------------------------------------------------------
@@ -385,18 +380,17 @@
ElasticMaterial* material,
const ElasticMaterialData& data) const
{ // _testCalcElasticConsts
- const int numQuadPts = data.numLocs;
- material->initCellData(numQuadPts);
- material->_calcElasticConsts(data.parameterData, data.numParameters,
- data.strain, data.numLocs, data.dimension);
+ const int size = material->numElasticConsts();
+ double* elasticConsts = (size > 0) ? new double[size] : 0;
+ material->_calcElasticConsts(elasticConsts, size,
+ data.parameterData, data.numParameters,
+ data.strain, data.dimension);
const double* elasticConstsE = data.elasticConsts;
- const double* elasticConsts = material->_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],
@@ -404,6 +398,7 @@
else
CPPUNIT_ASSERT_DOUBLES_EQUAL(elasticConstsE[i], elasticConsts[i],
tolerance);
+ delete[] elasticConsts; elasticConsts = 0;
} // _testCalcElasticConsts
More information about the cig-commits
mailing list