21 Laminate(amrex::Vector<amrex::Geometry>& _geom):
IC(_geom) {}
29 for (amrex::MFIter mfi(*a_field[lev], amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
31 amrex::Box bx = mfi.tilebox();
32 bx.grow(a_field[lev]->nGrow());
33 amrex::IndexType type = a_field[lev]->ixType();
35 amrex::Array4<Set::Scalar>
const& field = a_field[lev]->array(mfi);
36 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
49 field(i, j, k, m + 1) = 0.5 - 0.5 * std::erf(
t /
eps[m]);
50 if (field(i, j, k, m + 1) < 0.) field(i, j, k, m + 1) = 0.;
51 if (field(i, j, k, m + 1) > 1.) field(i, j, k, m + 1) = 1.;
52 value += field(i, j, k, m + 1);
54 field(i, j, k, 0) = 1.0 - value;
55 if (field(i, j, k, 0) < 0.) field(i, j, k, 0) = 0.;
56 if (field(i, j, k, 0) > 1.) field(i, j, k, 0) = 1.;
61 field(i, j, k, 0) = 0.5 - 0.5 * std::erf(
t /
eps[0]);
62 if (
invert) field(i, j, k, 0) = 1.0 - field(i, j, k, 0);
66 a_field[lev]->FillBoundary();
74 amrex::Vector<Set::Scalar>
eps;
87 Util::Abort(
INFO,
"Number of inclusions must be at least 1. Aborting.");
89 amrex::Vector<Set::Scalar> a_center;
96 for (
int i = 0; i < a_center.size(); i += AMREX_SPACEDIM)
100 amrex::Vector<Set::Scalar> a_thickness;
107 if (a_thickness.size() == 1)
109 if (a_thickness[0] <= 0.0)
Util::Abort(
INFO,
"Invalid value of inclusion thickness");
117 if (a_thickness[i] <= 0.0)
Util::Abort(
INFO,
"Invalid value of inclusion ", i + 1,
" thickness");
118 value.
thickness.push_back(a_thickness[i]);
122 amrex::Vector<Set::Scalar> a_orientation;
126 if (a_orientation.size() != value.
number_of_inclusions * AMREX_SPACEDIM && a_orientation.size() != AMREX_SPACEDIM)
129 if (a_orientation.size() == AMREX_SPACEDIM)
134 for (
int i = 0; i < a_orientation.size(); i += AMREX_SPACEDIM)
146 value.
normal[i] = Set::Vector::Zero();
149 AMREX_D_TERM(value.
normal[i](0) = 1.;, value.
normal[i](1) = 1.;, value.
normal[i](2) = 1.;);
155 AMREX_D_TERM(value.
normal[i](0) = 1.;, value.
normal[i](1) = 1.;, value.
normal[i](2) = 1.;);
161 amrex::Vector<Set::Scalar> a_eps;
165 if (a_eps.size() < 1)
167 value.
eps.push_back(1.e-5);
168 if (a_eps.size() == 1)
176 value.
eps.push_back(a_eps[0]);
181 value.
eps.push_back(a_eps[i]);
184 std::string mollifier;
186 if (mollifier ==
"Dirac" || mollifier ==
"dirac")
187 value.
moll = Mollifier::Dirac;