24#ifndef SET_MATRIX4_ISOTROPIC_H
25#define SET_MATRIX4_ISOTROPIC_H
53 if (
i==
j &&
k==
l)
ret += lambda;
63 os <<
"lambda = " << lambda <<
" mu = " << mu;
75 return mu * ( 3.0*lambda + 2.0*mu ) / (lambda + mu);
79 return 0.5 * lambda / (lambda + mu);
94 inv.lambda = lambda / (2*mu*(3*lambda + 2*mu));
117 return std::sqrt(lambda*lambda + mu*mu);
122 if (std::isnan(lambda))
return true;
123 if (std::isnan(mu))
return true;
132 #if AMREX_SPACEDIM == 2
133 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1);
134 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1);
135 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
137 #elif AMREX_SPACEDIM == 3
138 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1) + a.lambda *
b(2,2);
139 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1) + a.lambda *
b(2,2);
140 ret(2,2) = a.lambda *
b(0,0) + a.lambda *
b(1,1) + (a.lambda + 2.*a.mu)*
b(2,2);
141 ret(1,2) = a.mu*(
b(1,2) +
b(2,1));
ret(2,1) =
ret(1,2);
142 ret(2,0) = a.mu*(
b(2,0) +
b(0,2));
ret(0,2) =
ret(2,0);
143 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
170 ret.lambda = a.lambda *
b;
178 ret.lambda = a.lambda /
b;
190 if (a.mu !=
b.mu)
return false;
191 if (a.lambda !=
b.lambda)
return false;
198 ret.mu = a.mu +
b.mu;
199 ret.lambda = a.lambda +
b.lambda;
209 ret.lambda -=
b.lambda;
Matrix< _Scalar, _Rows, _Cols > & operator*=(const amrex::Vector< amrex::Real > &x)
AMREX_FORCE_INLINE void operator+=(const OP_CLASS &rhs)
AMREX_GPU_HOST_DEVICE Matrix4()
Set::Scalar Lambda() const
AMREX_GPU_HOST_DEVICE Matrix4(Set::Scalar a_lambda, Set::Scalar a_mu)
void Print(std::ostream &os)
Matrix4< AMREX_SPACEDIM, Sym::Isotropic > Inverse() const
bool contains_nan() const
Set::Scalar Youngs() const
static Matrix4< AMREX_SPACEDIM, Sym::Isotropic > Zero()
A collection of data types and symmetry-reduced data structures.
AMREX_FORCE_INLINE Quaternion operator-(const Quaternion a, const Quaternion b)
AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE Matrix4< AMREX_SPACEDIM, Sym::Diagonal > operator/(const Matrix4< AMREX_SPACEDIM, Sym::Diagonal > &a, const Set::Scalar &b)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
AMREX_FORCE_INLINE bool operator==(const Quaternion a, const Quaternion b)
AMREX_FORCE_INLINE Quaternion operator+(const Quaternion a, const Quaternion b)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
AMREX_FORCE_INLINE Quaternion operator*(const Set::Scalar alpha, const Quaternion b)