Alamo
CahnHilliard.cpp
Go to the documentation of this file.
1 #include <AMReX_MLPoisson.H>
2 
3 #include "CahnHilliard.H"
4 #include "BC/Nothing.H"
5 #include "Numeric/Stencil.H"
6 
7 namespace Integrator
8 {
10 {
11  bc = new BC::Nothing();
12  ic = new IC::Random(geom,2.0);
13  RegisterNewFab(etanewmf, bc, ncomp, nghost, "Eta",true);
14  RegisterNewFab(etaoldmf, bc, ncomp, nghost, "EtaOld",false);
15  RegisterNewFab(intermediate, bc, ncomp, nghost, "int",false);
16  LPInfo info;
17  op.define(geom,grids,dmap,*bc,info);
18 }
19 
20 
21 void
22 CahnHilliard::TimeStepBegin(amrex::Real /*time*/, int /*iter*/)
23 {
24  // amrex::MLPoisson myop(geom,grids,dmap);
25  // amrex::MLMG solver(myop);
26  // solver.setMaxIter(elastic.max_iter);
27  // solver.setMaxFmgIter(elastic.max_fmg_iter);
28  // solver.setVerbose(elastic.verbose);
29  // solver.setCGVerbose(elastic.cgverbose);
30 
31  // etanewmf[0]->setVal(0.0);
32  // etanewmf[0]->setVal(0.0);
33 
34  // Set::Scalar tol_rel = 1E-8;
35  // Set::Scalar tol_abs = 0.0;
36  // solver.solve(GetVecOfPtrs(etanewmf),
37  // GetVecOfConstPtrs(etaoldmf),
38  // tol_rel,
39  // tol_abs);
40 
41 }
42 
43 void
45 {
46  std::swap(etaoldmf[lev], etanewmf[lev]);
47  const amrex::Real* DX = geom[lev].CellSize();
48  for ( amrex::MFIter mfi(*etanewmf[lev],true); mfi.isValid(); ++mfi )
49  {
50  const amrex::Box& bx = mfi.tilebox();
51  amrex::Array4<const amrex::Real> const& eta = etaoldmf[lev]->array(mfi);
52  amrex::Array4<amrex::Real> const& inter = intermediate[lev]->array(mfi);
53  amrex::Array4<amrex::Real> const& etanew = etanewmf[lev]->array(mfi);
54 
55  amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k){
56  Set::Scalar lap =
59 
60  inter(i,j,k) =
61  eta(i,j,k)*eta(i,j,k)*eta(i,j,k)
62  - eta(i,j,k)
63  - gamma*lap;
64 
65 
66  etanew(i,j,k) = eta(i,j,k) - dt*inter(i,j,k); // Allen Cahn
67  });
68 
69  amrex::ParallelFor (bx,[=] AMREX_GPU_DEVICE(int i, int j, int k){
70  Set::Scalar lap =
71  Numeric::Stencil<Set::Scalar,2,0,0>::D(inter,i,j,k,0,DX) +
73 
74  etanew(i,j,k) = eta(i,j,k) + dt*lap;
75  });
76 
77  }
78 }
79 
80 void
82 {
83  etanewmf[lev]->setVal(-1.);
84  etaoldmf[lev]->setVal(-1.);
85  ic->Add(lev,etanewmf);
86  ic->Add(lev,etaoldmf);
87 }
88 
89 
90 void
91 CahnHilliard::TagCellsForRefinement (int /*lev*/, amrex::TagBoxArray& /*tags*/, amrex::Real /*time*/, int /*ngrow*/)
92 {
93 }
94 
95 
96 }
Nothing.H
Integrator::CahnHilliard::op
Operator::Implicit::Implicit op
Definition: CahnHilliard.H:50
Integrator::CahnHilliard::ic
IC::IC * ic
Definition: CahnHilliard.H:46
Integrator::CahnHilliard::Advance
void Advance(int lev, Set::Scalar time, Set::Scalar dt) override
Definition: CahnHilliard.cpp:44
IC::IC::Add
virtual void Add(const int &lev, Set::Field< Set::Scalar > &field, Set::Scalar time)=0
Integrator::CahnHilliard::intermediate
Set::Field< Set::Scalar > intermediate
Definition: CahnHilliard.H:41
Integrator::CahnHilliard::nghost
const int nghost
Definition: CahnHilliard.H:43
Integrator::CahnHilliard::etanewmf
Set::Field< Set::Scalar > etanewmf
Definition: CahnHilliard.H:39
Operator::Operator< Grid::Cell >::define
void define(amrex::Vector< amrex::Geometry > a_geom, const amrex::Vector< amrex::BoxArray > &a_grids, const amrex::Vector< amrex::DistributionMapping > &a_dmap, BC::BC< Set::Scalar > &a_bc, const amrex::LPInfo &a_info=amrex::LPInfo(), const amrex::Vector< amrex::FabFactory< amrex::FArrayBox > const * > &a_factory={})
Definition: Operator.cpp:697
Integrator::CahnHilliard::CahnHilliard
CahnHilliard()
Definition: CahnHilliard.cpp:9
Integrator::CahnHilliard::gamma
const Set::Scalar gamma
Definition: CahnHilliard.H:48
Util::Random
Set::Scalar Random()
Definition: Set.cpp:9
Set::Scalar
amrex::Real Scalar
Definition: Base.H:19
Integrator::Integrator::RegisterNewFab
void RegisterNewFab(Set::Field< Set::Scalar > &new_fab, BC::BC< Set::Scalar > *new_bc, int ncomp, int nghost, std::string name, bool writeout)
Definition: Integrator.cpp:292
Integrator::CahnHilliard::bc
BC::BC< Set::Scalar > * bc
Definition: CahnHilliard.H:45
Integrator::CahnHilliard::ncomp
const int ncomp
Definition: CahnHilliard.H:44
Integrator::CahnHilliard::TagCellsForRefinement
void TagCellsForRefinement(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Definition: CahnHilliard.cpp:91
BC::Nothing
Definition: Nothing.H:11
CahnHilliard.H
Integrator::CahnHilliard::Initialize
void Initialize(int lev) override
Definition: CahnHilliard.cpp:81
Integrator
Collection of numerical integrator objects.
Definition: AllenCahn.H:39
Integrator::CahnHilliard::etaoldmf
Set::Field< Set::Scalar > etaoldmf
Definition: CahnHilliard.H:40
Numeric::Stencil
Definition: Stencil.H:38
Integrator::CahnHilliard::TimeStepBegin
void TimeStepBegin(amrex::Real, int) override
Definition: CahnHilliard.cpp:22
Integrator::Integrator::dt
amrex::Vector< amrex::Real > dt
Timesteps for each level of refinement.
Definition: Integrator.H:303