Warning
The radiative transfer schemes are still in development and are not useable at this moment. This page is currently a placeholder to document new features and requirements as the code grows.
Radiative Transfer in SWIFT
We currently support two methods for radiative transfer in SWIFT: GEAR-RT and SPHM1RT. They are both moment-based methods. For documentation on each of these methods, please refer to their respective pages.
This page contains some general documentation on running SWIFT with RT, which is valid irrespective of the exact method used.
Requirements
To be able to run with radiative transfer, you’ll need to run swift with the following flags:
swift --radiation --hydro --feedback --stars --self-gravity [and/or] --external-gravity
Some notes on these runtime flags:
The radiation data is coupled to the gas data, so you can’t run without
--hydro
. (Also, the whole point of these schemes is the interaction between gas and radiation, so why would you want to?)Currently the only source of radiation are stars, so you need
--stars
. If you want to run without radiative sources, still run the code with--stars
, even if you don’t have any stars in your initial conditions.Running with
--stars
requires some form of gravity, be it self-gravity or external gravity. Since we need stars, we inherit this requirement. If you want no gravity, run with--external-gravity
and set the external potential to zero.We need
--feedback
in order to have meaningful smoothing lengths for stars. However, you don’t need any specific feedback model; It’ll work even if you configured--with-feedback=none
.
RT Sub-Cycling
SWIFT allows to sub-cycle the solution of radiative transfer steps (both photon propagation and thermochemistry) with respect to the hydrodynamics time steps. Basically you can tell SWIFT to run up to X radiative transfer steps during a single hydrodynamics step for all particles in the simulation. The aim is to not waste time doing unnecessary hydrodynamics updates, which typically allow for much higher time steps compared to radiation due to the propagation speed of the respective advected quantity.
You will need to provide an upper limit on how many RT sub-cycles per hydro step you want to allow. That is governed by the
TimeIntegration:
max_nr_rt_subcycles: 128 # maximal number of RT sub-cycles per hydro step
parameter, which is mandatory for any RT runs. To turn off sub-cycling and couple the radiative transfer and the hydrodynamics time steps one-to-one, set this parameter to either 0 or 1.
Due to the discretization of individual particle time steps in time bins
with a factor of 2 difference in time step size from a lower to a higher
time bin, the max_nr_rt_subcycles
parameter itself is required to be
a power of 2 as well.
Note that this parameter will set an upper limit to the number of sub-cycles
per hydro step. If the ratio of hydro-to-RT time step is greater than what
max_nr_rt_subcycles
allows for, then the hydro time step will be reduced
to fit the maximal threshold. If it is smaller, the particle will simply do
fewer sub-cycles.
Reading the output of time-step information
When running with sub-cycling enabled, additional time step information is written.
Firstly, whenever you run with a SWIFT compiled with any RT method, it will also
create a file called rtsubcycles.txt
, which contains analogous data to the
timesteps.txt
file. However, if you run without sub-cycling (i.e. with
TimeIntegration:max_nr_rt_subcycles
set to 0
or 1
), then the file
will remain empty (save for the header information). That’s because its contents
would be redundant - all the data will be identical to what will be written in
timesteps.txt
.
Secondly, when running with RT and sub-cycling enabled, the output to STDOUT
contains additional information. More concretely, it changes from something like this:
[00003.0] engine_dump_snapshot: Dumping snapshot at t=0.000000e+00
[00003.1] engine_print_stats: Saving statistics at t=0.000000e+00
# Step Time Scale-factor Redshift Time-step Time-bins Updates g-Updates s-Updates sink-Updates b-Updates Wall-clock time [ms] Props Dead time [ms]
0 0.000000e+00 1.0000000 0.0000000 0.000000e+00 1 56 18000 31000 13000 0 0 2610.609 281 101.971
1 1.220703e-05 1.0000000 0.0000000 1.220703e-05 43 43 11 11 0 0 0 61.686 1 1.324
2 2.441406e-05 1.0000000 0.0000000 1.220703e-05 43 44 12685 12685 0 0 0 1043.433 0 35.461
3 3.662109e-05 1.0000000 0.0000000 1.220703e-05 43 43 11 11 0 0 0 51.340 1 1.628
4 4.882813e-05 1.0000000 0.0000000 1.220703e-05 43 45 18000 18000 0 0 0 1342.531 0 36.831
5 6.103516e-05 1.0000000 0.0000000 1.220703e-05 43 43 11 11 0 0 0 48.412 1 1.325
6 7.324219e-05 1.0000000 0.0000000 1.220703e-05 43 44 12685 12685 0 0 0 1037.307 0 34.718
7 8.544922e-05 1.0000000 0.0000000 1.220703e-05 43 43 11 11 0 0 0 47.791 1 1.362
8 9.765625e-05 1.0000000 0.0000000 1.220703e-05 43 46 18000 18004 4 0 0 1410.851 0 35.005
9 1.098633e-04 1.0000000 0.0000000 1.220703e-05 43 43 11 11 0 0 0 48.322 1 1.327
10 1.220703e-04 1.0000000 0.0000000 1.220703e-05 43 44 12685 12685 0 0 0 1109.944 0 33.691
To something like this:
[rt-sc] 0 0.000000e+00 1.000000 0.000000 1.220703e-05 1 56 18000 - - - - - - -
[rt-sc] 1 1.220703e-05 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.683 - 0.170
[rt-sc] 2 2.441406e-05 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 100.543 - 5.070
[rt-sc] 3 3.662109e-05 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.762 - 0.208
[rt-sc] 4 4.882813e-05 1.000000 0.000000 1.220703e-05 43 45 18000 - - - - 124.011 - 6.396
[rt-sc] 5 6.103516e-05 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.831 - 0.254
[rt-sc] 6 7.324219e-05 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 107.172 - 5.572
[rt-sc] 7 8.544922e-05 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.759 - 0.227
[00003.0] engine_dump_snapshot: Dumping snapshot at t=0.000000e+00
[00003.1] engine_print_stats: Saving statistics at t=0.000000e+00
# Step Time Scale-factor Redshift Time-step Time-bins Updates g-Updates s-Updates sink-Updates b-Updates Wall-clock time [ms] Props Dead time [ms]
0 0.000000e+00 1.0000000 0.0000000 0.000000e+00 1 56 18000 31000 13000 0 0 2941.254 281 120.261
[rt-sc] 0 9.765625e-05 1.000000 0.000000 1.220703e-05 43 46 18000 - - - - - - -
[rt-sc] 1 1.098633e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.990 - 0.417
[rt-sc] 2 1.220703e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 104.155 - 5.744
[rt-sc] 3 1.342773e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.765 - 0.176
[rt-sc] 4 1.464844e-04 1.000000 0.000000 1.220703e-05 43 45 18000 - - - - 125.237 - 5.605
[rt-sc] 5 1.586914e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.856 - 0.282
[rt-sc] 6 1.708984e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 112.171 - 5.251
[rt-sc] 7 1.831055e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.861 - 0.241
1 9.765625e-05 1.0000000 0.0000000 9.765625e-05 46 46 4 8 4 0 0 546.225 1 24.648
[rt-sc] 0 1.953125e-04 1.000000 0.000000 1.220703e-05 43 47 18000 - - - - - - -
[rt-sc] 1 2.075195e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.842 - 0.212
[rt-sc] 2 2.197266e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 126.674 - 6.295
[rt-sc] 3 2.319336e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.797 - 0.289
[rt-sc] 4 2.441406e-04 1.000000 0.000000 1.220703e-05 43 45 18000 - - - - 142.086 - 5.511
[rt-sc] 5 2.563477e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.919 - 0.196
[rt-sc] 6 2.685547e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 131.550 - 5.896
[rt-sc] 7 2.807617e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.809 - 0.186
2 1.953125e-04 1.0000000 0.0000000 9.765625e-05 46 47 27 43 16 0 0 558.226 0 27.711
[rt-sc] 0 2.929688e-04 1.000000 0.000000 1.220703e-05 43 46 18000 - - - - - - -
[rt-sc] 1 3.051758e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.738 - 0.207
[rt-sc] 2 3.173828e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 122.572 - 5.170
[rt-sc] 3 3.295898e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 1.063 - 0.345
[rt-sc] 4 3.417969e-04 1.000000 0.000000 1.220703e-05 43 45 18000 - - - - 147.110 - 5.409
[rt-sc] 5 3.540039e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 1.091 - 0.350
[rt-sc] 6 3.662109e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 134.273 - 6.561
[rt-sc] 7 3.784180e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.825 - 0.298
3 2.929688e-04 1.0000000 0.0000000 9.765625e-05 46 46 4 8 4 0 0 557.164 0 24.760
Here’s what’s going on here:
All lines beginning with the prefix
[rt-sc]
are time step data of RT sub-cycling steps, i.e. of sub-cycles.The sub-cycling index follows the prefix
[rt-sc]
. For example, a line beginning with[rt-sc] 2
is the sub-cycle with index2
of some time step.The “sub-cycle” with index
0
is the one performed alongside all other tasks (e.g. hydro, gravity, stellar feedback, etc.) All other sub-cycle indices indicate actual sub-cycles, i.e. actual intermediate steps where only radiative transfer is being solved (or put differently: where only RT tasks are being launched).The sub-cycling lines are written to
STDOUT
before the line of the full time step data. More precisely, in the above example, time step1
with all its RT sub-cycles is written toSTDOUT
as this block:
# Step Time Scale-factor Redshift Time-step Time-bins Updates g-Updates s-Updates sink-Updates b-Updates Wall-clock time [ms] Props Dead time [ms]
[ ... some lines omitted ... ]
[rt-sc] 0 9.765625e-05 1.000000 0.000000 1.220703e-05 43 46 18000 - - - - - - -
[rt-sc] 1 1.098633e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.990 - 0.417
[rt-sc] 2 1.220703e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 104.155 - 5.744
[rt-sc] 3 1.342773e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.765 - 0.176
[rt-sc] 4 1.464844e-04 1.000000 0.000000 1.220703e-05 43 45 18000 - - - - 125.237 - 5.605
[rt-sc] 5 1.586914e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.856 - 0.282
[rt-sc] 6 1.708984e-04 1.000000 0.000000 1.220703e-05 43 44 12685 - - - - 112.171 - 5.251
[rt-sc] 7 1.831055e-04 1.000000 0.000000 1.220703e-05 43 43 11 - - - - 0.861 - 0.241
1 9.765625e-05 1.0000000 0.0000000 9.765625e-05 46 46 4 8 4 0 0 546.225 1 24.648
Let’s have a closer look at the written data:
In step
1
, 4 hydro particles, 8 gravity particles, and 4 star particles were updated. (You can see that in the last line.)The integration of the full step was performed over a time step with size
9.765625e-05
. That is valid for all physics except radiative transfer. The RT was integrated 8 times with a time step size of1.220703e-05
. You can see this in the sub-cycling output lines.Each RT sub-cycling line also tells you the minimal and maximal time bin size that was worked on, as well as how many hydro particles underwent RT updates.
RT sub-cycles only ever update radiative transfer. There will never be any gravity, star, sink, or black hole particle updates in it.
Since the sub-cycle with index
0
is performed alongside all other physics during the main step, the isolated wall-clock time and dead time fields are not available for it.The wall-clock time and dead time fields in the full step line (the one starting without
[rt-sc]
) include the data of the sub-cycles for this step as well.