23 Cuboid(amrex::Vector<amrex::Geometry>& _geom) :
IC(_geom) {}
37 bool cellcentered = (a_field[0]->boxArray().ixType() == amrex::IndexType(amrex::IntVect::TheCellVector()));
39 for (amrex::MFIter mfi(*a_field[lev], amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
42 amrex::IndexType type = a_field[lev]->ixType();
43 if (type == amrex::IndexType::TheCellType()) bx = mfi.growntilebox();
44 else if (type == amrex::IndexType::TheNodeType()) bx = mfi.grownnodaltilebox();
47 amrex::Array4<Set::Scalar>
const& field = a_field[lev]->array(mfi);
48 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
53 AMREX_D_TERM(x = geom[lev].ProbLo()[0] + ((amrex::Real)(i)+0.5) * geom[lev].CellSize()[0];,
54 y = geom[lev].ProbLo()[1] + ((amrex::Real)(j)+0.5) * geom[lev].CellSize()[1];,
55 z = geom[lev].ProbLo()[2] + ((amrex::Real)(k)+0.5) * geom[lev].CellSize()[2];);
59 AMREX_D_TERM(x = geom[lev].ProbLo()[0] + (amrex::Real)(i)*geom[lev].CellSize()[0];,
60 y = geom[lev].ProbLo()[1] + (amrex::Real)(j)*geom[lev].CellSize()[1];,
61 z = geom[lev].ProbLo()[2] + (amrex::Real)(k)*geom[lev].CellSize()[2];);
66 Set::Scalar xdir = std::abs((x - center[0])) - (length[0] / 2.0);
67 Set::Scalar ydir = std::abs((y - center[1])) - (length[1] / 2.0);
69 Set::Scalar zdir = std::abs((z - center[2])) - (length[2] / 2.0);
70 field(i, j, k, 0) = 0.5 - 0.5 * std::erf((xdir + ydir + zdir) / eps);
71 if (field.nComp() > 1) field(i, j, k, 1) = 1. - (0.5 - 0.5 * std::erf((xdir + ydir + zdir) / eps));
72 #elif AMREX_SPACEDIM==2
73 field(i, j, k, 0) = 0.5 - 0.5 * std::erf((xdir + ydir) / eps);
74 if (field.nComp() > 1) field(i, j, k, 1) = 1. - (0.5 - 0.5 * std::erf((xdir + ydir) / eps));