ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SDInitialization.H
Go to the documentation of this file.
1 #ifndef SDINIT_H_
2 #define SDINIT_H_
3 
4 #include <string>
5 #include <vector>
6 #include <random>
7 
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>
13 
14 #include "ERF_Constants.H"
15 #include "ERF_MaterialProperties.H"
16 
17 AMREX_ENUM(SDInitShape,
18  uniform,
19  bubble,
20  null
21 );
22 
23 /*! \brief List of super-droplet initializations */
24 namespace SupDropInit
25 {
26  /*! Maximum number of vapour/condensate species */
27  const int num_species_max = 10;
28 
29  /*! Maximum number of aerosols */
30  const int num_aerosols_max = 8;
31 
32  const std::string attrib_init_const = "mass_constant";
33  const std::string attrib_init_exp = "mass_exponential";
34  const std::string attrib_init_lnr = "radius_log_normal";
35  const std::string attrib_init_lnr_auto = "radius_lognormal_autorange";
36 }
37 
38 AMREX_ENUM(SDMultiplicityType,
39  constant, sampled
40 );
41 
42 /*! \brief Super-droplets initial properties */
44 {
45  public:
46 
47  using MatVec = std::vector<std::unique_ptr<MaterialProperties>>;
48 
49  /*!< Initial number of super-droplets per cell */
50  int m_ppc = 1;
51 
52  /*! Initial distribution type */
53  SDInitShape m_type = SDInitShape::uniform;
54 
55  /*!< Initial number density (m^{-3}) of physical particles */
57  /*!< Maximum multiplicity */
59 
60  /*! Minimum species mass */
61  std::vector<amrex::Real> m_mass_species_min;
62  /*! Maximum species mass */
63  std::vector<amrex::Real> m_mass_species_max;
64  /*! Mean species mass */
65  std::vector<amrex::Real> m_mass_species_mean;
66  /*! Minimum species dry radius */
67  std::vector<amrex::Real> m_radius_species_min;
68  /*! Maximum species dry radius */
69  std::vector<amrex::Real> m_radius_species_max;
70  /*! Mean species dry radius */
71  std::vector<amrex::Real> m_radius_species_mean;
72  /*! Standard deviation of species dry radius */
73  std::vector<amrex::Real> m_radius_species_geom_std;
74  /*! Initial distribution type for species */
75  std::vector<std::string> m_species_init_type;
76 
77  /*! Minimum aerosol mass */
78  std::vector<amrex::Real> m_mass_aerosol_min;
79  /*! Maximum aerosol mass */
80  std::vector<amrex::Real> m_mass_aerosol_max;
81  /*! Mean aerosol mass */
82  std::vector<amrex::Real> m_mass_aerosol_mean;
83  /*! Minimum aerosol dry radius */
84  std::vector<amrex::Real> m_radius_aerosol_min;
85  /*! Maximum aerosol dry radius */
86  std::vector<amrex::Real> m_radius_aerosol_max;
87  /*! Mean aerosol dry radius */
88  std::vector<amrex::Real> m_radius_aerosol_mean;
89  /*! Standard deviation of aerosol dry radius */
90  std::vector<amrex::Real> m_radius_aerosol_geom_std;
91  /*! Initial distribution type for aerosol */
92  std::vector<std::string> m_aerosol_init_type;
93 
94  /*! Number of species */
95  int m_num_species = 0;
96  /*! Number of aerosols */
97  int m_num_aerosols = 0;
98 
99  /*! box within which to place particles*/
100  amrex::RealBox m_particle_domain;
101  /*! Particle distribution shape parameters
102  Box shape, p1 -> lo end, p2 -> hi end
103  Bubble shape, p1 -> center, p2 -> radius */
104  amrex::Vector<amrex::Real> m_init_particle_p1;
105  amrex::Vector<amrex::Real> m_init_particle_p2;
106 
107  /*! multiplicity type */
108  SDMultiplicityType m_mult_type;
109 
110  /*! \brief Set default values for initialization parameters
111  * \param[in] a_geom Simulation geometry information
112  * \param[in] a_species_mat Vector of species material properties
113  * \param[in] a_aerosol_mat Vector of aerosol material properties
114  */
115  virtual void setDefaults ( const amrex::Geometry& a_geom,
116  const MatVec& a_species_mat,
117  const MatVec& a_aerosol_mat );
118 
119  /*! \brief Read super-droplets initialization parameters from input file
120  * \param[in] a_prefix Prefix for parameter parser
121  * \param[in] a_key Key identifier for initialization parameters
122  * \param[in] a_geom Simulation geometry information
123  * \param[in] a_species_mat Vector of species material properties
124  * \param[in] a_aerosol_mat Vector of aerosol material properties
125  */
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 );
131 
132  /*! \brief Print super-droplets initialization parameters to screen
133  * \param[in] a_species_mat Vector of species material properties
134  * \param[in] a_aerosol_mat Vector of aerosol material properties
135  */
136  virtual void printParameters ( const MatVec& a_species_mat,
137  const MatVec& a_aerosol_mat ) const;
138 
139  /*! \brief Get a distribution with constant multiplicity
140  * \param[out] a_mass Output vector of particle masses
141  * \param[in] a_np Number of particles
142  * \param[in] a_density Density of the particle material
143  * \param[in] a_init_type Type of initialization distribution
144  * \param[in] a_mass_min Minimum mass value
145  * \param[in] a_mass_max Maximum mass value
146  * \param[in] a_mass_mean Mean mass value
147  * \param[in] a_radius_min Minimum radius value
148  * \param[in] a_radius_max Maximum radius value
149  * \param[in] a_radius_mean Mean radius value
150  * \param[in] a_radius_gstd Geometric standard deviation for radius
151  * \param[in,out] a_rng Random number generator
152  */
153  void getDistribution( amrex::Vector<amrex::Real>& a_mass,
154  const int a_np,
155  const amrex::Real a_density,
156  const std::string& a_init_type,
157  const amrex::Real a_mass_min,
158  const amrex::Real a_mass_max,
159  const amrex::Real a_mass_mean,
160  const amrex::Real a_radius_min,
161  const amrex::Real a_radius_max,
162  const amrex::Real a_radius_mean,
163  const amrex::Real a_radius_gstd,
164  std::mt19937& a_rng ) const;
165 
166  /*! \brief Get a distribution with sampled multiplicity
167  * \param[out] a_mass Output vector of particle masses
168  * \param[out] a_mult Output vector of particle multiplicities
169  * \param[in] a_dV Cell volume
170  * \param[in] a_np Number of particles
171  * \param[in] a_density Density of the particle material
172  * \param[in] a_init_type Type of initialization distribution
173  * \param[in] a_mass_min Minimum mass value
174  * \param[in] a_mass_max Maximum mass value
175  * \param[in] a_mass_mean Mean mass value
176  * \param[in] a_radius_min Minimum radius value
177  * \param[in] a_radius_max Maximum radius value
178  * \param[in] a_radius_mean Mean radius value
179  * \param[in] a_radius_gstd Geometric standard deviation for radius
180  * \param[in,out] a_rng Random number generator
181  */
182  void getDistribution( amrex::Vector<amrex::Real>& a_mass,
183  amrex::Vector<amrex::Real>& a_mult,
184  const amrex::Real a_dV,
185  const int a_np,
186  const amrex::Real a_density,
187  const std::string& a_init_type,
188  const amrex::Real a_mass_min,
189  const amrex::Real a_mass_max,
190  const amrex::Real a_mass_mean,
191  const amrex::Real a_radius_min,
192  const amrex::Real a_radius_max,
193  const amrex::Real a_radius_mean,
194  const amrex::Real a_radius_gstd,
195  std::mt19937& a_rng ) const;
196 
197  /*! \brief Compute the aerosol mass distribution
198  * \param[out] a_mass Output vector of aerosol masses
199  * \param[in] a_idx Aerosol species index
200  * \param[in] a_np Number of particles
201  * \param[in] a_density Density of the aerosol material
202  * \param[in,out] a_rng Random number generator
203  */
204  void getAerosolDistribution ( amrex::Vector<amrex::Real>& a_mass,
205  const int a_idx,
206  const int a_np,
207  const amrex::Real a_density,
208  std::mt19937& a_rng ) const
209  {
210  getDistribution( a_mass,
211  a_np,
212  a_density,
213  m_aerosol_init_type[a_idx],
214  m_mass_aerosol_min[a_idx],
215  m_mass_aerosol_max[a_idx],
216  m_mass_aerosol_mean[a_idx],
217  m_radius_aerosol_min[a_idx],
218  m_radius_aerosol_max[a_idx],
219  m_radius_aerosol_mean[a_idx],
221  a_rng);
222  }
223 
224  /*! \brief Compute the aerosol mass distribution with sampled multiplicity
225  * \param[out] a_mass Output vector of aerosol masses
226  * \param[out] a_mult Output vector of particle multiplicities
227  * \param[in] a_dV Cell volume for scaling multiplicity
228  * \param[in] a_idx Aerosol species index
229  * \param[in] a_np Number of particles to generate
230  * \param[in] a_density Density of the aerosol material
231  * \param[in,out] a_rng Random number generator
232  */
233  void getAerosolDistribution ( amrex::Vector<amrex::Real>& a_mass,
234  amrex::Vector<amrex::Real>& a_mult,
235  amrex::Real a_dV,
236  int a_idx,
237  int a_np,
238  amrex::Real a_density,
239  std::mt19937& a_rng ) const
240  {
241  getDistribution( a_mass,
242  a_mult,
243  a_dV,
244  a_np,
245  a_density,
246  m_aerosol_init_type[a_idx],
247  m_mass_aerosol_min[a_idx],
248  m_mass_aerosol_max[a_idx],
249  m_mass_aerosol_mean[a_idx],
250  m_radius_aerosol_min[a_idx],
251  m_radius_aerosol_max[a_idx],
252  m_radius_aerosol_mean[a_idx],
254  a_rng);
255  }
256 
257  /*! \brief Compute the species mass distribution with constant multiplicity
258  * \param[out] a_mass Output vector of species masses
259  * \param[in] a_idx Species index
260  * \param[in] a_np Number of particles to generate
261  * \param[in] a_density Density of the species material
262  * \param[in,out] a_rng Random number generator
263  */
264  void getSpeciesDistribution ( amrex::Vector<amrex::Real>& a_mass,
265  const int a_idx,
266  const int a_np,
267  const amrex::Real a_density,
268  std::mt19937& a_rng ) const
269  {
270  getDistribution( a_mass,
271  a_np,
272  a_density,
273  m_species_init_type[a_idx],
274  m_mass_species_min[a_idx],
275  m_mass_species_max[a_idx],
276  m_mass_species_mean[a_idx],
277  m_radius_species_min[a_idx],
278  m_radius_species_max[a_idx],
279  m_radius_species_mean[a_idx],
281  a_rng);
282  }
283 
284  /*! \brief Compute the species mass distribution with sampled multiplicity
285  * \param[out] a_mass Output vector of species masses
286  * \param[out] a_mult Output vector of particle multiplicities
287  * \param[in] a_dV Cell volume for scaling multiplicity
288  * \param[in] a_idx Species index
289  * \param[in] a_np Number of particles to generate
290  * \param[in] a_density Density of the species material
291  * \param[in,out] a_rng Random number generator
292  */
293  void getSpeciesDistribution ( amrex::Vector<amrex::Real>& a_mass,
294  amrex::Vector<amrex::Real>& a_mult,
295  amrex::Real a_dV,
296  int a_idx,
297  int a_np,
298  amrex::Real a_density,
299  std::mt19937& a_rng ) const
300  {
301  getDistribution( a_mass,
302  a_mult,
303  a_dV,
304  a_np,
305  a_density,
306  m_species_init_type[a_idx],
307  m_mass_species_min[a_idx],
308  m_mass_species_max[a_idx],
309  m_mass_species_mean[a_idx],
310  m_radius_species_min[a_idx],
311  m_radius_species_max[a_idx],
312  m_radius_species_mean[a_idx],
314  a_rng);
315  }
316 
317  /*! \brief Determine whether multiplicity is sampled or constant
318  * \return True if multiplicity is sampled, false if constant
319  */
320  [[nodiscard]] inline bool sampledMultiplicity() const
321  {
322  return (m_mult_type == SDMultiplicityType::sampled);
323  }
324 
325  /*! \brief Calculate the volume of the particle domain
326  *
327  * For uniform distribution type, returns the box volume.
328  * For bubble distribution type, returns the volume of the bubble.
329  *
330  * \return Volume of the particle domain in cubic meters
331  */
332  [[nodiscard]] inline amrex::Real volume() const
333  {
334  amrex::Real vol = 0.0;
335  if (m_type == SDInitShape::uniform) {
336  vol = m_particle_domain.volume();
337  } else if (m_type == SDInitShape::bubble) {
338  const auto& radius = m_particle_domain.hi();
339  vol = (4.0/3.0)*PI*radius[0]*radius[1]*radius[2];
340  }
341  return vol;
342  }
343 
344  virtual int numSDPerCell (const amrex::Real) const = 0;
345  virtual amrex::Real numParticlesPerCell (const amrex::Real) const = 0;
346 };
347 
348 /*! \brief Super-droplets initialization structure */
350 {
351  public:
352 
353  virtual ~SDInjection() = default;
354 
355  /*!< Injection rate (number of physical particles per meter^3 second) */
357  /*!< Injection rate (number of SDs per meter^3 second) */
359 
360  /*!< Initial number density of super-droplets */
362 
363  /*!< Injection domain velocity */
364  amrex::Vector<amrex::Real> m_domain_vel = {0.0,0.0,0.0};
365 
366  /*!< Start time for injection */
368 
369  /*!< Stop time for injection */
371 
372  /*! \brief Update time-dependent quantities for particle injection
373  *
374  * This function updates:
375  * 1. Number density based on injection rate and timestep
376  * 2. Super-droplet number density based on SD injection rate
377  * 3. Position of the injection domain based on domain velocity
378  *
379  * \param[in] a_dt Timestep size in seconds
380  */
381  inline void updateDt (const amrex::Real a_dt)
382  {
383  this->m_numdens = m_inj_rate * a_dt;
384  m_numdens_sd = (m_sd_inj_rate>0 ? std::max(m_sd_inj_rate*a_dt, 1.0) : -1);
385 
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++) {
390  lo[dir] = this->m_particle_domain.lo(dir) + m_domain_vel[dir] * a_dt;
391  hi[dir] = this->m_particle_domain.hi(dir) + m_domain_vel[dir] * a_dt;
392  }
393  this->m_particle_domain.setLo(lo);
394  this->m_particle_domain.setHi(hi);
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++) {
398  center[dir] = this->m_particle_domain.lo(dir) + m_domain_vel[dir] * a_dt;
399  }
400  this->m_particle_domain.setLo(center);
401  }
402  }
403 
404  /*! read super-droplets injection parameters */
405  void readInputs ( const std::string&,
406  const std::string&,
407  const amrex::Geometry&,
408  const MatVec&,
409  const MatVec& ) override
410  {
411  amrex::Abort("SDInjection::readInputs(): Do not use this interface");
412  }
413 
414  /*! \brief Read super-droplet injection parameters from input file
415  *
416  * This function reads injection-specific parameters like injection rate,
417  * timing parameters, and domain velocity.
418  *
419  * \param[in] a_prefix Prefix for parameter parser
420  * \param[in] a_geom Simulation geometry information
421  * \param[in] a_species_mat Vector of species material properties
422  * \param[in] a_aerosol_mat Vector of aerosol material properties
423  * \param[in] a_dt Current timestep size
424  */
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,
429  const amrex::Real a_dt );
430 
431  /*! print super-droplets injection parameters to screen */
432  void printParameters ( const MatVec&, const MatVec& ) const override;
433 
434  /*! \brief Compute number of super-droplets to inject per grid cell
435  *
436  * Determines the number of super-droplets to inject based on either:
437  * 1. The super-droplet number density and cell volume, or
438  * 2. A constant number per cell (m_ppc) if number density is not set
439  *
440  * \param[in] a_dv Volume of the grid cell
441  * \return Number of super-droplets to inject in this cell
442  */
443  [[nodiscard]] inline int numSDPerCell (const amrex::Real a_dv) const override
444  {
445  int num_sd_per_cell = 0;
446  if (m_numdens_sd >= 0) {
447  num_sd_per_cell = static_cast<int>(std::ceil(m_numdens_sd*a_dv));
448  } else {
449  num_sd_per_cell = this->m_ppc;
450  }
451  return num_sd_per_cell;
452  }
453 
454  /*! Compute number of physical particles per grid cell */
455  [[nodiscard]] inline amrex::Real numParticlesPerCell (const amrex::Real a_dv) const override
456  {
457  amrex::Real num_par_per_cell = 0.0;
458  if (this->m_numdens >= 0) {
459  num_par_per_cell = std::ceil(this->m_numdens*a_dv);
460  } else {
461  num_par_per_cell = 1;
462  }
463  return num_par_per_cell;
464  }
465 
466 };
467 
468 /*! \brief Super-droplets initialization structure */
470 {
471  public:
472 
473  virtual ~SDInitialization() = default;
474 
475  /*!< Initial number density of super-droplets */
477 
478  /*! read super-droplets initialization parameters */
479  void readInputs ( const std::string&,
480  const std::string&,
481  const amrex::Geometry&,
482  const MatVec&,
483  const MatVec& ) override
484  {
485  amrex::Abort("SDInjection::readInputs(): Do not use this interface");
486  }
487 
488  /*! \brief Read super-droplet initialization parameters from input file
489  *
490  * This function reads initialization-specific parameters including
491  * distribution types, particle counts, and sizing parameters.
492  *
493  * \param[in] a_prefix Prefix for parameter parser
494  * \param[in] a_geom Simulation geometry information
495  * \param[in] a_species_mat Vector of species material properties
496  * \param[in] a_aerosol_mat Vector of aerosol material properties
497  */
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 );
502 
503  /*! print super-droplets initialization parameters to screen */
504  void printParameters ( const MatVec&, const MatVec& ) const override;
505 
506  /*! Compute number of super-droplets per grid cell */
507  [[nodiscard]] inline int numSDPerCell (const amrex::Real a_dv) const override
508  {
509  int num_sd_per_cell = 0;
510  if (m_numdens_sd_init >= 0) {
511  num_sd_per_cell = static_cast<int>(std::ceil(m_numdens_sd_init*a_dv));
512  } else {
513  num_sd_per_cell = this->m_ppc;
514  }
515  return num_sd_per_cell;
516  }
517 
518  /*! Compute number of physical particles per grid cell */
519  [[nodiscard]] inline amrex::Real numParticlesPerCell (const amrex::Real a_dv) const override
520  {
521  amrex::Real num_par_per_cell = 0.0;
522  if (this->m_numdens >= 0) {
523  num_par_per_cell = std::ceil(this->m_numdens*a_dv);
524  } else {
525  num_par_per_cell = 1;
526  }
527  return num_par_per_cell;
528  }
529 
530 };
531 
532 #endif
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