Super-Droplets
The super-droplet method represents the condensed phase with Lagrangian
particles rather than with bulk mixing ratios. Each particle carries a
multiplicity – the number of real droplets it stands for – together with the
mass of each condensate species and of each aerosol it contains. The method is
selected with erf.moisture_model = SuperDroplets; see
Microphysics model for where it sits among the other moisture models, and
3D plotfile variable reference for the per-species plotfile names it provides.
All of the inputs below use the prefix super_droplets_moisture, which is the
name of the particle container (ERF_SuperDropletsMoist.H). Inputs that the
container inherits from the generic ERF particle container use the same prefix;
they are listed under Particles for tracer particles and behave
the same way here.
Note
These entries were reconstructed from the source rather than from a specification, so the descriptions state what each input controls and where it is read. The physical guidance – which kernel or which time integrator to prefer for a given problem – is not covered here.
Anelastic compatibility
Warning
SuperDroplets cannot currently be used in a simulation in which any AMR
level has erf.anelastic = 1. ERF detects this combination during input
validation and exits with an error.
Use SuperDroplets with compressible dynamics, or choose a supported
Eulerian microphysics scheme for an anelastic simulation.
The current Super-Droplet thermodynamic coupling uses the compressible equation of state and does not consume the hydrostatic base-state pressure used by anelastic Eulerian microphysics.
Model configuration
These inputs select which processes the model includes and what it carries.
They are read by the moisture model itself (ERF_SuperDropletsMoistInit.cpp)
rather than by the particle container, but use the same prefix.
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
species |
additional condensate species carried besides water, and ice when cold processes are on. Naming a species that is already modelled aborts the run, and at most five extra species may be given |
List of species names |
none |
aerosols |
aerosol materials carried by the super-droplets |
List of species names |
none |
include_phase_change |
include condensation and evaporation |
Boolean |
true |
include_advection |
advect the super-droplets |
Boolean |
true |
include_coalescence |
include coalescence |
Boolean |
true |
include_cold_processes |
include ice; adds ice to the species list |
Boolean |
true |
distribution_type |
how the initial condensate is distributed over the particles |
uniform, condensate_density |
uniform |
radius_raindrop |
radius [m] above which a drop is counted as rain rather than cloud water |
Real > 0 |
4.0e-5 |
rime_mass_ratio |
rime mass fraction above which a particle is treated as rimed |
Real |
0.3 |
kinematic_mode |
run with a prescribed flow field rather than a coupled one |
Boolean |
false |
dimensionality |
dimensionality of the super-droplet dynamics |
one_d_z, two_d_xz, two_d_yz, three_d |
three_d |
recycle_particles |
return deactivated particles to the domain instead of dropping them |
Boolean |
false |
num_substeps_phase_change |
sub-steps taken per time step for the phase-change update |
Integer > 0 |
1 |
initial_phase_change_relaxation |
relax the particles to an equilibrium size at initialization |
Boolean |
false |
initial_phase_change_relaxation_time |
duration [s] of that relaxation |
Real > 0 |
10.0 |
diagnostics_interval |
number of steps between writes of the distribution diagnostics |
Integer > 0 |
1 |
The species and aerosol names given here determine the per-material keys used by
the initialization and injection blocks below, and the qv_<species> and
qc_<species> plotfile names.
Solver and time integration
The condensational growth of each particle is an ODE in the droplet mass, solved per particle per step.
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
mass_change_ti_method |
time integrator for the mass-change ODE. An unrecognized value aborts the run |
backward_euler, crank_nicolson, dirk2, rk3bs, rk4 |
backward_euler |
mass_change_cfl |
CFL-like limit on the mass-change sub-step |
Real > 0 |
1000.0 |
newton_solver_rtol |
relative tolerance of the Newton solve for the implicit integrators |
Real > 0 |
1.0e-6 |
newton_solver_atol |
absolute tolerance of that solve |
Real >= 0 |
1.0e-99 (0.0 in single precision) |
newton_solver_stol |
step tolerance of that solve |
Real > 0 |
1.0e-12 |
newton_solver_maxits |
maximum Newton iterations per particle |
Integer > 0 |
10 |
mass_change_unconverged_log |
write a log entry for every particle whose mass-change solve fails to converge |
Boolean |
false |
mass_change_unconverged_log_filename |
name of that log file |
String |
unconverged_superdroplets.log |
Ventilation
The ventilation factor enhances the mass-change rate of a falling drop. It follows Bayley et al. (2025), Eq. 3, and is off by default.
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
mass_change_ventilation |
include the ventilation factor in the phase change |
Boolean |
false |
ventilation_alpha1 |
fit coefficient alpha_1 |
Real |
6.954e7 |
ventilation_beta1 |
fit exponent beta_1 |
Real |
1.963 |
ventilation_alpha2 |
fit coefficient alpha_2 |
Real |
1.069e3 |
ventilation_beta2 |
fit exponent beta_2 |
Real |
0.702 |
ventilation_fcap |
upper bound applied to the ventilation factor |
Real > 0 |
20.0 |
Coalescence
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
coalescence_kernel |
collision kernel used for coalescence. An unrecognized
value aborts the run. Note that |
sedimentation, golovin, Longs, Halls |
sedimentation |
kernel_relative_velocity |
which relative velocity enters the kernel |
terminal_velocity, absolute_velocity, radial_velocity |
terminal_velocity |
include_brownian_coalescence |
add the Brownian contribution to the kernel |
Boolean |
false |
ice_aggregation_efficiency |
collection efficiency prefactor for ice-ice aggregation |
Real |
0.1 |
coalescence_bin_size |
size, in cells, of the bins within which candidate collision pairs are drawn |
3 Integers > 0 |
1 1 1 |
terminal_velocity_model |
terminal-velocity model. One value sets the water model; a second, if given, sets the ice model. Giving more than two values aborts the run |
RogersYau, AtlasUlbrich, CloudRainShima, IceBohm |
CloudRainShima IceBohm |
Particle population and motion
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
nucleate_particles |
create new super-droplets from the vapour field |
Boolean |
false |
density_scaling |
scale the initial number density with the local air density |
Boolean |
false |
place_randomly_in_cells |
place new particles at random positions within each cell |
Boolean |
true |
prescribed_advection |
move the particles with a prescribed vertical velocity instead of the resolved flow |
Boolean |
false |
prescribed_w |
the prescribed updraft [m/s] used in that mode; a value of zero selects a sinusoidal pulse instead of a constant |
Real |
0.0 |
split_merge_amr |
split and merge particles as they cross AMR level boundaries |
Boolean |
false |
sigma0 |
width parameter of the assumed mass distribution |
Real > 0 |
0.62 |
Deactivation and recycling
A particle whose multiplicity falls below a threshold is deactivated and may be returned to the domain at a new position.
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
inactive_threshold |
multiplicity below which a particle is deactivated |
Real > 0 |
0.01 |
write_inactive_plt |
include deactivated particles in the particle plotfiles |
Boolean |
false |
recycle_xmin, recycle_xmax |
x-bounds of the region into which recycled particles are returned |
Real |
domain bounds |
recycle_ymin, recycle_ymax |
y-bounds of that region |
Real |
domain bounds |
recycle_zmin, recycle_zmax |
z-bounds of that region |
Real |
domain bounds |
Diagnostics
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
distribution_grid_size |
number of points in the one-dimensional radius grid on which size distributions are accumulated |
Integer > 0 |
100 |
distribution_rmin |
smallest radius [m] of that grid. Read only when built
with |
Real > 0 |
1.0e-6 |
distribution_rmax |
largest radius [m] of that grid. Read only when built
with |
Real > 0 |
5.0e-3 |
Initialization blocks
The initial particle population is described by one or more numbered blocks.
super_droplets_moisture.num_initializations sets how many there are, and
block i is read under the prefix super_droplets_moisture.<i> for
i = 0 ... num_initializations-1 (ERF_SuperDropletPCInitializations.cpp).
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
num_initializations |
how many initialization blocks are read |
Integer > 0 |
1 |
<i>.distribution_type |
shape of the seeded region |
box, bubble |
box |
<i>.particles_per_cell |
super-droplets created per cell in that region |
Integer > 0 |
set from the number density |
particle_box_lo, particle_box_hi |
corners of the seeded box; read when
|
3 Reals |
domain corners |
particle_bubble_center, particle_bubble_radius |
centre and radii of the seeded bubble; read when
|
3 Reals |
none |
initial_number_density |
number density of real droplets represented |
Real > 0 |
none |
initial_super_droplet_density |
number density of super-droplets used to represent them |
Real > 0 |
none |
maximum_multiplicity |
cap on the multiplicity assigned to a super-droplet |
Real > 0 |
none |
multiplicity_type |
how multiplicity is distributed across the population |
see |
none |
ice_apparent_density |
apparent density [kg/m^3] used for ice particles |
Real > 0 |
none |
Within a block, each condensate species and each aerosol is given its own
initial size or mass distribution, using keys named after that material –
<species>_init_type, and then the subset of <species>_mass_min,
<species>_mass_mean, <species>_mass_max, <species>_radius_min,
<species>_radius_mean, <species>_radius_max and a standard deviation
(_std) or geometric standard deviation (_gstd) that the chosen type
requires. Aerosol materials use the same pattern. The exact key names depend
on the configured species and aerosol names; see ERF_SDInitialization.cpp.
Injection blocks
Particles may also be injected during the run.
super_droplets_moisture.num_injections sets how many injection blocks are
read, and block i uses the prefix super_droplets_moisture.injection.<i>.
Parameter |
Definition |
Acceptable Values |
Default |
|---|---|---|---|
num_injections |
how many injection blocks are read |
Integer >= 0 |
0 |
rate |
injection rate of real droplets |
Real > 0 |
none |
sd_rate |
injection rate of super-droplets; an alternative to
deriving it from |
Real > 0 |
derived from |
min_multiplicity |
lower bound on the multiplicity of injected particles |
Real > 0 |
none |
t_start, t_stop |
simulation times [s] between which injection is active |
Real |
whole run |
domain_velocity |
velocity [m/s] imposed on the injected particles |
3 Reals |
0.0 0.0 0.0 |
fractional_tol |
tolerance used when converting a fractional injection count into whole particles |
Real > 0 |
none |
An injection block also accepts the same per-species and per-aerosol distribution keys as an initialization block.