1 #ifndef MODEL_SOLID_FINITE_PSEUDOAFFINE_CUBIC_H_
2 #define MODEL_SOLID_FINITE_PSEUDOAFFINE_CUBIC_H_
13 namespace PseudoAffine
37 for (
int i = 0; i < AMREX_SPACEDIM; i++)
38 for (
int J = 0; J < AMREX_SPACEDIM; J++)
39 for (
int k = 0; k < AMREX_SPACEDIM; k++)
40 for (
int L = 0; L < AMREX_SPACEDIM; L++)
43 for (
int Q = 0; Q < AMREX_SPACEDIM; Q++)
44 for (
int R = 0; R < AMREX_SPACEDIM; R++)
45 ret(i,J,k,L) +=
DDW(i,Q,k,R)*F0inv(J,Q)*F0inv(L,R);
57 ret.
F0 = Set::Matrix::Zero();
68 static Cubic Combine(
const std::vector<Cubic> &models,
const std::vector<Set::Scalar> &eta,
int order)
74 for (
unsigned int n = 0 ; n < models.size(); n++) etasum += eta[n];
75 for (
unsigned int n = 0 ; n < models.size(); n++)
77 ret.
C11 += models[n].C11 * (eta[n] / etasum);
78 ret.
C12 += models[n].C12 * (eta[n] / etasum);
79 ret.
C44 += models[n].C44 * (eta[n] / etasum);
80 ret.
q += models[n].q * (eta[n] / etasum);
81 ret.
F0 += models[n].F0 * (eta[n] / etasum);
88 for (
unsigned int n = 0 ; n < models.size(); n++) etasum += eta[n]*eta[n];
89 for (
unsigned int n = 0 ; n < models.size(); n++)
91 ret.
C11 += models[n].C11 * (eta[n]*eta[n] / etasum);
92 ret.
C12 += models[n].C12 * (eta[n]*eta[n] / etasum);
93 ret.
C44 += models[n].C44 * (eta[n]*eta[n] / etasum);
94 ret.
q += models[n].q * (eta[n]*eta[n] / etasum);
95 ret.
F0 += models[n].F0 * (eta[n]*eta[n] / etasum);
122 value.
F0 = eps0 + Set::Matrix::Identity();
126 value.
F0 = Set::Matrix::Identity();
131 #define OP_CLASS Cubic
132 #define OP_VARS X(C11) X(C12) X(C44) X(q) X(F0)
154 if (i == 0)
return name +
"_F0xx";
155 if (i == 1)
return name +
"_F0xy";
156 if (i == 2)
return name +
"_F0yx";
157 if (i == 3)
return name +
"_F0yy";
165 for (amrex::MFIter mfi(a_dst, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
167 const amrex::Box& bx = mfi.growntilebox(amrex::IntVect(a_nghost));
170 amrex::Array4<const Model::Solid::Finite::PseudoAffine::Cubic>
const& src = ((*this)[a_lev])->array(mfi);
171 amrex::Array4<Set::Scalar>
const& dst = a_dst.array(mfi);
172 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
174 dst(i, j, k, a_dstcomp + 0) = src(i, j, k).F0(0, 0);
175 dst(i, j, k, a_dstcomp + 1) = src(i, j, k).F0(0, 1);
176 dst(i, j, k, a_dstcomp + 2) = src(i, j, k).F0(1, 0);
177 dst(i, j, k, a_dstcomp + 3) = src(i, j, k).F0(1, 1);