4 #ifdef ERF_USE_PARTICLES
7 #include <AMReX_Particles.H>
10 struct ERFParticlesIntIdx
17 struct ERFParticlesRealIdx
29 namespace ERFParticleInitializations
32 const std::string init_box_uniform =
"box";
35 namespace ERFParticleNames
37 const std::string tracers =
"tracer_particles";
40 class ERFPC :
public amrex::ParticleContainer< 0,
42 ERFParticlesRealIdx::ncomps,
43 ERFParticlesIntIdx::ncomps,
44 amrex::DefaultAllocator >
49 ERFPC ( amrex::ParGDBBase* a_gdb,
50 const std::string& a_name =
"particles" )
51 :
amrex::ParticleContainer< 0,
53 ERFParticlesRealIdx::ncomps,
54 ERFParticlesIntIdx::ncomps,
55 amrex::DefaultAllocator> (a_gdb)
57 BL_PROFILE(
"ERFPCPC::ERFPC()");
63 ERFPC (
const amrex::Geometry& a_geom,
64 const amrex::DistributionMapping& a_dmap,
65 const amrex::BoxArray& a_ba,
66 const std::string& a_name =
"particles" )
67 :
amrex::ParticleContainer< 0,
69 ERFParticlesRealIdx::ncomps,
70 ERFParticlesIntIdx::ncomps,
71 amrex::DefaultAllocator> ( a_geom, a_dmap, a_ba )
73 BL_PROFILE(
"ERFPCPC::ERFPC()");
79 virtual void InitializeParticles (
const amrex::Real time,
const std::unique_ptr<amrex::MultiFab>& a_ptr =
nullptr);
82 virtual void EvolveParticles (
int,
84 amrex::Vector<amrex::Vector<amrex::MultiFab>>&,
85 const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& );
88 virtual amrex::Vector<std::string> varNames ()
const
90 BL_PROFILE(
"ERFPCPC::varNames()");
91 return {AMREX_D_DECL(
"xvel",
"yvel",
"zvel"),
"mass",
"temperature"};
95 virtual amrex::Vector<std::string> meshPlotVarNames ()
const
97 BL_PROFILE(
"ERFPCPC::varNames()");
98 return {
"mass_density"};
102 virtual void AdvectWithFlow ( amrex::MultiFab*,
105 const std::unique_ptr<amrex::MultiFab>& );
108 virtual void AdvectWithGravity (
int,
110 const std::unique_ptr<amrex::MultiFab>& );
113 virtual void ComputeTemperature (
const amrex::MultiFab&,
116 const std::unique_ptr<amrex::MultiFab>& );
119 virtual void massDensity ( amrex::MultiFab&,
120 const amrex::MultiFab& a_z_phys_nd,
121 const int&,
const int& a_comp = 0)
const;
124 virtual void computeMeshVar(
const std::string& a_var_name,
125 amrex::MultiFab& a_mf,
126 const amrex::MultiFab& a_z_phys_nd,
127 const int a_lev)
const
129 if (a_var_name ==
"mass_density") {
130 massDensity( a_mf, a_z_phys_nd, a_lev );
137 inline void setAdvectWithFlow (
bool a_flag)
139 BL_PROFILE(
"ERFPCPC::setAdvectWithFlow()");
140 m_advect_w_flow = a_flag;
143 inline void setAdvectWithGravity (
bool a_flag)
145 BL_PROFILE(
"ERFPCPC::setAdvectWithGravity()");
146 m_advect_w_gravity = a_flag;
158 template<
typename ValueFunc>
159 void ERFPCParticleToMesh(amrex::MultiFab& a_mf,
160 const amrex::MultiFab& a_z_phys_nd,
161 int a_lev,
int a_comp,
162 ValueFunc&& value_func)
const;
165 void initializeParticlesUniformDistributionInBox (
const std::unique_ptr<amrex::MultiFab>& a_ptr,
166 const amrex::RealBox& particle_box);
171 void ConvertZetaToZ (
const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& a_z_phys_nd);
174 void ConvertZToZeta (
const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& a_z_phys_nd);
179 void ExtractAndRouteOORParticles (
int a_lev );
182 void CountParticlesPerLevelAndHalo (
int a_finest_level );
186 bool m_advect_w_flow;
187 bool m_advect_w_gravity;
189 amrex::RealBox m_particle_box;
193 std::string m_initialization_type;
198 bool m_initialized =
false;
200 bool m_stable_redistribute;
203 virtual void readInputs ();
207 bool place_randomly_in_cells;
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Definition: ERF_ConsoleIO.cpp:12