12 #ifndef MODEL_SOLID_H_
13 #define MODEL_SOLID_H_
16 #include <AMReX_REAL.H>
17 #include <eigen3/Eigen/Core>
28 template<Set::Sym SYM>
60 virtual void Print(std::ostream &out)
const
62 out <<
"No print function written for this model.";
69 const T z = T::Zero();
70 if (!(z==z) && verbose)
76 if (!(a==a) && verbose)
88 if (!(c==z) && verbose)
103 for (
int iter = 0; iter < 10; iter++)
114 for (
int i = 0; i < AMREX_SPACEDIM; i++)
115 for (
int j = 0; j < AMREX_SPACEDIM; j++)
119 dw_numeric(i,j) = (model.W(
F+dF) - model.W(
F-dF)) / (2.0 * dx);
121 Set::Scalar relnorm = (dw_numeric-dw_exact).norm()/(dw_numeric.norm());
122 if (relnorm > tol || std::isnan(relnorm) || std::isinf(relnorm))
141 for (
int iter = 0; iter < 10; iter++)
151 for (
int i = 0; i < AMREX_SPACEDIM; i++)
152 for (
int j = 0; j < AMREX_SPACEDIM; j++)
153 for (
int k = 0; k < AMREX_SPACEDIM; k++)
154 for (
int l = 0; l < AMREX_SPACEDIM; l++)
158 ddw_numeric(i,j,k,l) = (model.DW(
F+dF) - model.DW(
F-dF))(i,j) / (2.0 * dx);
161 Set::Scalar relnorm = error.Norm()/ddw_numeric.Norm();
162 if (relnorm > tol || std::isnan(relnorm) || std::isinf(relnorm))
183 Util::Abort(
INFO,
"Attempting to test material frame indifference in a non-finite-kinematics model will fail");
185 for (
int iter = 0; iter < 10; iter++)
192 F.determinant() < 0.5 ||
199 for (
int jter = 0; jter < 10; jter++)
201 #if AMREX_SPACEDIM == 2
206 R(1,0) = -sin(theta);
208 #elif AMREX_SPACEDIM == 3
213 R = Eigen::AngleAxisd(phi2, Eigen::Vector3d::UnitX()) *
214 Eigen::AngleAxisd(Phi, Eigen::Vector3d::UnitZ()) *
215 Eigen::AngleAxisd(phi1, Eigen::Vector3d::UnitX());
222 Set::Scalar error = fabs(W_rotated - W_unrotated) / fabs(W_rotated + W_unrotated + tol);