16#include <AMReX_REAL.H>
17#include <eigen3/Eigen/Core>
21#include "Set/Matrix4.H"
68 void Print(std::ostream &out)
const
70 out <<
"No print function written for this model.";
78 if (!std::is_trivially_copyable<T>::value)
82 if (std::has_virtual_destructor<T>::value)
86 if (std::is_polymorphic<T>::value)
90 if (!std::is_standard_layout<T>::value)
101 const T z = T::Zero();
102 if (!(z==z) && verbose)
107 const T a = T::Random();
108 if (!(a==a) && verbose)
118 if (!(c==z) && verbose)
133 for (
int iter = 0; iter < 10; iter++)
135 T model = T::Random();
140 while (
F.determinant() < 0.1)
F = Set::Matrix::Random();
144 for (
int i = 0; i < AMREX_SPACEDIM; i++)
145 for (
int j = 0; j < AMREX_SPACEDIM; j++)
149 dw_numeric(i,j) = (model.W(
F+dF) - model.W(
F-dF)) / (2.0 * dx);
151 Set::Scalar relnorm = (dw_numeric-dw_exact).norm()/(dw_numeric.norm());
152 if (relnorm > tol || std::isnan(relnorm) || std::isinf(relnorm))
171 for (
int iter = 0; iter < 10; iter++)
173 T model = T::Random();
177 while (
F.determinant() < 0.1)
F = Set::Matrix::Random();
181 for (
int i = 0; i < AMREX_SPACEDIM; i++)
182 for (
int j = 0; j < AMREX_SPACEDIM; j++)
183 for (
int k = 0; k < AMREX_SPACEDIM; k++)
184 for (
int l = 0; l < AMREX_SPACEDIM; l++)
188 ddw_numeric(i,j,k,l) = (model.DW(
F+dF) - model.DW(
F-dF))(i,j) / (2.0 * dx);
191 Set::Scalar relnorm = error.Norm()/ddw_numeric.Norm();
192 if (relnorm > tol || std::isnan(relnorm) || std::isinf(relnorm))
213 Util::Abort(
INFO,
"Attempting to test material frame indifference in a non-finite-kinematics model will fail");
215 for (
int iter = 0; iter < 10; iter++)
217 T model = T::Random();
222 F.determinant() < 0.5 ||
225 F = Set::Matrix::Random();
229 for (
int jter = 0; jter < 10; jter++)
231 #if AMREX_SPACEDIM == 2
236 R(1,0) = -sin(theta);
238 #elif AMREX_SPACEDIM == 3
243 R = Eigen::AngleAxisd(phi2, Eigen::Vector3d::UnitX()) *
244 Eigen::AngleAxisd(Phi, Eigen::Vector3d::UnitZ()) *
245 Eigen::AngleAxisd(phi1, Eigen::Vector3d::UnitX());
252 Set::Scalar error = fabs(W_rotated - W_unrotated) / fabs(W_rotated + W_unrotated + tol);
void Advance(Set::Scalar, Set::Matrix, Set::Matrix, Set::Scalar)
static int MaterialFrameIndifference(int verbose=0)
Set::Scalar W(const Set::Matrix &) const
static int PODTest(int verbose=0)
static int DerivativeTest2(int verbose=0)
Set::Matrix4< AMREX_SPACEDIM, SYM > DDW(const Set::Matrix &) const
static int ArithmeticTest(int verbose=0)
Set::Matrix DW(const Set::Matrix &) const
friend std::ostream & operator<<(std::ostream &out, const Solid &a)
void Print(std::ostream &out) const
static const KinematicVariable kinvar
static constexpr Set::Sym sym
static int DerivativeTest1(int verbose=0)
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
void SubWarning(std::string testname)
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)