Dust Module
This module primarily implements two components: the dust transport term and the dust drag source term.
Equations for Gas-Dust System
where \(\omega\) controls the level of frictional heating, with \(\omega = 0\) turning it off and \(\omega = 1\) depositing all dissipation into the gas.
Variable Storage
The dust cell-centred conserved variables (\(\rho_{\mathrm{d}}\), \(\rho_{\mathrm{d}}\vec{v_{\mathrm{d}}}\)) are added to MultiFab.
Reconstruction and Riemann Solver
Dust reconstruction is performed together with gas using the same method. The Riemann Solver used is as follows:
In one dimension along the x-direction, given the left/right states \(W_d^{L/R}\), one can provide the Riemann flux for conserved variables as follows. The density flux reads (Huang & Bai 2022):
Similar expressions hold for the momentum flux for all directions.
This is implemented in src/dust/dustRiemannSolver.hpp and called in DustSystem::ComputeDustFluxes to compute the dust advection flux.
Time Integrator
A Strang-split method (Tedeschi-Prades et al. 2025) is used to integrate the dust-gas system. The Strang-split update can be expressed as:
where \(\mathcal{D}\) is the dust-gas drag operator and \(\mathcal{H}\) is the hydrodynamics operator (including both gas and dust transport). The hydrodynamics operator \(\mathcal{H}\) is handled using the explicit RK2 scheme. The drag operator \(\mathcal{D}\) is implemented in src/dust/DustDrag.hpp and called in QuokkaSimulation::addStrangSplitSourcesWithBuiltin via DustDrag::computeDustDrag.
Optional Picard iteration for dust–gas drag
Users may optionally enable Picard iteration for the dust–gas drag operator \(\mathcal{D}\). When the stopping time depends on the gas or dust velocity, enabling iteration is required to maintain an implicit dust drag update. See Runtime parameters for details.
User-defined dust stopping time
For a given problem, users must define a problem-specific dust stopping time by implementing the DustDrag::ComputeReciprocalStoppingTime function (note that this function should return the reciprocal of the stopping time). An example can be found in the src/problems/DustDamping test.
Also, users can directly use the dust stopping time calculation helper DustDrag::ComputeReciprocalStoppingTimeKwok to compute the physical dust stopping time, following Kwok (1975) with an optional supersonic correction. The stopping time of dust \(t_{\mathrm{s}}\) is given by:
An example of its usage can be found in the src/problems/DustDampingCorrection test.
CFL Condition for Dust
For the dust-gas coupled system with N dust species, we use the following CFL condition:
Runtime Controls
The following input parameters tune the dust module and are documented in more detail in Runtime parameters:
enable_iter_stoptime– switch of iterative dust stopping time calculation.omega– controls the level of frictional heating.print_iteration_counts- switch to turn on/off printing of dust drag iteration counts for debugging.