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;
86 inv.lambda = lambda / (2*mu*(3*lambda + 2*mu));
109 return std::sqrt(lambda*lambda + mu*mu);
114 if (std::isnan(lambda))
return true;
115 if (std::isnan(mu))
return true;
124 #if AMREX_SPACEDIM == 2
125 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1);
126 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1);
127 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
129 #elif AMREX_SPACEDIM == 3
130 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1) + a.lambda *
b(2,2);
131 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1) + a.lambda *
b(2,2);
132 ret(2,2) = a.lambda *
b(0,0) + a.lambda *
b(1,1) + (a.lambda + 2.*a.mu)*
b(2,2);
133 ret(1,2) = a.mu*(
b(1,2) +
b(2,1));
ret(2,1) =
ret(1,2);
134 ret(2,0) = a.mu*(
b(2,0) +
b(0,2));
ret(0,2) =
ret(2,0);
135 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
162 ret.lambda = a.lambda *
b;
170 ret.lambda = a.lambda /
b;
182 if (a.mu !=
b.mu)
return false;
183 if (a.lambda !=
b.lambda)
return false;
190 ret.mu = a.mu +
b.mu;
191 ret.lambda = a.lambda +
b.lambda;
201 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
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)