1#ifndef MODEL_SOLID_PLASTIC_J2_H_
2#define MODEL_SOLID_PLASTIC_J2_H_
6#include <eigen3/Eigen/Core>
39 Set::Scalar SQ2O3 = sqrt(1.0 - 1.0/((
double)AMREX_SPACEDIM));
42 Set::Matrix sigdev = sig - (1.0/((double)AMREX_SPACEDIM))*sig.trace()*Set::Matrix::Identity();
45 Set::Matrix epsdev = del_eps - (1.0/((double)AMREX_SPACEDIM))*del_eps.trace()*Set::Matrix::Identity();
49 if( f_trial <= 0.0)
return;
55 beta += SQ2O3*dH*n_new;
57 alpha += SQ2O3*dGamma;
61 if(std::isnan(
F0.norm()))
80 ret.
Define(0.,0.,Set::Matrix::Zero());
89 ret.
beta = Set::Matrix::Random();
98 Set::Scalar yield = 1.0, hardening = 1.0, theta_tmp = 1.0;
100 pp.query(
"yield", yield);
102 pp.query(
"hardening", hardening);
104 pp.query(
"theta", theta_tmp);
108 #define OP_CLASS J2Plastic
109 #define OP_VARS X(ddw) X(F0) X(beta) X(theta) X(yield_strength) X(hardening_modulus) X(strain_prev) X(alpha)
128 if (
i==0)
return name +
".epsp_xx";
129 if (
i==1)
return name +
".epsp_xy";
130 if (
i==2)
return name +
AMREX_D_PICK(
"",
".epsp_yx",
".epsp_xz");
131 if (
i==3)
return name +
AMREX_D_PICK(
"",
".epsp_yy",
".epsp_yx");
132 if (
i==4)
return name +
".epsp_yy";
133 if (
i==5)
return name +
".epsp_yz";
134 if (
i==6)
return name +
".epsp_zx";
135 if (
i==7)
return name +
".epsp_zy";
136 if (
i==8)
return name +
".epsp_zz";
143 for (amrex::MFIter
mfi(
a_dst, amrex::TilingIfNotGPU());
mfi.isValid(); ++
mfi)
145 const amrex::Box&
bx =
mfi.growntilebox(amrex::IntVect(
a_nghost));
148 amrex::Array4<const Model::Solid::Affine::J2Plastic>
const &
src = ((*this)[
a_lev])->
array(
mfi);
149 amrex::Array4<Set::Scalar>
const &
dst =
a_dst.array(
mfi);
Set::Matrix4< AMREX_SPACEDIM, SYM > ddw
static void Parse(Isotropic &value, IO::ParmParse &pp)
void Define(Set::Scalar a_mu, Set::Scalar a_lambda, Set::Matrix a_F0)
Set::Matrix DW(const Set::Matrix &F) const override
Set::Scalar YieldSurface()
Set::Scalar PlasticEnergy()
void Advance(Set::Scalar, Set::Matrix eps, Set::Matrix) override
static void Parse(J2Plastic &value, IO::ParmParse &pp)
static J2Plastic Random()
Set::Scalar hardening_modulus
void DefineSlipSystem(Set::Scalar a_yield, Set::Scalar a_hardening, Set::Scalar a_theta)
Set::Scalar yield_strength
std::string Name(int) const
void Copy(int, amrex::MultiFab &, int, int) const
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, AMREX_SPACEDIM > Matrix
void Abort(const char *msg)
void Message(std::string file, std::string func, int line, Args const &... args)