24#ifndef SET_MATRIX4_ISOTROPIC_H
25#define SET_MATRIX4_ISOTROPIC_H
27#include "AMReX_Config.H"
57 if (
i==
j &&
k==
l)
ret += lambda;
73 os <<
"lambda = " << lambda <<
" mu = " << mu;
85 return mu * ( 3.0*lambda + 2.0*mu ) / (lambda + mu);
89 return 0.5 * lambda / (lambda + mu);
104 inv.lambda = lambda / (2*mu*(3*lambda + 2*mu));
127 return std::sqrt(lambda*lambda + mu*mu);
132 if (std::isnan(lambda))
return true;
133 if (std::isnan(mu))
return true;
142 #if AMREX_SPACEDIM == 2
143 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1);
144 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1);
145 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
147 #elif AMREX_SPACEDIM == 3
148 ret(0,0) = (a.lambda + 2.*a.mu) *
b(0,0) + a.lambda *
b(1,1) + a.lambda *
b(2,2);
149 ret(1,1) = a.lambda *
b(0,0) + (a.lambda + 2.*a.mu)*
b(1,1) + a.lambda *
b(2,2);
150 ret(2,2) = a.lambda *
b(0,0) + a.lambda *
b(1,1) + (a.lambda + 2.*a.mu)*
b(2,2);
151 ret(1,2) = a.mu*(
b(1,2) +
b(2,1));
ret(2,1) =
ret(1,2);
152 ret(2,0) = a.mu*(
b(2,0) +
b(0,2));
ret(0,2) =
ret(2,0);
153 ret(0,1) = a.mu*(
b(0,1) +
b(1,0));
ret(1,0) =
ret(0,1);
180 ret.lambda = a.lambda *
b;
188 ret.lambda = a.lambda /
b;
200 if (a.mu !=
b.mu)
return false;
201 if (a.lambda !=
b.lambda)
return false;
208 ret.mu = a.mu +
b.mu;
209 ret.lambda = a.lambda +
b.lambda;
219 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()
static Matrix4< AMREX_SPACEDIM, Sym::Isotropic > Random()
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)