This is a numerical setup in PLUTO
that implements the cloud-crushing problem with optically thin radiative cooling
Important
We are using a custom-modified version of PLUTO
4.4 patch 2. The original PLUTO
code has been written and maintained by Andrea Mignone & collaborators.
If you need help setting up PLUTO
check this video: https://youtu.be/r9u9rUA1_fw and also this link here (Credit: Ritali Ghosh). You may also look at the comprehensive user guide that comes with PLUTO
here.
- To set up the problem, one needs to run the Python script
prob-prepare.py
located inpython-scripts
directory in the repo (tested on Python version 3.11). - The following are the free parameters in the problem that can be set in the Python script.
- Cloud to Wind density contrast
$\chi$ . - Wind to Cloud temperature contrast
$\eta$ . - Mach number of the wind
$\mathcal{M}$ . - Cooling time of mixed gas to cloud crushing time
$t_{\rm cool, mix}/t_{\rm cc}$ , which sets the cloud size in physical units. - Cloud temperature
$T_{\rm cl}$ . - Metallicity with respect to Solar
$Z/Z_\odot$ . - The initial position of the center of the spherical cloud in the simulation domain in the wind direction.
- Adiabatic index of the gas
$\gamma$ .
- Cloud to Wind density contrast
- Additionally, to get quantities in physical units (CGS), one needs to set the cloud density
$n_{\rm cl}$ , which doesn't directly come up in our problem, but sets the code units to CGS conversion factor. - Other additional flags are also set in the script. The following are some of the most important ones.
-
cooling = True/False
Sets optically thin radiative cooling on/off in the simulation. -
catalyst = False
Sets whether in-situCatalyst
visualization support will be enabled. -
auto_compile = True
Sets whether to enable/disable automatic compilation & creation of a separate directory for the compiled binary to run. -
boost = True
Sets whether to turn Gallilean frame boost on/off to track the cloud and save computational expense (see Dutta+19 for the algorithm). - Change
cooltable_name
in the Python script to use any cooling rate table that must be placed in thecooltables
directory.
-
- Edit the sample
local_make
to linkhdf5
library &Catalyst
in-situ visualization library (if enabled). - Sample job scripts in
slurm
is provided in thejobscripts
directory that can be configured according to the cluster environment where the code will be running.
Note
The Python script is self-contained and generates everything necessary for these cloud-crushing simulations. There is no need to run setup.py
as is traditionally done in PLUTO
.
Like many other numerical problems, cloud-crushing simulations behave best when the code units reflect the dimensions involved in the problem. One such choice is as follows.
- Code length = Cloud radius
- Code density = Wind density
- Code velocity = Wind velocity
Using fluid equations rescaled to these units, it can be shown that the gas pressure/temperature is a degenerate quantity in the absence of radiative cooling. In these code units, the following are the fluid quantities.
- Radius of cloud = 1.0
- Density of cloud =
$\chi$ - Velocity of the cloud = 0
- Pressure in the cloud =
$\frac{\chi/\eta}{\gamma \mathcal{M}^2}$ - Density of the wind = 1.0
- Velocity of the wind = 1.0
- Pressure in the wind =
$\frac{1}{\gamma \mathcal{M}^2}$
In these code units, the cloud-crushing time has a trivial value
As a demonstration of this code, the following is the evolution of cold mass with radiative cooling at different values of
Cloud-crushing simulations are self-similar for different physical properties of the cloud. This means the cloud evolution is identical for different values of these cloud properties when appropriately scaled. Nevertheless, differences can arise in evolution even for degenerate properties, especially in late times, which are purely numerical. Determining this degeneracy across parameters is not only useful in saving computation while making a parameter search of cloud survival/destruction but also in providing a guideline on the robust choice of code units
. These code units
, by construction, generate identical initial conditions for different values of degenerate parameters. It is important to note that the set of degenerate parameters is also dependent on the physics involved in the simulations.
We solve the following equations in the presence of optically radiative cooling on PLUTO.
The symbols here have their usual meaning, and this set of equations is closed by the ideal gas equation of state
Note
Apart from the free parameters described earlier, the cloud number density
Therefore, the de-dimensionalized equations (de-dimenionalized variables are represented by
Here
With
By design,
One can clearly see that any quantity that doesn't appear in either the equations or in the initialization is degenerate. For example,
The following cartoon demonstrates the initialization in our code.