DUST_LIVE
Particle-based framework treating dust as live simulation particles. Dust particles represent ensembles of physical grains and are subject to dynamical forces. In principle, dust motion can be decoupled from gas motion. Optionally, DUST_LIVE allows dust particles to represent grains of different sizes using a discretized grain size distribution that can evolve in time. Grain size evolution models dust grain collisions with gas-phase metals and other dust grains and is implemented in a subgrid fashion.
Usage
By default, simulation dust particles move dynamically according to gravity and an aerodynamic drag force. The drag force can be solved with a semi-implicit time integrator, which alleviates the need to resolve the (possibly short) drag stopping time-scale. Instead, it makes use of the analytic behavior of drag over time intervals where the stopping time-scale is roughly constant.
Optionally, dust particles can be assigned grain size distributions that track the number of grains of different sizes. Unlike a stellar IMF, the grain size distribution can vary in time and from dust particle to dust particle. For a dust particle, the grain size distribution in bin \(i\) is parameterized as
where \(\mathrm{d} n(a, t) / \mathrm{d}a \times \Delta a\) is the number of grains in the size interval \([a, a + \Delta a]\) at time \(t\) on a dust particle, \(N_i(t)\) and \(s_i(t)\) are the number of grains and slope in bin \(i\), \(a_{i}^\mathrm{e}\) and \(a_{i+1}^\mathrm{e}\) are the bin edges, and \(a_{i}^\mathrm{c} = (a_{i}^\mathrm{e} + a_{i+1}^\mathrm{e})/2\) is the bin center.
Star particles stochastically spawn dust particles during ISM enrichment according to tabulated dust yields. This approach creates the correct amount of dust in expectation, and the desired mass of simulation dust particles can be adjusted to balance computational cost and resolution.
Depending on which configuration options are on, various snapshot fields are written. These are summarized below.
HDF5 Dataset |
Physical Factor |
Units |
Description |
|---|---|---|---|
Coordinates |
\(a / h\) |
UnitLength |
Same as in snapshots. |
Velocities |
\(\sqrt{a}\) |
UnitVelocity |
Same as in snapshots. |
Masses |
\(1 / h\) |
UnitMass |
Same as in snapshots. |
Dust_GasHsml |
\(a / h\) |
UnitLength |
Smoothing length enclosing gas neighbors around a dust particle. |
Dust_GasDensity |
\(h^2 / a^3\) |
UnitMass/UnitLength^3 |
Local gas density around a dust particle. |
Dust_NumGrains |
\(1\) |
none |
Array indicating number of grains in each grain size bin. |
Dust_BinSlopes |
\(1\) |
1/micron^2 |
Array indicating bin slope in each grain size bin. |
Dust_MetalFractions |
\(1\) |
none |
Array indicating which fraction of dust particle mass comes from different chemical elements. |
Dust_DustHsml |
\(a / h\) |
UnitLength |
Smoothing length enclosing dust neighbors around a dust particle. |
Dust_DustDensity |
\(h^2 / a^3\) |
UnitMass/UnitLength^3 |
Local dust density around a dust particle. |
Dust_NgbID |
none |
none |
ID of closest dust neighbor that a dust particle could derefine into. |
Dust_IsWind |
none |
none |
Flag indicating whether a dust particle is in wind phase (1) or not (0). |
Dust_WindTimeLeft |
\(1 / h\) |
UnitLength/UnitVelocity |
Amount of time a dust particle has left in wind phase. |
Additional Parameters
The DUST_LIVE module requires several parameters, depending on which configuration options are active.
DesNumNgbDustNumber of neighbors (gas or dust) around dust particles used in kernel estimates. Default value: 64.MaxNumNgbDeviationDustTolerance in number of neighbors for searches around dust particles. Default value: varies.MinGrainSizeMinimum size for grain size distribution, in microns. Default value: 0.001.MaxGrainSizeMaximum size for grain size distribution, in microns. Default value: 1.0.GrainDensityPhysical density of a solid dust grain, in g cm^-3. Default value: 2.4.MaxBinFracMassChgFractional amount by which a grain size distribution bin is allowed to change in mass during a (possibly sub-cycled) time-step. Default value: 0.1.GrainDataPathPath to HDF5 file containing various initialization data (dust nucleosynthetic yields, initial grain size distributions, etc.). Default value: varies.DustTargetFracFraction of initial mass of a star particle that converts to a dust particle when stochastic condition is met. Default value: 1.0e-1.DustMaxFracFraction of TargetGasMass, indicating the maximum allowable dust mass before refinement occurs. Default value: 1.0.DustMinFracFraction of TargetGasMass, indicating the minimum allowable dust mass before derefinement occurs. Default value: 1.0e-2.NumDustPerSpawnNumber of dust particles created when a star particle stochastically decides to form dust. If set to one (recommended), a single dust particle contains the full grain size distribution. If set greater than one, multiple dust particles are created with contiguous, equal-mass chunks of the grain size distribution. Default value: 1.DustSubcycleFacForce dust particle time-steps to resolve this factor times the grain size evolution time-step. For example, setting this value to 2.0 allows dust particle time-steps to be twice as large as what grain size evolution time-steps would require. Default value: varies.
Additional Config.sh Options
- DUST_LIVE
master switch, set to an integer for the particle type of dust in output
- DL_STOPPING_TIME_CORRECTION
calculate drag stopping time-scales using correction for supersonic motion
- DL_DRAG_SEMI_IMPLICIT
highly recommended: use second-order semi-implicit drag integrator instead of explicit integrator
- DL_GRAIN_BINS=10
set to an integer N and track grain size distribution broken up into N log-spaced size bins
- DL_GRAIN_BINS_PIECEWISE_LINEAR
highly recommended: discretize grain size distribution using piecewise linear scheme instead of just piecewise constant scheme
- DL_GROWTH
allow dust grains to accrete gas-phase metals
- DL_SPUTTERING
allow dust grains to shrink and lose mass through thermal sputtering
- DL_SNE_DESTRUCTION
allow dust grains to shrink and lose mass through supernova destruction
- DL_SHATTERING
allow dust grains to collide together and shatter to smaller sizes
- DL_COAGULATION
allow dust grains to collide together and coagulate to larger sizes
- DL_SHATTERING_DETAILED_INTEGRALS
calculate shattering and coagulation rates using full piecewise linear grain size discretization instead of piecewise constant approximation; this option requires more floating point operations
- DL_PRODUCTION
stochastically spawn dust particles from star particles based on dust yield calculations; requires GFM (for star particles) and DL_GRAIN_BINS (since dust particles are initialized with grain size information)
- DL_REFINEMENT
split dust particles in two whenever masses exceed a threshold value
- DL_DEREFINEMENT
merge dust particles into a neighbor whenever masses drop below a threshold value, with option set to an integer (0=merge into closest dust neighbor with mass above derefinement mass limit, 1=merge into closest dust neighbor without regard to neighbor mass)
- DL_SUBCYCLE
set to an integer N and perform grain size evolution over N subcycles within particle timesteps
- DL_WINDS
give dust particles stochastic kicks to mimic winds; requires GFM_WINDS, which will set the method for calculating wind direction
- DL_ONLY_HIGHRES_DUST
in zoom-in runs, only spawn dust particles from high-resolution star particles to avoid the formation of very large dust particles in low-resolution regions; requires DL_REFINEMENT
Usage Policy and Citation
Users are free to adopt DUST_LIVE in their own work. We ask that any papers based on this work cite
McKinnon R., Vogelsberger M., Torrey P., Marinacci F., Kannan R., 2018, MNRAS