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();
86 amrex::Vector<Set::Scalar> a_center;
90 amrex::Vector<Set::Scalar> a_thickness;
94 amrex::Vector<Set::Scalar> a_orientation;
98 amrex::Vector<Set::Scalar> a_eps;
102 std::string mollifier;
118 Util::Abort(
INFO,
"Number of inclusions must be at least 1. Aborting.");
123 for (
int i = 0; i < a_center.size(); i += AMREX_SPACEDIM)
124 value.
center.push_back(
Set::Vector(AMREX_D_DECL(a_center[i], a_center[i + 1], a_center[i + 2])));
131 if (a_thickness.size() == 1)
133 if (a_thickness[0] <= 0.0)
Util::Abort(
INFO,
"Invalid value of inclusion thickness");
141 if (a_thickness[i] <= 0.0)
Util::Abort(
INFO,
"Invalid value of inclusion ", i + 1,
" thickness");
142 value.
thickness.push_back(a_thickness[i]);
147 if (a_orientation.size() != value.
number_of_inclusions * AMREX_SPACEDIM && a_orientation.size() != AMREX_SPACEDIM)
150 if (a_orientation.size() == AMREX_SPACEDIM)
152 value.
orientation.push_back(
Set::Vector(AMREX_D_DECL(a_orientation[0], a_orientation[1], a_orientation[2])));
155 for (
int i = 0; i < a_orientation.size(); i += AMREX_SPACEDIM)
156 value.
orientation.push_back(
Set::Vector(AMREX_D_DECL(a_orientation[i], a_orientation[i + 1], a_orientation[i + 2])));
167 value.
normal[i] = Set::Vector::Zero();
170 AMREX_D_TERM(value.
normal[i](0) = 1.;, value.
normal[i](1) = 1.;, value.
normal[i](2) = 1.;);
176 AMREX_D_TERM(value.
normal[i](0) = 1.;, value.
normal[i](1) = 1.;, value.
normal[i](2) = 1.;);
183 if (a_eps.size() < 1)
185 value.
eps.push_back(1.e-5);
186 if (a_eps.size() == 1)
194 value.
eps.push_back(a_eps[0]);
199 value.
eps.push_back(a_eps[i]);