Alamo
TabulatedInterface.H
Go to the documentation of this file.
1 #ifndef IC_TABULATEDINTERFACE_H_
2 #define IC_TABULATEDINTERFACE_H_
3 
4 #include "IO/ParmParse.H"
5 #include "IC/IC.H"
6 #include "Util/Util.H"
8 
9 /// \class TabulatedInterface
10 /// \brief Initialize a perturbed interface using a linear interpolation
11 ///
12 namespace IC
13 {
14 class TabulatedInterface : public IC
15 {
16 public:
18  TabulatedInterface (amrex::Vector<amrex::Geometry> &_geom) :
19  IC(_geom) {}
20  TabulatedInterface (amrex::Vector<amrex::Geometry> &_geom, IO::ParmParse &pp) :
21  IC(_geom) {pp_queryclass(*this);}
22  TabulatedInterface (amrex::Vector<amrex::Geometry> &_geom, IO::ParmParse &pp, std::string name) :
23  IC(_geom) {pp_queryclass(name,*this);}
24 
25  TabulatedInterface (amrex::Vector<amrex::Geometry> &_geom,
26  std::vector<Set::Scalar> a_xs, std::vector<Set::Scalar> a_ys) :
27  IC(_geom)
28  {
29  Define(a_xs,a_ys);
30  }
31 
32  TabulatedInterface (amrex::Vector<amrex::Geometry> &_geom,
33  std::vector<Set::Scalar> a_xs, std::vector<Set::Scalar> a_ys,
34  Set::Scalar a_alpha1, Set::Scalar a_alpha2, Type a_type = Type::Values) :
35  IC(_geom)
36  {
37  Define(a_xs,a_ys,a_type,a_alpha1,a_alpha2);
38  }
39 
40  void Define(std::vector<Set::Scalar> a_xs, std::vector<Set::Scalar> a_ys,
41  Type a_type = Type::Partition, Set::Scalar a_alpha1 = 1.0, Set::Scalar a_alpha2 = 1.0)
42  {
43  type = a_type;
44  alpha1 = a_alpha1;
45  alpha2 = a_alpha2;
46  xs = a_xs;
47  ys = a_ys;
48  }
49 
50  void Add(const int &lev, Set::Field<Set::Scalar> &a_field,Set::Scalar)
51  {
53 
54  for (amrex::MFIter mfi(*a_field[lev],amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
55  {
56  amrex::Box bx = mfi.tilebox();
57  bx.grow(a_field[lev]->nGrow());
58  amrex::Array4<Set::Scalar> const& field = a_field[lev]->array(mfi);
59  amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
60  amrex::Real x = geom[lev].ProbLo()[0] + ((amrex::Real)(i) + 0.5) * geom[lev].CellSize()[0];
61  amrex::Real y = geom[lev].ProbLo()[1] + ((amrex::Real)(j) + 0.5) * geom[lev].CellSize()[1];
62  if (y > f(x))
63  {
64  if (type == Type::Partition)
65  {
66  field(i,j,k,0) += 0.;
67  field(i,j,k,1) += alpha2;
68  }
69  else
70  field(i,j,k,0) += alpha2;
71  }
72  else
73  {
74  if (type == Type::Partition)
75  {
76  field(i,j,k,0) += alpha1;
77  field(i,j,k,1) += 0.;
78  }
79  else
80  field(i,j,k,0) += alpha1;
81  }
82  });
83  }
84  };
85 
86 private:
87  Type type;
88  std::vector<Set::Scalar> xs;
89  std::vector<Set::Scalar> ys;
91 
92 public:
93  static void Parse(TabulatedInterface & value, IO::ParmParse & pp)
94  {
95  pp_queryarr("xs",value.xs); // x location of points
96  pp_queryarr("ys",value.ys); // y location of points
97  value.Define(value.xs,value.ys);
98  }
99 };
100 }
101 #endif
IC::TabulatedInterface::TabulatedInterface
TabulatedInterface(amrex::Vector< amrex::Geometry > &_geom, std::vector< Set::Scalar > a_xs, std::vector< Set::Scalar > a_ys, Set::Scalar a_alpha1, Set::Scalar a_alpha2, Type a_type=Type::Values)
Definition: TabulatedInterface.H:32
IC::IC::geom
amrex::Vector< amrex::Geometry > & geom
Definition: IC.H:45
IC::TabulatedInterface::TabulatedInterface
TabulatedInterface(amrex::Vector< amrex::Geometry > &_geom, IO::ParmParse &pp, std::string name)
Definition: TabulatedInterface.H:22
Util.H
Linear.H
Set::Field< Set::Scalar >
Definition: Set.H:236
IC::TabulatedInterface::xs
std::vector< Set::Scalar > xs
Definition: TabulatedInterface.H:88
ParmParse.H
IC::TabulatedInterface::Parse
static void Parse(TabulatedInterface &value, IO::ParmParse &pp)
Definition: TabulatedInterface.H:93
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
IC::TabulatedInterface::Partition
@ Partition
Definition: TabulatedInterface.H:17
pp_queryclass
#define pp_queryclass(...)
Definition: ParmParse.H:105
IC::TabulatedInterface::Type
Type
Definition: TabulatedInterface.H:17
IC::TabulatedInterface::TabulatedInterface
TabulatedInterface(amrex::Vector< amrex::Geometry > &_geom, std::vector< Set::Scalar > a_xs, std::vector< Set::Scalar > a_ys)
Definition: TabulatedInterface.H:25
IC::TabulatedInterface::alpha1
Set::Scalar alpha1
Definition: TabulatedInterface.H:90
IC::TabulatedInterface::ys
std::vector< Set::Scalar > ys
Definition: TabulatedInterface.H:89
Numeric::Interpolator::Linear< Set::Scalar >
IC
Definition: Affine.H:18
IC::TabulatedInterface::TabulatedInterface
TabulatedInterface(amrex::Vector< amrex::Geometry > &_geom)
Definition: TabulatedInterface.H:18
IO::ParmParse
Definition: ParmParse.H:110
IC::TabulatedInterface::TabulatedInterface
TabulatedInterface(amrex::Vector< amrex::Geometry > &_geom, IO::ParmParse &pp)
Definition: TabulatedInterface.H:20
IC::TabulatedInterface::Add
void Add(const int &lev, Set::Field< Set::Scalar > &a_field, Set::Scalar)
Definition: TabulatedInterface.H:50
IC::TabulatedInterface::type
Type type
Definition: TabulatedInterface.H:84
IC::TabulatedInterface::Define
void Define(std::vector< Set::Scalar > a_xs, std::vector< Set::Scalar > a_ys, Type a_type=Type::Partition, Set::Scalar a_alpha1=1.0, Set::Scalar a_alpha2=1.0)
Definition: TabulatedInterface.H:40
IC::TabulatedInterface::alpha2
Set::Scalar alpha2
Definition: TabulatedInterface.H:90
IC.H
IC::TabulatedInterface::Values
@ Values
Definition: TabulatedInterface.H:17
IC::TabulatedInterface
Definition: TabulatedInterface.H:14
pp_queryarr
#define pp_queryarr(...)
Definition: ParmParse.H:103