18 #ifndef IC_PERTURBEDINTERFACE_H_
19 #define IC_PERTURBEDINTERFACE_H_
30 static constexpr
const char*
name =
"perturbedinterface";
44 L2 =
geom[lev].ProbHi()[1] -
geom[lev].ProbLo()[1],
45 L3 =
geom[lev].ProbHi()[2] -
geom[lev].ProbLo()[2]);
47 for (amrex::MFIter mfi(*a_field[lev],
true); mfi.isValid(); ++mfi)
49 amrex::Box bx = mfi.tilebox();
50 bx.grow(a_field[lev]->nGrow());
51 amrex::Array4<Set::Scalar>
const& field = a_field[lev]->array(mfi);
52 amrex::IndexType type = a_field[lev]->ixType();
54 amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(
int i,
int j,
int k) {
59 if (type == amrex::IndexType::TheNodeType())
61 AMREX_D_TERM(x(0) =
geom[lev].ProbLo()[0] + ((amrex::Real)(i)) *
geom[lev].CellSize()[0];,
62 x(1) =
geom[lev].ProbLo()[1] + ((amrex::Real)(j)) *
geom[lev].CellSize()[1];,
63 x(2) =
geom[lev].ProbLo()[2] + ((amrex::Real)(k)) *
geom[lev].CellSize()[2];);
65 else if (type == amrex::IndexType::TheCellType())
67 AMREX_D_TERM(x(0) =
geom[lev].ProbLo()[0] + ((amrex::Real)(i) + 0.5) *
geom[lev].CellSize()[0];,
68 x(1) =
geom[lev].ProbLo()[1] + ((amrex::Real)(j) + 0.5) *
geom[lev].CellSize()[1];,
69 x(2) =
geom[lev].ProbLo()[2] + ((amrex::Real)(k) + 0.5) *
geom[lev].CellSize()[2];);
73 #if AMREX_SPACEDIM == 2
76 if (
normal==Direction::Y) {s1 = x(0); l1 = L1;}
81 #elif AMREX_SPACEDIM == 3
84 if (
normal==Direction::Y) {s1 = x(2); s2 = x(0); l1 = L3; l2 = L1;}
85 if (
normal==Direction::Z) {s1 = x(0); s2 = x(0); l1 = L1; l2 = L2;}
94 if (
mol == Mollifier::Dirac)
120 field(i,j,k,1-
reverse) = 1. - value;
122 if (field(i,j,k,0) < 0.0) field(i,j,k,
reverse) = 0.0;
123 if (field(i,j,k,0) > 1.0) field(i,j,k,
reverse) = 1.0;
124 if (field(i,j,k,1) < 0.0) field(i,j,k,1-
reverse) = 0.0;
125 if (field(i,j,k,1) > 1.0) field(i,j,k,1-
reverse) = 1.0;
146 std::vector<std::string> wave_numbers_str;
148 for (
unsigned int i = 0; i<wave_numbers_str.size(); ++i)
155 std::string normal_str;
158 if (normal_str ==
"y") value.
normal = Direction::Y;
159 if (normal_str ==
"z") value.
normal = Direction::Z;
160 std::string offset_str;
169 std::string mollifier =
"dirac";
172 if(mollifier ==
"dirac")
174 value.
mol = Mollifier::Dirac;