20 #ifndef __mast_isotropic_material_stiffness_h__ 21 #define __mast_isotropic_material_stiffness_h__ 29 namespace Elasticity {
31 template <
typename ScalarType>
35 template <
typename ScalarType>
38 ScalarType dE, ScalarType dnu)
39 {
return dE/2./(1.+nu) - E/2./pow(1.+nu,2) * dnu;}
42 template <
typename ScalarType, u
int_t Dim,
typename ModulusType,
typename PoissonType,
typename ContextType>
45 template <
typename ScalarType,
typename ModulusType,
typename PoissonType,
typename ContextType>
52 using value_t =
typename Eigen::Matrix<scalar_t, 3, 3>;
67 inline const ModulusType&
get_E()
const {
return *_E;}
69 inline const PoissonType&
get_nu()
const {
return *_nu;}
73 return shear_modulus<scalar_t>(_E->value(c), _nu->value(c));
76 template <
typename ScalarFieldType>
79 return shear_modulus_derivative<scalar_t>(_E->value(c),
82 _nu->derivative(c, f));
87 Assert0(_E && _nu,
"Material values not provided");
96 m(0, 0) = m(1, 1) = E/(1.-nu*nu);
97 m(0, 1) = m(1, 0) = E*nu/(1.-nu*nu);
102 template <
typename ScalarFieldType>
104 const ScalarFieldType& f,
107 Assert0(_E && _nu,
"Material values not provided");
111 dEdp = _E->derivative(c, f);
115 dnudp = _nu->derivative(c, f);
120 1./(1.-nu*nu) * dEdp + 2. * E/pow(1.-nu*nu,2) * nu * dnudp;
123 nu/(1.-nu*nu) * dEdp + (E/(1.-nu*nu) + 2. * E*nu/pow(1.-nu*nu,2) * nu) * dnudp;
130 const ModulusType*
_E;
136 template <
typename ScalarType,
typename ModulusType,
typename PoissonType,
typename ContextType>
143 using value_t =
typename Eigen::Matrix<scalar_t, 6, 6>;
159 Assert0(_E && _nu,
"Material values not provided");
168 m(0, 0) = m(1, 1) = m(2, 2) = E*(1.-nu)/(1.-nu-2.*nu*nu);
169 m(0, 1) = m(0, 2) = m(1, 0) = m(1, 2) = m(2, 0) = m(2, 1) = E*nu/(1.-nu-2.*nu*nu);
174 template <
typename ScalarFieldType>
176 const ScalarFieldType& f,
179 Assert0(_E && _nu,
"Material values not provided");
183 dEdp = _E->derivative(c, f);
187 dnudp = _nu->derivative(c, f);
191 m(0, 0) = m(1, 1) = m(2, 2) =
192 (1.-nu)/(1.-nu-2.*nu*nu) * dEdp +
193 (-E/(1.-nu-2.*nu*nu) + E*(1.-nu)/pow(1.-nu-2.*nu*nu,2)*(1.+4.*nu)) * dnudp ;
195 m(0, 1) = m(0, 2) = m(1, 0) = m(1, 2) = m(2, 0) = m(2, 1) =
196 nu/(1.-nu-2.*nu*nu) * dEdp +
197 (E/(1.-nu-2.*nu*nu) + E*nu/pow(1.-nu-2.*nu*nu,2)*(1.+4.*nu)) * dnudp;
204 const ModulusType*
_E;
214 #endif // __mast_isotropic_material_stiffness_h__ typename PoissonType::scalar_t nu_scalar_t
typename PoissonType::scalar_t nu_scalar_t
void derivative(ContextType &c, const ScalarFieldType &f, value_t &m) const
const ModulusType & get_E() const
scalar_t G(ContextType &c) const
IsotropicMaterialStiffness()
ScalarType shear_modulus(ScalarType E, ScalarType nu)
void set_modulus_and_nu(const ModulusType &E, const PoissonType &nu)
typename ModulusType::scalar_t E_scalar_t
virtual ~IsotropicMaterialStiffness()
const PoissonType & get_nu() const
IsotropicMaterialStiffness()
virtual ~IsotropicMaterialStiffness()
typename Eigen::Matrix< scalar_t, 3, 3 > value_t
#define Assert0(cond, msg)
void value(const ContextType &c, value_t &m) const
void set_modulus_and_nu(const ModulusType &E, const PoissonType &nu)
typename MAST::DeducedScalarType< typename MAST::DeducedScalarType< E_scalar_t, nu_scalar_t >::type, ScalarType >::type scalar_t
scalar_t G_derivative(ContextType &c, const ScalarFieldType &f) const
void derivative(const ContextType &c, const ScalarFieldType &f, value_t &m) const
typename MAST::DeducedScalarType< typename MAST::DeducedScalarType< E_scalar_t, nu_scalar_t >::type, ScalarType >::type scalar_t
typename Eigen::Matrix< scalar_t, 6, 6 > value_t
typename ModulusType::scalar_t E_scalar_t
void value(ContextType &c, value_t &m) const
ScalarType shear_modulus_derivative(ScalarType E, ScalarType nu, ScalarType dE, ScalarType dnu)