25 #ifndef MODEL_SOLID_FINITE_CRYSTALPLASTIC_H_
26 #define MODEL_SOLID_FINITE_CRYSTALPLASTIC_H_
60 for (
int i = 0; i < AMREX_SPACEDIM; i++)
61 for (
int J = 0; J < AMREX_SPACEDIM; J++)
62 for (
int k = 0; k < AMREX_SPACEDIM; k++)
63 for (
int L = 0; L < AMREX_SPACEDIM; L++)
66 for (
int Q = 0; Q < AMREX_SPACEDIM; Q++)
67 for (
int R = 0; R < AMREX_SPACEDIM; R++)
68 ret(i,J,k,L) +=
DDW(i,Q,k,R)*Fpinv(J,Q)*Fpinv(L,R);
79 std::array<std::pair<Set::Vector3d,Set::Vector3d>,12> ss =
slipSystems(R);
83 for (
int n = 0; n < 12; n++)
93 L += gammadot * A * N.transpose();
95 gamma[n] += gammadot * dt;
110 Eigen::Matrix<Set::Scalar,12,1>
gamma = Eigen::Matrix<Set::Scalar,12,1>::Zero();
115 Eigen::Matrix<Set::Scalar,12,1>
tau_crss = Eigen::Matrix<Set::Scalar,12,1>::Zero();
124 const std::array<Set::Vector3d,12> n0 =
126 Set::Vector3d::Constant( 1, 1, 1) / sqrt(3.0),
127 Set::Vector3d::Constant( 1, 1, 1) / sqrt(3.0),
128 Set::Vector3d::Constant( 1, 1, 1) / sqrt(3.0),
129 Set::Vector3d::Constant(-1, 1,-1) / sqrt(3.0),
130 Set::Vector3d::Constant(-1, 1,-1) / sqrt(3.0),
131 Set::Vector3d::Constant(-1, 1,-1) / sqrt(3.0),
132 Set::Vector3d::Constant( 1,-1,-1) / sqrt(3.0),
133 Set::Vector3d::Constant( 1,-1,-1) / sqrt(3.0),
134 Set::Vector3d::Constant( 1,-1,-1) / sqrt(3.0),
135 Set::Vector3d::Constant(-1,-1, 1) / sqrt(3.0),
136 Set::Vector3d::Constant(-1,-1, 1) / sqrt(3.0),
137 Set::Vector3d::Constant(-1,-1, 1) / sqrt(3.0)
139 const std::array<Set::Vector3d,12> a0 =
141 Set::Vector3d::Constant( 1, 0,-1) / sqrt(2.0),
142 Set::Vector3d::Constant( 0,-1, 1) / sqrt(2.0),
143 Set::Vector3d::Constant( 1,-1, 0) / sqrt(2.0),
144 Set::Vector3d::Constant( 1, 0,-1) / sqrt(2.0),
145 Set::Vector3d::Constant( 1, 1, 0) / sqrt(2.0),
146 Set::Vector3d::Constant( 0, 1, 1) / sqrt(2.0),
147 Set::Vector3d::Constant( 1, 1, 0) / sqrt(2.0),
148 Set::Vector3d::Constant( 0,-1, 1) / sqrt(2.0),
149 Set::Vector3d::Constant( 1, 0, 1) / sqrt(2.0),
150 Set::Vector3d::Constant( 0, 1, 1) / sqrt(2.0),
151 Set::Vector3d::Constant( 1, 0, 1) / sqrt(2.0),
152 Set::Vector3d::Constant( 1,-1, 0) / sqrt(2.0)
156 static std::array<std::pair<Set::Vector3d,Set::Vector3d>,12> ret;
157 for (
int n = 0 ; n < 12 ; n ++)
159 ret[n].first = R*a0[n];
160 ret[n].second = R*n0[n];
173 ret.
Fp = Set::Matrix3d::Zero();
174 ret.
gamma = Eigen::Matrix<Set::Scalar,12,1>::Zero();
176 ret.
tau_crss = Eigen::Matrix<Set::Scalar,12,1>::Zero();
190 ret.
q = Set::Quaternion::UnitRandom();
218 #define OP_CLASS CrystalPlastic
219 #define OP_VARS X(C11) X(C12) X(C44) X(q) X(Fp) X(gamma) X(m_rate_inv) X(tau_crss) X(gammadot0) X(tstart)
242 if (i==0)
return name +
"gamma1";
243 if (i==1)
return name +
"gamma2";
244 if (i==2)
return name +
"gamma3";
245 if (i==3)
return name +
"gamma4";
246 if (i==4)
return name +
"gamma5";
247 if (i==5)
return name +
"gamma6";
248 if (i==6)
return name +
"gamma7";
249 if (i==7)
return name +
"gamma8";
250 if (i==8)
return name +
"gamma9";
251 if (i==9)
return name +
"gamma10";
252 if (i==10)
return name +
"gamma11";
253 if (i==11)
return name +
"gamma12";
260 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
262 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
265 amrex::Array4<const Model::Solid::Finite::CrystalPlastic>
const & src = ((*this)[a_lev])->array(mfi);
266 amrex::Array4<Set::Scalar>
const & dst = a_dst.array(mfi);
267 for (
int n = 0; n < 12; n++)
269 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
270 dst(i,j,k,a_dstcomp + n) = src(i,j,k).gamma(n);