33 #ifndef MODEL_SOLID_AFFINE_J2_H_
34 #define MODEL_SOLID_AFFINE_J2_H_
57 Set::Matrix sig_dev = sigma - sigma.trace() * Set::Matrix::Identity() / 3.0;
60 Set::Scalar J2 = sqrt(1.5 * (sig_dev.transpose() * sig_dev).trace());
63 F0 +=
ddw.Inverse() * dsigp;
67 Set::Matrix eps_dev = eps - eps.trace() * Set::Matrix::Identity() / (double)AMREX_SPACEDIM;
69 Set::Matrix zeta_trial = sig_dev + 2.0*m_mu*eps_dev;
71 if (f_trial <= 0.0)
return;
75 alpha =
alpha + sqrt(1.0 - 1.0/(
double)AMREX_SPACEDIM)*dGamma;
92 ret.
F0 = Set::Matrix::Zero();
112 #define OP_VARS X(ddw) X(F0) X(sigma0) X(hardening) X(ratecoeff)
125 return AMREX_SPACEDIM*AMREX_SPACEDIM;
132 #if AMREX_SPACEDIM==2
133 if (i==0)
return name +
".epsp_xx";
134 if (i==1)
return name +
".epsp_xy";
135 if (i==2)
return name +
".epsp_yx";
136 if (i==3)
return name +
".epsp_yy";
138 #if AMREX_SPACEDIM==3
139 if (i==0)
return name +
".epsp_xx";
140 if (i==1)
return name +
".epsp_xy";
141 if (i==2)
return name +
".epsp_xz";
142 if (i==3)
return name +
".epsp_yx";
143 if (i==4)
return name +
".epsp_yy";
144 if (i==5)
return name +
".epsp_yz";
145 if (i==6)
return name +
".epsp_zx";
146 if (i==7)
return name +
".epsp_zy";
147 if (i==8)
return name +
".epsp_zz";
156 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
158 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
161 amrex::Array4<const Model::Solid::Affine::J2>
const & src = ((*this)[a_lev])->array(mfi);
162 amrex::Array4<Set::Scalar>
const & dst = a_dst.array(mfi);
163 for (
int n = 0; n < AMREX_SPACEDIM*AMREX_SPACEDIM; n++)
165 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
166 dst(i,j,k,a_dstcomp + n) = src(i,j,k).F0(n/AMREX_SPACEDIM,n%AMREX_SPACEDIM);