30 #ifndef OOMPH_PML_TIME_HARMONIC_ELASTICITY_TENSOR_HEADER
31 #define OOMPH_PML_TIME_HARMONIC_ELASTICITY_TENSOR_HEADER
35 #include <oomph-lib-config.h>
38 #include "../generic/oomph_utilities.h"
60 static const unsigned Index[3][3][3][3];
66 const unsigned&
i)
const
68 return std::complex<double>(0.0, 0.0);
79 const unsigned& l)
const
81 if ((
i > 2) || (j > 2) || (k > 2) || (l > 2))
83 std::ostringstream error_message;
86 error_message <<
"Range Error : Index 1 " <<
i
87 <<
" is not in the range (0,2)";
91 error_message <<
"Range Error : Index 2 " << j
92 <<
" is not in the range (0,2)";
97 error_message <<
"Range Error : Index 2 " << k
98 <<
" is not in the range (0,2)";
103 error_message <<
"Range Error : Index 4 " << l
104 <<
" is not in the range (0,2)";
109 OOMPH_CURRENT_FUNCTION,
110 OOMPH_EXCEPTION_LOCATION);
128 const unsigned& l)
const
152 std::complex<double>
C[4];
171 C[0] = std::complex<double>(0.0, 0.0);
172 double lambda =
E *
nu / ((1.0 +
nu) * (1.0 - 2.0 *
nu));
173 double mu =
E / (2.0 * (1.0 +
nu));
184 C[0] = std::complex<double>(0.0, 0.0);
188 double lambda =
E *
nu / ((1.0 +
nu) * (1.0 - 2.0 *
nu));
189 double mu =
E / (2.0 * (1.0 +
nu));
207 C[0] = std::complex<double>(0.0, 0.0);
208 double lambda =
E *
nu / ((1.0 +
nu) * (1.0 - 2.0 *
nu));
209 double mu =
E / (2.0 * (1.0 +
nu));
225 C[1] = lambda + 2.0 * mu;
An OomphLibError object which should be thrown when an run-time error is encountered....
A base class that represents the fourth-rank elasticity tensor defined such that.
static const unsigned Index[3][3][3][3]
Translation table from the four indices to the corresponding independent component.
PMLTimeHarmonicElasticityTensor()
Empty Constructor.
virtual ~PMLTimeHarmonicElasticityTensor()
Empty virtual Destructor.
virtual std::complex< double > independent_component(const unsigned &i) const
Member function that returns the i-th independent component of the elasticity tensor.
std::complex< double > operator()(const unsigned &i, const unsigned &j, const unsigned &k, const unsigned &l) const
Return the appropriate independent component via the index translation scheme (const version).
void range_check(const unsigned &i, const unsigned &j, const unsigned &k, const unsigned &l) const
Helper range checking function (Note that this only captures over-runs in 3D but errors are likely to...
An isotropic elasticity tensor defined in terms of Young's modulus and Poisson's ratio....
PMLTimeHarmonicIsotropicElasticityTensor(const double &nu, const double &E)
Constructor. Passing in the values of the Poisson's ratio and Young's modulus (interpreted as the rat...
PMLTimeHarmonicIsotropicElasticityTensor(const double &nu)
Constructor. Passing in the value of the Poisson's ratio. Stresses and tractions in the governing equ...
std::complex< double > independent_component(const unsigned &i) const
Overload the independent coefficient function.
double Nu
Poisson's ratio.
double nu() const
Poisson's ratio.
void update_constitutive_parameters(const double &nu, const double &E=1.0)
Update parameters: Specify values of the Poisson's ratio and (optionally) Young's modulus (interprete...
std::complex< double > C[4]
Storage for the independent components of the elasticity tensor.
static const unsigned StaticIndex[21]
Translation scheme between the 21 independent components of the general elasticity tensor and the iso...
void set_lame_coefficients(const double &lambda, const double &mu)
//////////////////////////////////////////////////////////////////// ////////////////////////////////...