MPI-AMRVAC
3.1
The MPI - Adaptive Mesh Refinement - Versatile Advection Code
|
This is an overview of the option that allows users to model dust+gas flows in mpi-amrvac.
The source code can be found in src/mod_dust.t
Dust in mpi-amrvac is treated as a pressureless fluid that coexists with the actual gas. Dust and gas are coupled by a dragforce. It is calculated based on the physical characteristics of gas and dust grains according to Kwok 1975, page 584 (between equations 8 and 9).
The sticking coefficient can be set according to dedicated parameters.
It is possible to combine multiple dust species in a single simulation, although there is no direct interaction (collisions, fractionation, coagulation) between them.
Because single-fluid collisions are not taken into account (i.e. dusty fluids are pressureless), a shock happening in a dusty flow will result in unphysical sharp features as dust is brought to a stop. For these reasons dust+gas simulations should be treated with caution.
Currently the only physics module that allows for the presence of dust is HD, for a lack of a clear formulation of the coupling between dust and magnetic fields. Each dust species has its own continuity and momentum equation, but lacks an energy equation because there isn't a pressure equivalent. During each timestep the dragforce between dust and gas is calculated as a local value and applied to the momentum equations of both dust and gas. A stopping time is limiting the next timestep in order to guarantee numerical stability.
Optionally, one can make this gas/dust coupling asymmetric or remove it completely:
&dust_list: dust_method = none
simply remove the coupling&dust_list: backreaction
(default is .true.
) controls the application of drag forces to gas this can be useful for simple physics tests in the limit of very small dust to gas ratiosIn order to add dust to a simulation, the user has to do the following:
hd
and dust
modulesYour parfile should contain the following
&dust_list
exampleActivate the number of dust species
mod_usr.t
setupThe following arrays need to be initialized in the user setup.
dust_size(1:dust_n_species)
dust_density(1:dust_n_species)
Those arrays define, as the names and shapes suggest, the different grain sizes and densities, in code units, for each "dusty fluid". For instance
Furthermore, note that using dust requires ndir+1
additional boundary conditions per dust species in each typeboundary_xxxx
line of the parfile.
Finally, you need to initialize densities and momenta for each dust fluid. This is a minimal example of this, implemented as part of usr_init_one_grid
dust_list
contains a boolean dust_small_to_zero
(default is .false.
). If set .true.
this activates calls to set_dusttozero
, which in turn will replace densities and momenta with exact zeros where density has become lower than a threshold value &dust_list: dust_min_rho
.