Alamo
Wulff.H
Go to the documentation of this file.
1 #ifndef IC_WULFF_H_
2 #define IC_WULFF_H_
3 
4 #include "IC/IC.H"
5 #include "Util/Util.H"
7 
8 /// \class Wulff
9 /// \brief Initialize a spherical inclusion
10 namespace IC
11 {
12 class Wulff : public IC
13 {
14 public:
15  Wulff (amrex::Vector<amrex::Geometry> &_geom) :
16  IC(_geom)
17  {
18  model.Define(0,0,0.5,0.5);
19  }
20 
21  void Add(const int lev,
22  amrex::Vector<amrex::MultiFab * > &a_field)
23  {
24  a_field[lev]->setVal(1.0);
25  bool cellcentered = (a_field[0]->boxArray().ixType() == amrex::IndexType(amrex::IntVect::TheCellVector()));
26 
27  for (amrex::MFIter mfi(*a_field[lev],amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
28  {
29  amrex::Box bx = mfi.tilebox();
30  bx.grow(a_field[lev]->nGrow());
31 
32  //a_field[lev]->setVal(1.0,1);
33 
34  amrex::Array4<Set::Scalar> const& field = a_field[lev]->array(mfi);
35 
36  for (Set::Scalar theta = 0.0; theta <= 0.5*Set::Constant::Pi; theta += 0.01)
37  {
38  for (Set::Scalar phi = 0.0; phi <= 0.5*Set::Constant::Pi; phi += 0.01)
39  {
40  Set::Vector n(AMREX_D_DECL(sin(theta)*cos(phi), sin(theta)*sin(phi), cos(theta)));
41  Set::Scalar W = model.W(n);
42  //Util::Message(INFO,"phi=",phi," theta=",theta," W=",W);
43 
44  amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k) {
45  Set::Vector x;
46  AMREX_D_TERM(x(0) = geom[lev].ProbLo()[0] + ((amrex::Real)(i) + 0.5) * geom[lev].CellSize()[0];,
47  x(1) = geom[lev].ProbLo()[1] + ((amrex::Real)(j) + 0.5) * geom[lev].CellSize()[1];,
48  x(2) = geom[lev].ProbLo()[2] + ((amrex::Real)(k) + 0.5) * geom[lev].CellSize()[2];);
49 
50  if (x.dot(n) > W) field(i,j,k) = 0.0;
51  });
52 
53  }
54  }
55  }
56 
57  };
58 
59 private:
61 };
62 }
63 #endif
IC::IC::geom
amrex::Vector< amrex::Geometry > & geom
Definition: IC.H:45
SH.H
Model::Interface::GB::SH::Define
void Define(const amrex::Real a_theta0, const amrex::Real a_phi0, const amrex::Real a_sigma0, const amrex::Real a_sigma1)
Definition: SH.H:45
BC::AMREX_D_DECL
@ AMREX_D_DECL
Definition: BC.H:34
Util.H
IC::Wulff::Wulff
Wulff(amrex::Vector< amrex::Geometry > &_geom)
Definition: Wulff.H:15
Model::Interface::GB::SH::W
Set::Scalar W(const Set::Scalar a_theta, const Set::Scalar a_phi) const
Definition: SH.H:58
Set::Vector
Eigen::Matrix< amrex::Real, AMREX_SPACEDIM, 1 > Vector
Definition: Base.H:20
IC::Wulff::model
Model::Interface::GB::SH model
Definition: Wulff.H:57
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
IC::Wulff::Add
void Add(const int lev, amrex::Vector< amrex::MultiFab * > &a_field)
Definition: Wulff.H:21
IC::Wulff
Definition: Wulff.H:12
Model::Interface::GB::SH
Definition: SH.H:35
Set::Constant::Pi
static const Set::Scalar Pi
Definition: Set.H:286
IC
Definition: Affine.H:18
IC.H