8 #include <AMReX_ParmParse.H>
9 #include <AMReX_Enum.H>
10 #include <AMReX_REAL.H>
11 #include <AMReX_RealBox.H>
12 #include <AMReX_Geometry.H>
47 using MatVec = std::vector<std::unique_ptr<MaterialProperties>>;
53 SDInitShape
m_type = SDInitShape::uniform;
115 virtual void setDefaults (
const amrex::Geometry& a_geom,
116 const MatVec& a_species_mat,
117 const MatVec& a_aerosol_mat );
126 virtual void readInputs (
const std::string& a_prefix,
127 const std::string& a_key,
128 const amrex::Geometry& a_geom,
129 const MatVec& a_species_mat,
130 const MatVec& a_aerosol_mat );
137 const MatVec& a_aerosol_mat )
const;
156 const std::string& a_init_type,
164 std::mt19937& a_rng )
const;
183 amrex::Vector<amrex::Real>& a_mult,
187 const std::string& a_init_type,
195 std::mt19937& a_rng )
const;
208 std::mt19937& a_rng )
const
234 amrex::Vector<amrex::Real>& a_mult,
239 std::mt19937& a_rng )
const
268 std::mt19937& a_rng )
const
294 amrex::Vector<amrex::Real>& a_mult,
299 std::mt19937& a_rng )
const
322 return (
m_mult_type == SDMultiplicityType::sampled);
335 if (
m_type == SDInitShape::uniform) {
337 }
else if (
m_type == SDInitShape::bubble) {
339 vol = (4.0/3.0)*
PI*radius[0]*radius[1]*radius[2];
386 if (this->
m_type == SDInitShape::uniform) {
387 amrex::Vector<amrex::Real> lo = {0.0, 0.0, 0.0};
388 amrex::Vector<amrex::Real> hi = {0.0, 0.0, 0.0};
389 for (
int dir = 0; dir < AMREX_SPACEDIM; dir++) {
395 }
else if (
m_type == SDInitShape::bubble) {
396 amrex::Vector<amrex::Real> center = {0.0, 0.0, 0.0};
397 for (
int dir = 0; dir < AMREX_SPACEDIM; dir++) {
407 const amrex::Geometry&,
411 amrex::Abort(
"SDInjection::readInputs(): Do not use this interface");
425 void readInputs (
const std::string& a_prefix,
426 const amrex::Geometry& a_geom,
427 const MatVec& a_species_mat,
428 const MatVec& a_aerosol_mat,
445 int num_sd_per_cell = 0;
447 num_sd_per_cell =
static_cast<int>(std::ceil(
m_numdens_sd*a_dv));
449 num_sd_per_cell = this->
m_ppc;
451 return num_sd_per_cell;
459 num_par_per_cell = std::ceil(this->
m_numdens*a_dv);
461 num_par_per_cell = 1;
463 return num_par_per_cell;
481 const amrex::Geometry&,
485 amrex::Abort(
"SDInjection::readInputs(): Do not use this interface");
498 void readInputs (
const std::string& a_prefix,
499 const amrex::Geometry& a_geom,
500 const MatVec& a_species_mat,
501 const MatVec& a_aerosol_mat );
509 int num_sd_per_cell = 0;
513 num_sd_per_cell = this->
m_ppc;
515 return num_sd_per_cell;
523 num_par_per_cell = std::ceil(this->
m_numdens*a_dv);
525 num_par_per_cell = 1;
527 return num_par_per_cell;
constexpr amrex::Real PI
Definition: ERF_Constants.H:6
AMREX_ENUM(SDInitShape, uniform, bubble, null)
std::vector< std::unique_ptr< MaterialProperties > > MatVec
Definition: ERF_SDInitialization.cpp:4
amrex::Real Real
Definition: ERF_ShocInterface.H:19
Super-droplets initial properties.
Definition: ERF_SDInitialization.H:44
amrex::Real m_numdens
Definition: ERF_SDInitialization.H:56
void getAerosolDistribution(amrex::Vector< amrex::Real > &a_mass, const int a_idx, const int a_np, const amrex::Real a_density, std::mt19937 &a_rng) const
Compute the aerosol mass distribution.
Definition: ERF_SDInitialization.H:204
amrex::Real volume() const
Calculate the volume of the particle domain.
Definition: ERF_SDInitialization.H:332
bool sampledMultiplicity() const
Determine whether multiplicity is sampled or constant.
Definition: ERF_SDInitialization.H:320
std::vector< amrex::Real > m_radius_aerosol_geom_std
Definition: ERF_SDInitialization.H:90
std::vector< amrex::Real > m_radius_species_max
Definition: ERF_SDInitialization.H:69
virtual void readInputs(const std::string &a_prefix, const std::string &a_key, const amrex::Geometry &a_geom, const MatVec &a_species_mat, const MatVec &a_aerosol_mat)
Read super-droplets initialization parameters from input file.
Definition: ERF_SDInitialization.cpp:67
void getAerosolDistribution(amrex::Vector< amrex::Real > &a_mass, amrex::Vector< amrex::Real > &a_mult, amrex::Real a_dV, int a_idx, int a_np, amrex::Real a_density, std::mt19937 &a_rng) const
Compute the aerosol mass distribution with sampled multiplicity.
Definition: ERF_SDInitialization.H:233
SDMultiplicityType m_mult_type
Definition: ERF_SDInitialization.H:108
SDInitShape m_type
Definition: ERF_SDInitialization.H:53
void getDistribution(amrex::Vector< amrex::Real > &a_mass, const int a_np, const amrex::Real a_density, const std::string &a_init_type, const amrex::Real a_mass_min, const amrex::Real a_mass_max, const amrex::Real a_mass_mean, const amrex::Real a_radius_min, const amrex::Real a_radius_max, const amrex::Real a_radius_mean, const amrex::Real a_radius_gstd, std::mt19937 &a_rng) const
Get a distribution with constant multiplicity.
Definition: ERF_SDInitialization.cpp:350
virtual void printParameters(const MatVec &a_species_mat, const MatVec &a_aerosol_mat) const
Print super-droplets initialization parameters to screen.
Definition: ERF_SDInitialization.cpp:247
amrex::Vector< amrex::Real > m_init_particle_p1
Definition: ERF_SDInitialization.H:104
int m_num_species
Definition: ERF_SDInitialization.H:95
std::vector< amrex::Real > m_mass_species_max
Definition: ERF_SDInitialization.H:63
std::vector< std::string > m_species_init_type
Definition: ERF_SDInitialization.H:75
std::vector< amrex::Real > m_radius_species_mean
Definition: ERF_SDInitialization.H:71
std::vector< std::string > m_aerosol_init_type
Definition: ERF_SDInitialization.H:92
int m_ppc
Definition: ERF_SDInitialization.H:50
amrex::Vector< amrex::Real > m_init_particle_p2
Definition: ERF_SDInitialization.H:105
std::vector< amrex::Real > m_radius_aerosol_min
Definition: ERF_SDInitialization.H:84
int m_num_aerosols
Definition: ERF_SDInitialization.H:97
void getSpeciesDistribution(amrex::Vector< amrex::Real > &a_mass, amrex::Vector< amrex::Real > &a_mult, amrex::Real a_dV, int a_idx, int a_np, amrex::Real a_density, std::mt19937 &a_rng) const
Compute the species mass distribution with sampled multiplicity.
Definition: ERF_SDInitialization.H:293
std::vector< amrex::Real > m_radius_aerosol_max
Definition: ERF_SDInitialization.H:86
std::vector< amrex::Real > m_radius_species_geom_std
Definition: ERF_SDInitialization.H:73
std::vector< amrex::Real > m_mass_species_min
Definition: ERF_SDInitialization.H:61
virtual int numSDPerCell(const amrex::Real) const =0
amrex::Real m_max_multiplicity
Definition: ERF_SDInitialization.H:58
virtual void setDefaults(const amrex::Geometry &a_geom, const MatVec &a_species_mat, const MatVec &a_aerosol_mat)
Set default values for initialization parameters.
Definition: ERF_SDInitialization.cpp:6
std::vector< amrex::Real > m_mass_species_mean
Definition: ERF_SDInitialization.H:65
std::vector< amrex::Real > m_radius_aerosol_mean
Definition: ERF_SDInitialization.H:88
std::vector< amrex::Real > m_radius_species_min
Definition: ERF_SDInitialization.H:67
virtual amrex::Real numParticlesPerCell(const amrex::Real) const =0
std::vector< amrex::Real > m_mass_aerosol_min
Definition: ERF_SDInitialization.H:78
std::vector< std::unique_ptr< MaterialProperties > > MatVec
Definition: ERF_SDInitialization.H:49
std::vector< amrex::Real > m_mass_aerosol_mean
Definition: ERF_SDInitialization.H:82
std::vector< amrex::Real > m_mass_aerosol_max
Definition: ERF_SDInitialization.H:80
amrex::RealBox m_particle_domain
Definition: ERF_SDInitialization.H:100
void getSpeciesDistribution(amrex::Vector< amrex::Real > &a_mass, const int a_idx, const int a_np, const amrex::Real a_density, std::mt19937 &a_rng) const
Compute the species mass distribution with constant multiplicity.
Definition: ERF_SDInitialization.H:264
Super-droplets initialization structure.
Definition: ERF_SDInitialization.H:470
amrex::Real m_numdens_sd_init
Definition: ERF_SDInitialization.H:476
int numSDPerCell(const amrex::Real a_dv) const override
Definition: ERF_SDInitialization.H:507
void printParameters(const MatVec &, const MatVec &) const override
Definition: ERF_SDInitialization.cpp:327
virtual ~SDInitialization()=default
void readInputs(const std::string &, const std::string &, const amrex::Geometry &, const MatVec &, const MatVec &) override
Definition: ERF_SDInitialization.H:479
amrex::Real numParticlesPerCell(const amrex::Real a_dv) const override
Definition: ERF_SDInitialization.H:519
Super-droplets initialization structure.
Definition: ERF_SDInitialization.H:350
amrex::Real m_numdens_sd
Definition: ERF_SDInitialization.H:361
amrex::Real m_tstop
Definition: ERF_SDInitialization.H:370
amrex::Real m_sd_inj_rate
Definition: ERF_SDInitialization.H:358
amrex::Real m_tstart
Definition: ERF_SDInitialization.H:367
void updateDt(const amrex::Real a_dt)
Update time-dependent quantities for particle injection.
Definition: ERF_SDInitialization.H:381
void readInputs(const std::string &, const std::string &, const amrex::Geometry &, const MatVec &, const MatVec &) override
Definition: ERF_SDInitialization.H:405
void printParameters(const MatVec &, const MatVec &) const override
Definition: ERF_SDInitialization.cpp:336
amrex::Real m_inj_rate
Definition: ERF_SDInitialization.H:356
int numSDPerCell(const amrex::Real a_dv) const override
Compute number of super-droplets to inject per grid cell.
Definition: ERF_SDInitialization.H:443
virtual ~SDInjection()=default
amrex::Real numParticlesPerCell(const amrex::Real a_dv) const override
Definition: ERF_SDInitialization.H:455
amrex::Vector< amrex::Real > m_domain_vel
Definition: ERF_SDInitialization.H:364
List of super-droplet initializations.
Definition: ERF_SDInitialization.H:25
const std::string attrib_init_lnr_auto
Definition: ERF_SDInitialization.H:35
const int num_aerosols_max
Definition: ERF_SDInitialization.H:30
const int num_species_max
Definition: ERF_SDInitialization.H:27
const std::string attrib_init_const
Definition: ERF_SDInitialization.H:32
const std::string attrib_init_exp
Definition: ERF_SDInitialization.H:33
const std::string attrib_init_lnr
Definition: ERF_SDInitialization.H:34