16#include <AMReX_REAL.H>
17#include <eigen3/Eigen/Core>
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)
75 const T a = T::Random();
76 if (!(a==a) && verbose)
81 const T b = T::Random();
88 if (!(c==z) && verbose)
103 for (
int iter = 0; iter < 10; iter++)
105 T model = T::Random();
110 while (
F.determinant() < 0.1)
F = Set::Matrix::Random();
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++)
143 T model = T::Random();
147 while (
F.determinant() < 0.1)
F = Set::Matrix::Random();
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++)
187 T model = T::Random();
192 F.determinant() < 0.5 ||
195 F = Set::Matrix::Random();
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);
static int MaterialFrameIndifference(int verbose=0)
virtual void Print(std::ostream &out) const
virtual bool ContainsNan()
virtual void Advance(Set::Scalar, Set::Matrix, Set::Matrix, Set::Scalar)
virtual Set::Scalar W(const Set::Matrix &) const
static int DerivativeTest2(int verbose=0)
virtual Set::Matrix DW(const Set::Matrix &) const
virtual Set::Matrix4< AMREX_SPACEDIM, SYM > DDW(const Set::Matrix &) const
static int ArithmeticTest(int verbose=0)
friend std::ostream & operator<<(std::ostream &out, const Solid &a)
static const KinematicVariable kinvar
static constexpr Set::Sym sym
static int DerivativeTest1(int verbose=0)
static const Set::Scalar Pi
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
void Abort(const char *msg)
AMREX_FORCE_INLINE void Assert(std::string file, std::string func, int line, std::string smt, bool pass, Args const &... args)
void Message(std::string file, std::string func, int line, Args const &... args)