Black hole-GMC encounter setup
------------------------------
|gmc_bh.mp4|
Cloning the repo
~~~~~~~~~~~~~~~~
First get the code via
.. code:: bash
git clone https://bitbucket.org/guszejnov/gizmo_imf.git
Compiling the code
~~~~~~~~~~~~~~~~~~
Many physics modules and options are specified at compile-time in GIZMO, via C precompiler flags listed in a file Config.sh that you must create. See the `gizmo documentation `__ for some explanation of what the different flags do.
Here we provide some example ``Config.sh`` files for different physics setups for simulating a black hole-GMC encounter.
Notes on OPENMP and MULTIPLEDOMAINS flags
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Note that all setups may optionally include the ``OPENMP`` and ``MULTIPLEDOMAINS`` flags for performance tuning - you will need to experiment to determine the optimal settings for your setup and machine - see the `GIZMO documentation `__ for details on what these do. For medium sized (~2e7 gas cells) runs on Frontera or Stampede-2, ``OPENMP=2`` and leaving out ``MULTIPLEDOMAINS`` (which defaults to 8) work well as a starting point.
Config.sh for a minimal MHD Setup
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This setup has no thermochemical ISM physics, just uniformly-cold, 10K, magnetized gas. It can be considered a \``bare-minimum” setup for modeling the most basic MHD dynamics of a GMC, but will produce far too many stars because there is no feedback to regulate star formation.
.. code:: bash
# MHD/plasma physics
MAGNETIC # enables MHD
CONDUCTION # Condution solver
CONDUCTION_SPITZER # Spitzer conduction
VISCOSITY # Viscosity solver
VISCOSITY_BRAGINSKII # Braginskii viscosity
DIFFUSION_OPTIMIZERS # optimization flags
# star formation criteria
GALSF # enables star formation
GALSF_SFR_VIRIAL_SF_CRITERION=0 # standard FIRE-3 virial criterion
GALSF_SFR_TIDAL_HILL_CRITERION # tidal criterion
GALSF_SFR_IMF_SAMPLING # we sample discrete O stars for more realistic feedback vs. IMF-averaged
SINGLE_STAR_AND_SSP_HYBRID_MODEL=0.01 # Type 5 star particles form if mass resolution is smaller than this; otherwise Type 4 star cluster particles
# sink particle/black hole settings
SINGLE_STAR_TIMESTEPPING=0
BLACK_HOLES
BH_CALC_DISTANCES
SINGLE_STAR_SINK_DYNAMICS
BH_SWALLOWGAS
BH_GRAVCAPTURE_GAS
BH_GRAVCAPTURE_FIXEDSINKRADIUS
# Gravity/integration settings
RT_ISRF_BACKGROUND=1
ADAPTIVE_GRAVSOFT_FORGAS
TIDAL_TIMESTEP_CRITERION
ADAPTIVE_TREEFORCE_UPDATE=0.125
GRAVITY_ACCURATE_FEWBODY_INTEGRATION
SINGLE_STAR_FB_TIMESTEPLIMIT
# Boundary conditions
BOX_PERIODIC
GRAVITY_NOT_PERIODIC
# FIRE-3 ISM physics + feedback model
FIRE_PHYSICS_DEFAULTS=3
Config.sh for full ISM physics setup
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This setup includes all of the prescriptions for star formation, feedback, and ISM physics as described in the `FIRE-3 `__ paper.
.. code:: bash
# MHD/plasma physics
MAGNETIC # enables MHD
CONDUCTION # Condution solver
CONDUCTION_SPITZER # Spitzer conduction
VISCOSITY # Viscosity solver
VISCOSITY_BRAGINSKII # Braginskii viscosity
DIFFUSION_OPTIMIZERS # optimization flags
# star formation criteria
GALSF # enables star formation
GALSF_SFR_VIRIAL_SF_CRITERION=0 # standard FIRE-3 virial criterion
GALSF_SFR_TIDAL_HILL_CRITERION # tidal criterion
GALSF_SFR_IMF_SAMPLING # we sample discrete O stars for more realistic feedback vs. IMF-averaged
SINGLE_STAR_AND_SSP_HYBRID_MODEL=0.01 # Type 5 star particles form if mass resolution is smaller than this; otherwise Type 4 star cluster particles
# sink particle/black hole settings
SINGLE_STAR_TIMESTEPPING=0
BLACK_HOLES
BH_CALC_DISTANCES
SINGLE_STAR_SINK_DYNAMICS
BH_SWALLOWGAS
BH_GRAVCAPTURE_GAS
BH_GRAVCAPTURE_FIXEDSINKRADIUS
# Gravity/integration settings
RT_ISRF_BACKGROUND=1
ADAPTIVE_GRAVSOFT_FORGAS
TIDAL_TIMESTEP_CRITERION
ADAPTIVE_TREEFORCE_UPDATE=0.125
GRAVITY_ACCURATE_FEWBODY_INTEGRATION
SINGLE_STAR_FB_TIMESTEPLIMIT
# Boundary conditions
BOX_PERIODIC
GRAVITY_NOT_PERIODIC
# FIRE-3 ISM physics + feedback model
FIRE_PHYSICS_DEFAULTS=3
Once you have put your desired flags in your Config.sh, make sure your machine is the one uncommented in ``Makefile.systype``, then run the ``make`` command. This generates the ``GIZMO`` binary.
Initial conditions
~~~~~~~~~~~~~~~~~~
Turbulent GMC initial conditions can be generated with the code `MakeCloud `__. Clone the repo and link MakeCloud.py to a directory in your path so you can use from the command line. The command line interface options can be listed by running ``MakeCloud.py -h``. As an example, to generate a 2e6msun, 100pc cloud and a 1e5msun black hole 500pc away moving toward it at 30km/s, with a mass resolution of 10msun, specifying that we want to use km/s as our unit velocity and Gauss as our unit magnetic field, we would do:
.. code:: bash
MakeCloud.py --M=2e6 --R=100 --N=200000 --Mstar=1e5 --v_star=30,0,00 --x_star=0,500,500 --v_unit=1000 --B_unit=1
This will generate an HDF5 initial conditions file and a parameters file containing the runtime parameters for the run.
Running the code
~~~~~~~~~~~~~~~~
Once you have your GIZMO binary, all required datafiles (`spcool_tables `__ and `TREECOOL `__), and your parameters file in your simulation directory, you are ready to run the simulation. If you are working on a cluster, this will generally involve submitting a batch job with the command to run the code. An example submit script using the SLURM queuing system on Frontera is
.. code:: bash
#!/bin/bash
#SBATCH -J M2e6_R100_Z1_S0_A2_B0.1_I1_Res58_n2_sol0.5_42 -p development -N 1 --ntasks-per-node 56 -t 01:00:00 -A AST21002
source $HOME/.bashrc
ibrun ./GIZMO ./params_M2e6_Mstar100000_R100_Z1_S0_A2_B0.1_I1_Res58_n2_sol0.5_42.txt 0 1>gizmo.out 2>gizmo.err &
wait
which one would submit to the queue via the command ``sbatch myscript.sh``. Note the flag ``0`` after the path of the params file: this flag specifies whether the code is to start a brand new simulation from the IC (0), restart an already-existing simulation with checkpoint files (1), or restart from a snapshot (2).
Visualization
~~~~~~~~~~~~~
There are many tools for visualizing GIZMO simulations. The most widely-used is probably yt. A useful rendering backend is `meshoid `__, and the quickstart shows you how to make vaguely publish-worthy colormap plot of the data.
The STARFORGE collaboration has also developed a python package `CrunchSnaps `__ originally for doing large rendering runs like `this `__, but the package also contains the script ``SinkVis2.py`` that implements a simple command-line interface for making quick renders of the simulation data. Once the package is installed and ``SinkVis2.py`` is in your path, you can do a simple rendering run on a simulation via
.. code:: bash
SinkVis2.py snapshot*.hdf5
See ``SinkVis2.py -h`` for detailed options.
.. |gmc_bh.mp4| image:: /gmc_bh.mp4