We use turnover masses to regulate star formation in too massive/light halos ("duty cycle"). This the mathematical model we use for the duty cycle:
$$
f_\mathrm{duty}^\mathrm{ACG}\left(M_h\right)=\exp\left(-M_\text{turn-lower}^\mathrm{ACG}/M_h\right)
$$
$$
f_\mathrm{duty}^\mathrm{MCG}\left(M_h\right)=\exp\left(-M_\text{turn-lower}^\mathrm{MCG}/M_h\right)\exp\left(-M_h/M_\text{turn-upper}^\mathrm{MCG}\right)
$$
Apparently, as was noted in #688, there have been some changes in the logic in how to determine the turnover masses between v3 and v4, at least when mini-halos are turned on (this creates some confusion, like in #726).
Turnover masses in spin temperature calculations in v4 (SOURCE_MODEL=“E-INTEGRAL”, USE_MINI_HALOS=True)
- ACG lower turnover mass is given by the maximum between
M_TURN and the output of atomic_cooling_threshold(z’’)
- MCG upper turnover mass is given by the output of
atomic_cooling_threshold(z’’)
- MCG lower turnover mass is given by (the filtered version of) the maximum between
M_TURN and the output of lyman_werner_threshold(z’) (note the latter function is evaluated at z', not z'')
Turnover masses in spin temperature calculations in v3 (USE_MINI_HALOS=True)
- ACG lower turnover mass is given by the output of
atomic_cooling_threshold(z’’) - This is a bit different than what we have in v4! (since there is no max operation between that value and M_TURN)
- MCG upper turnover mass is given by the output of
atomic_cooling_threshold(z’’)
- MCG lower turnover mass is given by (the filtered version of) the maximum between between the output of
lyman_werner_threshold(z’) with the local LW flux and v_cb, and the output of lyman_werner_threshold(z’) with zero LW flux and VAVG (if we have FIX_VCB_AVG=True). There is also protection that this value will not be greater than pow(10, LOG10_MTURN_MAX)=1e10. - This is different than what we have in v4!
Moreover, the logic for the turnover masses in v4 depends on the chosen SOURCE_MODEL. For example, if SOURCE_MODEL="L-INTEGRAL" (or has discrete halos) and USE_MINI_HALOS=True, then the ACG (MCG) lower turnover mass is taken to be the maximum between (1) M_TURN, (2) reionization feedback mass and (3) output of atomic_cooling_threshold(z) (lyman_werner_threshold(z)). The difference in the logics between different source models is confusing and makes it much more difficult to compare between them!
Finally, in both v3 and v4, if USE_MINI_HALOS=False, then the ACG lower turnover mass is just M_TURN, while completely ignoring the atomic cooling threshold and the reionization feedback. It's very confusing that ACG properties (e.g. emissivities/fluxes) depend on whether or not MCGs/mini-halos are present in the simulation.
After discussing with @andreimesinger and @steven-murray we agreed that we should:
We use turnover masses to regulate star formation in too massive/light halos ("duty cycle"). This the mathematical model we use for the duty cycle:
Apparently, as was noted in #688, there have been some changes in the logic in how to determine the turnover masses between v3 and v4, at least when mini-halos are turned on (this creates some confusion, like in #726).
Turnover masses in spin temperature calculations in v4 (
SOURCE_MODEL=“E-INTEGRAL”,USE_MINI_HALOS=True)M_TURNand the output ofatomic_cooling_threshold(z’’)atomic_cooling_threshold(z’’)M_TURNand the output oflyman_werner_threshold(z’)(note the latter function is evaluated atz', notz'')Turnover masses in spin temperature calculations in v3 (
USE_MINI_HALOS=True)atomic_cooling_threshold(z’’)- This is a bit different than what we have in v4! (since there is nomaxoperation between that value andM_TURN)atomic_cooling_threshold(z’’)lyman_werner_threshold(z’)with the local LW flux andv_cb, and the output oflyman_werner_threshold(z’)with zero LW flux andVAVG(if we haveFIX_VCB_AVG=True). There is also protection that this value will not be greater thanpow(10, LOG10_MTURN_MAX)=1e10.- This is different than what we have in v4!Moreover, the logic for the turnover masses in v4 depends on the chosen
SOURCE_MODEL. For example, ifSOURCE_MODEL="L-INTEGRAL"(or has discrete halos) andUSE_MINI_HALOS=True, then the ACG (MCG) lower turnover mass is taken to be the maximum between (1)M_TURN, (2) reionization feedback mass and (3) output ofatomic_cooling_threshold(z)(lyman_werner_threshold(z)). The difference in the logics between different source models is confusing and makes it much more difficult to compare between them!Finally, in both v3 and v4, if
USE_MINI_HALOS=False, then the ACG lower turnover mass is justM_TURN, while completely ignoring the atomic cooling threshold and the reionization feedback. It's very confusing that ACG properties (e.g. emissivities/fluxes) depend on whether or not MCGs/mini-halos are present in the simulation.After discussing with @andreimesinger and @steven-murray we agreed that we should:
M_TURN->M_TURN_STELLAR_FEEDBACK, since the current name is very confusing! (we should have a deprecation warning that tells users thatM_TURNis deprecated)M_TURN_STELLAR_FEEDBACKdefault to 5 ifUSE_MINI_HALOS=True, or 8.7 otherwise. Update: this is not possible sinceM_TURN_STELLAR_FEEDBACKlives inAstroParams, whileUSE_MINI_HALOSlives inAstroOptions!M_TURN_STELLAR_FEEDBACKon a value larger than 6 withUSE_MINI_HALOS=True. Update: apparently we already had this warning (with the lower threshold being 8). I did however change the warning message to stress that such configuration doesn't make sense!SOURCE_MODEL(up to the known bug inSpinTemperatureBox.cwhere the reionization feedback cannot be accounted since that module does not receive the previousIonizedBox- see Reionization feedback is ignored inSpinTemperatureBox.cwhenSOURCE_MODELbeing"E-INTEGRAL"or"CONST-ION-EFF"#470).REIONIZATION_FEEDBACK_MODELenum with the options"NONE", "ACG","MCG", and"BOTH". This would make it easier to determine whether the ACG turnover mass should be inhomogeneous or not.USE_MINI_HALOSis True or False.M_TURN.rst, document the current logic of the turnover masses in v4 + their logic history in previous versions. Specify any current inconsistencies we have in the code at the moment (e.g. Reionization feedback is ignored inSpinTemperatureBox.cwhenSOURCE_MODELbeing"E-INTEGRAL"or"CONST-ION-EFF"#470).updates_from_v3.rst.