1#include <AMReX_MLPoisson.H>
56 for ( amrex::MFIter mfi(*
eta_mf[lev],
true); mfi.isValid(); ++mfi )
58 const amrex::Box& bx = mfi.tilebox();
59 amrex::Array4<const amrex::Real>
const& eta =
eta_mf[lev]->array(mfi);
60 amrex::Array4<amrex::Real>
const& grad_chempot =
grad_chempot_mf[lev]->array(mfi);
61 amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int i,
int j,
int k)
63 grad_chempot(i, j, k) = eta(i, j, k) * eta(i, j, k) * eta(i, j, k);
72 amrex::FabArray<amrex::BaseFab<Set::Complex>> eta_hat_mf = fft.MakeSpectralFab();
73 fft.Forward(*
eta_mf[lev],eta_hat_mf);
78 amrex::FabArray<amrex::BaseFab<amrex::GpuComplex<Set::Scalar> > > chempot_hat_mf = fft.MakeSpectralFab();
84 for (amrex::MFIter mfi(eta_hat_mf, amrex::TilingIfNotGPU()); mfi.isValid(); ++mfi)
86 const amrex::Box &bx = mfi.tilebox();
88 amrex::Array4<amrex::GpuComplex<Set::Scalar>>
const & eta_hat = eta_hat_mf.array(mfi);
89 amrex::Array4<amrex::GpuComplex<Set::Scalar>>
const & N_hat = chempot_hat_mf.array(mfi);
91 fft.ParallelFor(bx, [=] AMREX_GPU_DEVICE(
int m,
int n,
int p,
Set::Scalar omega2) {
96 eta_hat(m, n, p) = eta_hat(m, n, p) -
dt * omega2 * N_hat(m, n, p);
97 eta_hat(m,n,p) /= 1.0 +
dt * ((
q0*
q0*
q0*
q0 -
eps)*omega2 - 2.0*
q0*
q0 * omega4 + omega6);
104 fft.Backward(eta_hat_mf, *
eta_mf[lev]);
void Initialize(const int &a_lev, Set::Field< T > &a_field, Set::Scalar a_time=0.0)
Set each point to a random value.
int query_required(std::string name, T &value)
void select_default(std::string name, PTRTYPE *&ic_eta, Args &&... args)
void RegisterNewFab(Set::Field< Set::Scalar > &new_fab, BC::BC< Set::Scalar > *new_bc, int ncomp, int nghost, std::string name, bool writeout, bool evolving=true, std::vector< std::string > suffix={})
Add a new cell-based scalar field.
amrex::Vector< amrex::Real > dt
Timesteps for each level of refinement.
Set::Field< Set::Scalar > grad_chempot_mf
Order parameter field.
void TagCellsForRefinement(int lev, amrex::TagBoxArray &tags, amrex::Real time, int ngrow) override
Mark any cells that need to be refined.
~PFC()
Destroy pointers defined in Parse.
static void Parse(PFC &value, IO::ParmParse &pp)
Scan input values and initialize fields.
PFC()
Basic constructor (don't use)
IC::IC< Set::Scalar > * ic
eta's bc object
Set::Field< Set::Scalar > eta_mf
BC::BC< Set::Scalar > * bc
Field to calculate FFT of nonlinar part.
Set::Scalar q0
eta's ic object
void Initialize(int lev) override
Set values in fields.
void Advance(int lev, Set::Scalar time, Set::Scalar dt) override
Integrate eta over one timestep on lev.
Collection of numerical integrator objects.
void Abort(const char *msg)