4#ifdef REMORA_USE_PARTICLES
8#include <AMReX_Particles.H>
51 const std::string
tracers =
"tracer_particles";
52 const std::string
hydro =
"hydro_particles";
60 amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
const&
plo,
61 amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
const&
dxi,
62 const amrex::Box& domain )
const noexcept
66 int(amrex::Math::floor((
p.pos(1)-
plo[1])*
dxi[1])),
68 iv[0] += domain.smallEnd()[0];
69 iv[1] += domain.smallEnd()[1];
77 amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
const&
a_plo,
78 amrex::GpuArray<amrex::Real,AMREX_SPACEDIM>
const&
a_dxi,
81 amrex::IntVect
iv(
int(amrex::Math::floor((
a_p.pos(0)-
a_plo[0])*
a_dxi[0])),
86 amrex::Real
lx = (
a_p.pos(0)-
a_plo[0])*
a_dxi[0] -
static_cast<amrex::Real
>(
iv[0]);
87 amrex::Real
ly = (
a_p.pos(1)-
a_plo[1])*
a_dxi[1] -
static_cast<amrex::Real
>(
iv[1]);
99 }
else if (
a_p.pos(2) <=
zlo) {
105class REMORAPC :
public amrex::ParticleContainer< REMORAParticlesRealIdxAoS::ncomps,
106 REMORAParticlesIntIdxAoS::ncomps,
107 REMORAParticlesRealIdxSoA::ncomps,
108 REMORAParticlesIntIdxSoA::ncomps,
109 amrex::DefaultAllocator,
110 REMORAParticlesAssignor >
116 const std::string&
a_name =
"particles" )
131 const amrex::DistributionMapping&
a_dmap,
132 const amrex::BoxArray&
a_ba,
133 const std::string&
a_name =
"particles" )
152 amrex::Vector<amrex::MultiFab const*>&
a_flow_vel,
153 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>&
a_z_phys_nd );
156 virtual amrex::Vector<std::string>
varNames ()
const
166 return {
"mass_density"};
172 amrex::Vector<amrex::MultiFab const*>&
a_umac,
173 const std::unique_ptr<amrex::MultiFab>&
a_z_height );
177 const amrex::Vector<amrex::MultiFab>&
a_xy )
const;
184 amrex::MultiFab&
a_mf,
185 const int a_lev)
const
197 BL_PROFILE(
"REMORAPCPC::setAdvectWithFlow()");
constexpr amrex::Real one
constexpr amrex::Real zero
mf_h setVal(geomdata.ProbHi(2))
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void update_location_idata(P &a_p, amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > const &a_plo, amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > const &a_dxi, const amrex::Array4< amrex::Real const > &a_height_arr)
virtual void EvolveParticles(int a_lev, amrex::Real a_dt_lev, amrex::Vector< amrex::MultiFab const * > &a_flow_vel, const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &a_z_phys_nd)
virtual void computeMeshVar(const std::string &a_var_name, amrex::MultiFab &a_mf, const int a_lev) const
virtual void massDensity(amrex::MultiFab &a_mf, const int &a_lev, const int &a_comp=0) const
void WritePlotFile(const std::string &a_fname, const std::string &a_name, const amrex::Vector< amrex::MultiFab > &a_xy) const
std::string m_initialization_type
virtual void AdvectWithFlow(int a_lev, amrex::Real a_dt, amrex::Vector< amrex::MultiFab const * > &a_umac, const std::unique_ptr< amrex::MultiFab > &a_z_height)
virtual amrex::Vector< std::string > meshPlotVarNames() const
REMORAPC(const amrex::Geometry &a_geom, const amrex::DistributionMapping &a_dmap, const amrex::BoxArray &a_ba, const std::string &a_name="particles")
amrex::RealBox m_particle_box
void setAdvectWithFlow(bool a_flag)
virtual amrex::Vector< std::string > varNames() const
void initializeParticlesUniformDistributionInBox(const std::unique_ptr< amrex::MultiFab > &a_ptr, const amrex::RealBox &particle_box)
virtual void InitializeParticles(const std::unique_ptr< amrex::MultiFab > &a_ptr=nullptr)
virtual void readInputs()
bool place_randomly_in_cells
REMORAPC(amrex::ParGDBBase *a_gdb, const std::string &a_name="particles")
const std::string init_box_uniform
const std::string tracers
AMREX_GPU_HOST_DEVICE amrex::IntVect operator()(P const &p, amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > const &plo, amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > const &dxi, const amrex::Box &domain) const noexcept