Main Code

ASLOTH main program

program  asloth
Use :

config, defined_types, eps_wrapper, tree_memory_arrays_passable, numerical_parameters, resolution_parameters, to_file, input_files, check_flags, utility, volume_fractions, feedback_routines (node_feedback()), bubble_tree (start_btree()), tree_reader, tree_initialization, star_formation, read_yields, metal_functions, populations, sf_routines, crit_masses (set_mcrit()), cosmic_time (set_cosmic_time())

Call to:

set_default_config(), read_config(), check_compiler_flags(), assert(), init_outputs(), set_cosmic_time(), set_mcrit(), read_tree(), make_eps_tree(), init_stellar_populations(), assign_yields(), output_pop(), start_btree(), init_tree(), print_bar(), real_to_string3(), mem_report(), clean_tree(), get_fracs(), node_feedback(), sf_step(), add_parent_to_tree(), add_to_sfr(), add_to_feedback_volumes(), add_to_base_mdf(), add_to_base_mstariisurv(), write_files_reali(), outputs_satellites(), write_mw_properties(), write_files(), close_outputs()

Configuration

config

Quick access

Variables:

config_file, cubic_box, nthreads

Routines:

read_config(), set_default_config()

Needed modules

  • numerical_parameters

  • input_files: List of input files

  • random_object: This is an object oriented version of the ran3 algorithm from numerical recipes Before using a rng type object it needs to be initialized by calling rng%init(seed) where seed is an integer seed Afterwards rng%get_ran() will return a random real in the range [0,1)

Variables

  • config/config_file [character,protected]

    e.g. param_template.nml

  • config/cubic_box [logical,protected]
  • config/nthreads [integer,protected]

Subroutines and functions

subroutine  config/set_default_config()
Called from:

asloth

subroutine  config/read_config(fname)
Parameters:

fname [character,in]

Use :

omp_lib

Called from:

asloth

Type definitions

defined_types

Quick access

Types:

node_arrays, stars_highmass, treenode

Routines:

add_baryons(), del_high_mass(), make_stars_high_mass(), print_all_props(), set_baryons()

Needed modules

Types

  • type  defined_types/treenode

    class for storing information of each halo at each time

    Type fields:
    • % base [treenode,pointer] :: which halo will this one be at at the the lowest redshift

    • % child [treenode,pointer/optional/default=>null()]

    • % desc_id [integer] :: descendent id

    • % firstpopiisf [logical,optional/default=.true.]

    • % highstars [stars_highmass,pointer/optional/default=>]

    • % highstars_first [stars_highmass,pointer/optional/default=>]

    • % highstars_last [stars_highmass,pointer/optional/default=>]

    • % i_checked [logical] :: has this halo already been checked for stochastic feedback?

    • % i_enr [logical,optional/default=.false.] :: is this halo enriched?

    • % i_ion [logical,optional/default=.false.] :: is the halo affected by external ionising radiation

    • % i_mcrit [logical,optional/default=.false.] :: is the halo above the critical mass?

    • % i_sf [logical,optional/default=.false.] :: this flag controls whether the SF_step subroutine is called

    • % i_sub [logical,optional/default=.false.] :: is this a subhalo?

    • % id [integer] :: halo id

    • % igm_z (*) [real,allocatable] :: ambient metallicity

    • % jlevel [integer] :: which time-step is the halo at

    • % l_ion [real] :: ionising radiation emission rate [Photons/second]

    • % llstars [stars_highmass,pointer/optional/default=>]

    • % llstars_first [stars_highmass,pointer/optional/default=>]

    • % llstars_last [stars_highmass,pointer/optional/default=>]

    • % lp_id [integer] :: last progenitor depthfirst id

    • % m_cold [real] :: cold gas mass [M_sun]

    • % m_filter [real,optional/default=0]

    • % m_hot [real] :: hot gas mass [M_sun]

    • % m_metals (,) [real,allocatable]

    • % m_out [real] :: outflow mass [M_sun]

    • % m_peak [real] :: peak mass [Msun]

    • % m_peak_filter [real,optional/default=0]

    • % m_starii [real] :: stellar mass Pop II [M_sun]

    • % m_starii_surv [real,optional/default=0.0] :: Msun

    • % m_stariii [real] :: stellar mass Pop III [M_sun]

    • % mhalo [real] :: mass of halo

    • % nchild [integer] :: number of child nodes

    • % null [node_arrays,pointer]

    • % num_popiiprogenitor [integer,optional/default=0] :: how many Pop II forming progenitors

    • % parent [treenode,pointer/optional/default=>null()]

    • % pop [integer]

    • % r_en [real,optional/default=0] :: enrichment radius [physical Mpc]

    • % r_ion [real,optional/default=0] :: ionised radius [physical Mpc]

    • % sibling [treenode,pointer/optional/default=>null()]

    • % this_array [node_arrays,pointer/optional/default=>]

    • % x (3) [real] :: position

  • type  defined_types/node_arrays
    Type fields:
    • % mdf_array (,) [real,allocatable]

  • type  defined_types/stars_highmass
    Type fields:
    • % bin_id [integer,optional/default=0] :: which bin it belongs, should be consistent with IMF arrays

    • % next [stars_highmass,pointer/optional/default=>]

    • % null [stars_highmass,pointer]

    • % num [integer,optional/default=0]

    • % pop [integer,optional/default=0] :: PopII (2) or PopIII (3) stars

    • % prev [stars_highmass,pointer/optional/default=>]

    • % timeborn [real,optional/default=0.0] :: in order to know when the stars die

    • % z (*) [real,allocatable] :: Zgas [Z/Zsun] when the star is born. Related with SN yields.

Subroutines and functions

function  defined_types/make_stars_high_mass(n, i, timeborn, zgas, pop)
Parameters:
  • n [integer,in]

  • i [integer,in]

  • timeborn [real,in]

  • zgas (*) [real,in]

  • pop [integer,in]

Return:

res [stars_highmass]

subroutine  defined_types/del_high_mass(this)
Parameters:

this [stars_highmass,inout]

subroutine  defined_types/set_baryons(this, other)

copies baryonic properties from one halo to another (overwrites)

Parameters:
  • this [real]

  • other [real]

subroutine  defined_types/add_baryons(this, other)

adds baryonic properties of one halo to another

Parameters:
  • this [real]

  • other [real]

subroutine  defined_types/print_all_props(a)

Printing function that prints various porperties of a halo in order to allow easier tracing of errors and unexpected changes

Parameters:

a [treenode,in]

Tree Reader

tree_reader

Quick access

Routines:

read_tree()

Needed modules

Subroutines and functions

subroutine  tree_reader/read_tree(count, read_mass)
Parameters:
  • count [integer,out] :: reading tree

  • read_mass [real,out]

Called from:

asloth

Call to:

print_bar(), mem_report()

Tree initialization

tree_initialization

Description

prepares tree for running asloth

Quick access

Routines:

filter_virial_masses(), init_tree(), set_tree_params()

Subroutines and functions

subroutine  tree_initialization/init_tree(count, n_jcurrent)
Parameters:
  • count [integer,in]

  • n_jcurrent (nlev_max) [integer,out]

Use :

defined_types, numerical_parameters, tree_memory_arrays_passable, utility, crit_masses, cosmic_time, resolution_parameters, metalmix_dz, filter_module, trace_mdf, metals

Called from:

asloth

Call to:

print_bar(), mem_report(), read_lookups(), filter_virial_masses(), init_mdf()

subroutine  tree_initialization/filter_virial_masses()
Use :

defined_types, numerical_parameters, tree_memory_arrays_passable, filter_module

Called from:

init_tree()

Call to:

compute_savgol_coeff(), print_bar(), savgol_filter(), savgol_free()

subroutine  tree_initialization/set_tree_params()
Use :

power_spectrum_parameters, modified_merger_tree, numerical_parameters, input_files, time_parameters

Called from:

make_eps_tree()

numerical and resolution parameters

numerical parameters

Quick access

Variables:

a_radiation, ab_mag_norm, ab_norm, alpha_b, alpha_ion, alpha_outflow, ang2m, atomic_mass_helium, atomic_mass_hydrogen, bt_delta, bt_max, bt_min, btnbin, btnpad, c_cgs, c_hii, c_light, c_light_angstroms, c_light_cm, clump, cm32m3, crit_freq, deca, delta200, deltaeds, e_51, em_rdisk_half_scale_o2, eps3, eps4, eps6, epsm, epsr, erg2j, escape_fraction, etaii, etaiii, ev2erg, ev2j, f_escii, f_esciii, fx_peak_nfw, g, g_cgs, g_gyrkms3, g_mpcgyr, g_mpcgyr2, g_si, gpi, gyr2s, gyr2yr, h0100, h0100pgyr, h_planck, h_planck_erg, hecto, hubble, hubble_cgs, imf_max, imf_min, iso_fac, j2erg, k_boltzmann, k_boltzmann_erg, khorizon, kilo, kind99, km2m, kms2mpcgyr, kom, kpc2cm, kstrc_1, kstrc_2, l_ab0, l_box, ln10, ln2, log4, log_lsun_erg, logang2m, logc_light, logc_light_angstroms, logdeca, logev2erg, loggyr2s, loghecto, logj2erg, logk_boltzmann, logkilo, logl_ab0, loglsun, loglsun_bc, logm2cm, logmega, logmpc2asat10pc, logpc2m, logpi, lograd2as, long_bn, lsun, lsun40_bc, lsun_bc, lsun_erg, lw_mode, m2cm, m32cm3, m8crit, m_atomic, m_atomic_g, m_be, m_cha_out, m_electron, mean_mol, mega, mend, milli, mp_cgs, mpc2asat10pc, mpc2cm, mpc2m, mpc_cgs, mpckm2gyr, mres, msolar, msolar_1030kg, msolar_g, mstart, msun_cgs, msun_mpc3_cgs, mu_primordial, myr2s, n_b_cgs, n_cloud_default, n_cold_default, n_h_cgs, n_ionii, n_ioniii, n_spec, nextoutputid, nlev, nlev_max, nstarmassbinii, nstarmassbiniii, omega_b, omega_l, omega_m, pc2cm, pc2m, pi, pi4, pio2, pio4, pisq, popii_slope, rad2as, rad2degrees, rdisk_half_scale, rho_b_ast, rho_b_cgs, rho_crit_cgs, rho_m_cgs, rhocrit, right_angle_degrees, semi_circle_degrees, sigma_8, sigma_t, sigma_thomson, slope, sqrt2, sqrt2opi, sqrt2pi, sqrtatomic_mass_hydrogen, sqrtdelta200, sqrtg, sqrtg_si, sqrtk_boltzmann, sqrtm_atomic, sqrtmpc2m, sqrtmsolar, sqrtpi, sqrtrhocrit, stdout_bn, surf_dens_norm_half, t_crit, t_ion, t_univ, tree_mass, v_com, v_enrich_popiii, v_out, vbc, x_hydrogen, x_hydrogen_solar, xh, y_helium, y_helium_solar, year_cgs, yhe, z_crit, z_metals, z_metals_solar

Variables

  • numerical_parameters/a_radiation [real,parameter=7.565743419463647e-16]
  • numerical_parameters/ab_mag_norm [real,parameter=48.6]
  • numerical_parameters/ab_norm [real,parameter=3.6307805477e-20]
  • numerical_parameters/alpha_b [real,parameter=2.6e-13]
  • numerical_parameters/alpha_ion [real,parameter=2.6e-13]
  • numerical_parameters/alpha_outflow [real]
  • numerical_parameters/ang2m [real,parameter=1e-10]
  • numerical_parameters/atomic_mass_helium [real,parameter=4.002602]
  • numerical_parameters/atomic_mass_hydrogen [real,parameter=1.00794]
  • numerical_parameters/bt_delta [real,optional/default=0.1]
  • numerical_parameters/bt_max [real,optional/default=log10(4.e17)]
  • numerical_parameters/bt_min [real,optional/default=log10(4.e15)]
  • numerical_parameters/btnbin [integer,optional/default=10]
  • numerical_parameters/btnpad [integer,optional/default=2]
  • numerical_parameters/c_cgs [real,parameter=29980000000.0]
  • numerical_parameters/c_hii [real,parameter=3]
  • numerical_parameters/c_light [real,parameter=299792458.0]
  • numerical_parameters/c_light_angstroms [real,parameter=2.99792458e+18]
  • numerical_parameters/c_light_cm [real,parameter=29979245800.0]
  • numerical_parameters/clump [real,parameter=4.0]
  • numerical_parameters/cm32m3 [real,parameter=1e-06]
  • numerical_parameters/crit_freq [real,parameter=3.969127815104263e-18]
  • numerical_parameters/deca [real,parameter=10.0]
  • numerical_parameters/delta200 [real,parameter=200.0]
  • numerical_parameters/deltaeds [real,parameter=177.65287922076283]
  • numerical_parameters/e_51 [real,parameter=1.2]
  • numerical_parameters/em_rdisk_half_scale_o2 [real,parameter=0.432067481]
  • numerical_parameters/eps3 [real,parameter=0.001]
  • numerical_parameters/eps4 [real,parameter=0.0001]
  • numerical_parameters/eps6 [real,parameter=1e-06]
  • numerical_parameters/epsm [real,parameter=0.0001]
  • numerical_parameters/epsr [real,parameter=1e-06]
  • numerical_parameters/erg2j [real,parameter=1e-07]
  • numerical_parameters/escape_fraction [real]
  • numerical_parameters/etaii [real]
  • numerical_parameters/etaiii [real]
  • numerical_parameters/ev2erg [real,parameter=1.60217733e-12]
  • numerical_parameters/ev2j [real,parameter=1.60217733e-19]
  • numerical_parameters/f_escii [real]
  • numerical_parameters/f_esciii [real]
  • numerical_parameters/fx_peak_nfw [real,parameter=0.2162165956]
  • numerical_parameters/g [real,parameter=4.301307710181788e-09]
  • numerical_parameters/g_cgs [real,parameter=6.674e-08]
  • numerical_parameters/g_gyrkms3 [real,parameter=4.205785220992724e-06]
  • numerical_parameters/g_mpcgyr [real,parameter=4.398999721935946e-12]
  • numerical_parameters/g_mpcgyr2 [real,parameter=4.498910530810333e-15]
  • numerical_parameters/g_si [real,parameter=6.67259e-11]
  • numerical_parameters/gpi [real,parameter=1.3212863952890194e-05]
  • numerical_parameters/gyr2s [real,parameter=3.15576e+16]
  • numerical_parameters/gyr2yr [real,parameter=1000000000.0]
  • numerical_parameters/h0100 [real,parameter=100.0]
  • numerical_parameters/h0100pgyr [real,parameter=0.10227121653079844]
  • numerical_parameters/h_planck [real,parameter=6.6260755e-34]
  • numerical_parameters/h_planck_erg [real,parameter=6.6260755e-27]
  • numerical_parameters/hecto [real,parameter=100.0]
  • numerical_parameters/hubble [real,parameter=0.6774]
  • numerical_parameters/hubble_cgs [real,parameter=2.1952879411478756e-18]
  • numerical_parameters/imf_max [real]
  • numerical_parameters/imf_min [real]
  • numerical_parameters/iso_fac [real,parameter=1.085736204755322]
  • numerical_parameters/j2erg [real,parameter=10000000.0]
  • numerical_parameters/k_boltzmann [real,parameter=1.3806503e-23]
  • numerical_parameters/k_boltzmann_erg [real,parameter=1.3806503e-16]
  • numerical_parameters/khorizon [real,parameter=0.00033356409519815205]
  • numerical_parameters/kilo [real,parameter=1000.0]
  • numerical_parameters/kind99 [integer,parameter=selected_real_kind(p,r=99)]
  • numerical_parameters/km2m [real,parameter=1000.0]
  • numerical_parameters/kms2mpcgyr [real,parameter=0.0010227121653079844]
  • numerical_parameters/kom [real,parameter=2.9434011554855882e-21]
  • numerical_parameters/kpc2cm [real,parameter=3.0856775807e+21]
  • numerical_parameters/kstrc_1 [real,parameter=0.6251543028]
  • numerical_parameters/kstrc_2 [real,parameter=1.191648617]
  • numerical_parameters/l_ab0 [real,parameter=43442114331434.14]
  • numerical_parameters/l_box [real]

    (linear box size)

  • numerical_parameters/ln10 [real,parameter=2.302585093]
  • numerical_parameters/ln2 [real,parameter=0.6931471806]
  • numerical_parameters/log4 [real,parameter=0.602059991]
  • numerical_parameters/log_lsun_erg [real,parameter=33.5848963]
  • numerical_parameters/logang2m [real,parameter=-10.0]
  • numerical_parameters/logc_light [real,parameter=8.4768207]
  • numerical_parameters/logc_light_angstroms [real,parameter=18.476820699999998]
  • numerical_parameters/logdeca [real,parameter=1.0]
  • numerical_parameters/logev2erg [real,parameter=-11.7952894176]
  • numerical_parameters/loggyr2s [real,parameter=16.499103967]
  • numerical_parameters/loghecto [real,parameter=2.0]
  • numerical_parameters/logj2erg [real,parameter=7.0]
  • numerical_parameters/logk_boltzmann [real,parameter=-22.859916308]
  • numerical_parameters/logkilo [real,parameter=3.0]
  • numerical_parameters/logl_ab0 [real,parameter=13.637910954000002]
  • numerical_parameters/loglsun [real,parameter=26.5848963]
  • numerical_parameters/loglsun_bc [real,parameter=26.5868122]
  • numerical_parameters/logm2cm [real,parameter=2.0]
  • numerical_parameters/logmega [real,parameter=6.0]
  • numerical_parameters/logmpc2asat10pc [real,parameter=10.31442513287]
  • numerical_parameters/logpc2m [real,parameter=16.489350545]
  • numerical_parameters/logpi [real,parameter=0.497149873]
  • numerical_parameters/lograd2as [real,parameter=5.31442513287]
  • numerical_parameters/long_bn [integer,parameter=selected_int_kind(16)]
  • numerical_parameters/lsun [real,parameter=3.845e+26]
  • numerical_parameters/lsun40_bc [real,parameter=3.862e-07]
  • numerical_parameters/lsun_bc [real,parameter=3.862e+26]
  • numerical_parameters/lsun_erg [real,parameter=3.8450000000000004e+33]
  • numerical_parameters/lw_mode [integer]
  • numerical_parameters/m2cm [real,parameter=100.0]
  • numerical_parameters/m32cm3 [real,parameter=1000000.0]
  • numerical_parameters/m8crit [real,parameter=595167835572453.2]
  • numerical_parameters/m_atomic [real,parameter=1.66053873e-27]
  • numerical_parameters/m_atomic_g [real,parameter=1.66053873e-24]
  • numerical_parameters/m_be [real,parameter=1000.0]
  • numerical_parameters/m_cha_out [real]
  • numerical_parameters/m_electron [real,parameter=9.10938188e-31]
  • numerical_parameters/mean_mol [real,parameter=1.2281617489023304]
  • numerical_parameters/mega [real,parameter=1000000.0]
  • numerical_parameters/mend [real,parameter=2.0]

    , Mcutoff !, MLongLive

  • numerical_parameters/milli [real,parameter=0.001]
  • numerical_parameters/mp_cgs [real,parameter=1.673e-24]
  • numerical_parameters/mpc2asat10pc [real,parameter=20626480624.64262]
  • numerical_parameters/mpc2cm [real,parameter=3.0856775807e+24]
  • numerical_parameters/mpc2m [real,parameter=3.0856775807e+22]
  • numerical_parameters/mpc_cgs [real,parameter=3.0857e+24]
  • numerical_parameters/mpckm2gyr [real,parameter=977.79222143002]
  • numerical_parameters/mres [real,parameter=500000.0]
  • numerical_parameters/msolar [real,parameter=1.9891e+30]
  • numerical_parameters/msolar_1030kg [real,parameter=1.9890999999999999]
  • numerical_parameters/msolar_g [real,parameter=1.9891e+33]
  • numerical_parameters/mstart [real,parameter=-2.0]
  • numerical_parameters/msun_cgs [real,parameter=1.989e+33]
  • numerical_parameters/msun_mpc3_cgs [real,parameter=6.769766377778569e-41]
  • numerical_parameters/mu_primordial [real,parameter=0.5847493469151946]
  • numerical_parameters/myr2s [real,parameter=31557600000000.0]
  • numerical_parameters/n_b_cgs [real,parameter=2.038744909036926e-07]
  • numerical_parameters/n_cloud_default [real,parameter=1000]

    ! dense, and diffuse density in the cold phase

  • numerical_parameters/n_cold_default [real,parameter=100.0]
  • numerical_parameters/n_h_cgs [real,parameter=1.5337477950684792e-07]
  • numerical_parameters/n_ionii [real,parameter=4000.0]
  • numerical_parameters/n_ioniii [real,parameter=90000.0]
  • numerical_parameters/n_spec [real,parameter=0.9667]
  • numerical_parameters/nextoutputid [integer]
  • numerical_parameters/nlev [integer]
  • numerical_parameters/nlev_max [integer,parameter=400]
  • numerical_parameters/nstarmassbinii [integer,parameter=64]
  • numerical_parameters/nstarmassbiniii [integer,parameter=64]
  • numerical_parameters/omega_b [real,parameter=0.0486]
  • numerical_parameters/omega_l [real,parameter=0.6911]
  • numerical_parameters/omega_m [real,parameter=0.3089]
  • numerical_parameters/pc2cm [real,parameter=3.0856775807e+18]
  • numerical_parameters/pc2m [real,parameter=3.0856775807e+16]
  • numerical_parameters/pi [real,parameter=3.1415926536]
  • numerical_parameters/pi4 [real,parameter=12.5663706144]
  • numerical_parameters/pio2 [real,parameter=1.5707963268]
  • numerical_parameters/pio4 [real,parameter=0.7853981634]
  • numerical_parameters/pisq [real,parameter=9.86960440115349]
  • numerical_parameters/popii_slope [real,parameter=2.3]
  • numerical_parameters/rad2as [real,parameter=206264.80624642622]
  • numerical_parameters/rad2degrees [real,parameter=57.29577951289617]
  • numerical_parameters/rdisk_half_scale [real,parameter=1.67834699]
  • numerical_parameters/rho_b_ast [real,parameter=6187863374.547873]
  • numerical_parameters/rho_b_cgs [real,parameter=4.189038942330162e-31]
  • numerical_parameters/rho_crit_cgs [real,parameter=8.619421692037372e-30]
  • numerical_parameters/rho_m_cgs [real,parameter=2.6625393606703443e-30]
  • numerical_parameters/rhocrit [real,parameter=277511434571.3454]
  • numerical_parameters/right_angle_degrees [real,parameter=90.0]
  • numerical_parameters/semi_circle_degrees [real,parameter=180.0]
  • numerical_parameters/sigma_8 [real,parameter=0.8159]
  • numerical_parameters/sigma_t [real,parameter=6.65e-25]
  • numerical_parameters/sigma_thomson [real,parameter=6.65245854e-29]
  • numerical_parameters/slope [real]
  • numerical_parameters/sqrt2 [real,parameter=1.4142135624]
  • numerical_parameters/sqrt2opi [real,parameter=0.7978845608]
  • numerical_parameters/sqrt2pi [real,parameter=2.5066282746]
  • numerical_parameters/sqrtatomic_mass_hydrogen [real,parameter=1.00396215]
  • numerical_parameters/sqrtdelta200 [real,parameter=14.142135623]
  • numerical_parameters/sqrtg [real,parameter=6.558435567945511e-05]
  • numerical_parameters/sqrtg_si [real,parameter=8.16859228998e-06]
  • numerical_parameters/sqrtk_boltzmann [real,parameter=3.715710295489e-12]
  • numerical_parameters/sqrtm_atomic [real,parameter=4.07497083425e-14]
  • numerical_parameters/sqrtmpc2m [real,parameter=175660968365.0]
  • numerical_parameters/sqrtmsolar [real,parameter=1410354565300000.0]
  • numerical_parameters/sqrtpi [real,parameter=1.7724538509]
  • numerical_parameters/sqrtrhocrit [real,parameter=526793.5407696816]
  • numerical_parameters/stdout_bn [integer,parameter=10]
  • numerical_parameters/surf_dens_norm_half [real,parameter=0.0297114]
  • numerical_parameters/t_crit [real,parameter=2200.0]
  • numerical_parameters/t_ion [real,parameter=10000.0]
  • numerical_parameters/t_univ [real,parameter=4.3549644e+17]
  • numerical_parameters/tree_mass [real]
  • numerical_parameters/v_com [real]
  • numerical_parameters/v_enrich_popiii [real,parameter=11000000.0]
  • numerical_parameters/v_out [real,parameter=11000000.0]
  • numerical_parameters/vbc [real]
  • numerical_parameters/x_hydrogen [real,parameter=0.778]
  • numerical_parameters/x_hydrogen_solar [real,parameter=0.7381]
  • numerical_parameters/xh [real,parameter=0.7523]
  • numerical_parameters/y_helium [real,parameter=0.222]
  • numerical_parameters/y_helium_solar [real,parameter=0.2485]
  • numerical_parameters/year_cgs [real,parameter=31560000.0]
  • numerical_parameters/yhe [real,parameter=0.2477]
  • numerical_parameters/z_crit [real,parameter=-5.0]
  • numerical_parameters/z_metals [real,parameter=5.36e-10]
  • numerical_parameters/z_metals_solar [real,parameter=0.0134]

resolution parameters

Quick access

Variables:

m_ccsn_max, m_ccsn_min, m_ion, m_pisn_max, m_pisn_min, m_survive, zmax, zmin

Variables

  • resolution_parameters/m_ccsn_max [real,parameter=40]

    Mass range for CCSNe

  • resolution_parameters/m_ccsn_min [real,parameter=10]
  • resolution_parameters/m_ion [real,parameter=5]

    Stellar mass above which we account for ionizing radition

  • resolution_parameters/m_pisn_max [real,parameter=260]

    Mass range for PISNe

  • resolution_parameters/m_pisn_min [real,parameter=140]
  • resolution_parameters/m_survive [real,parameter=0.81]

    Stellar mass with lifetime 13.8Gyr.

  • resolution_parameters/zmax [real,parameter=35.0]
  • resolution_parameters/zmin [real,parameter=0.0]

Precomputed time-dependent quantities

crit_masses

Quick access

Variables:

atomic_cooling_mass, mcrit

Routines:

get_atomic_cooling_mass(), get_crit_mass(), get_m_vir(), get_mcrit_schauer(), get_mcrit_stacy(), get_t_vir(), set_mcrit()

Needed modules

Variables

  • crit_masses/atomic_cooling_mass (nlev_max) [real,protected]
  • crit_masses/mcrit (nlev_max) [real,protected]

Subroutines and functions

subroutine  crit_masses/set_mcrit()
Called from:

asloth

Call to:

get_crit_mass(), get_atomic_cooling_mass()

function  crit_masses/get_crit_mass(z)

Determines critical mass for star formation at current redshift

Parameters:

z [real,in] :: redshift

Return:

get_crit_mass [real]

Called from:

set_mcrit()

Call to:

get_mcrit_schauer(), get_mcrit_stacy(), get_atomic_cooling_mass()

function  crit_masses/get_mcrit_stacy(z)

Modified to also check Jeans Mass calculated with modified speed of sound See Stacy et al. 2011

Parameters:

z [real,in] :: redshift

Return:

get_mcrit_stacy [real]

Called from:

get_crit_mass()

Call to:

get_m_vir()

function  crit_masses/get_mcrit_schauer(z)

based on Schauer+21, MNRAS, Volume 507, Issue 2, pp.1775-1787 Critical mass for halo collapse with LW feedback and baryonic streaming

Parameters:

z [real,in] :: redshift

Return:

get_mcrit_schauer [real]

Called from:

get_crit_mass()

function  crit_masses/get_atomic_cooling_mass(z)

the atomic cooling mass is the virial mass of 10^4 K

Parameters:

z [real,in] :: redshift

Return:

get_atomic_cooling_mass [real]

Called from:

set_mcrit(), get_crit_mass()

Call to:

get_m_vir()

function  crit_masses/get_m_vir(z, t)

function determines the halo mass corresponding to a virial temperature we use the definition of Hummel et al 2012

Parameters:
  • z [real,in] :: redshift

  • t [real,in] :: virial temperature

Return:

get_m_vir [real]

Called from:

get_mcrit_stacy(), get_atomic_cooling_mass()

function  crit_masses/get_t_vir(m, z)
Parameters:
  • m [real,in]

  • z [real,in]

Return:

t [real]

Called from:

sf_step()

cosmic_time

Quick access

Variables:

a3_inv, alev, tlev, zlev

Routines:

cosmic_dt(), distribute_cosmic_time(), dtdz(), read_scale_file(), set_cosmic_time()

Needed modules

Variables

  • cosmic_time/a3_inv (nlev_max) [real,protected]

    1/(a^3)

  • cosmic_time/alev (nlev_max) [real,protected]

    cosmic expansion factor

  • cosmic_time/tlev (nlev_max) [real,protected]

    time since big bang

  • cosmic_time/zlev (nlev_max) [real,protected]

    redshift

Subroutines and functions

subroutine  cosmic_time/set_cosmic_time()

subroutine to set redshift steps and compute expansion factors and cosmic time

Called from:

asloth

Call to:

read_scale_file(), distribute_cosmic_time(), cosmic_dt()

subroutine  cosmic_time/distribute_cosmic_time()

subroutine to distribute redshift steps (either linearly or logarithmically)

Called from:

set_cosmic_time()

subroutine  cosmic_time/read_scale_file()

subroutine to read the redshift steps from scale file

Called from:

set_cosmic_time()

function  cosmic_time/dtdz(a)

Subroutine to calculate absolute value of dt/dz in seconds for density field normalized at reference epoch a0=1.

Notation:

Parameters:

a [real,in] ::

expansion factor rel to a0=1

Uses

Return:

res [real]

Use :

numerical_parameters (hubble_cgs(), omega_l(), omega_m())

Called from:

cosmic_dt()

function  cosmic_time/cosmic_dt(z1, z2)

determines the time in seconds between redshift z1 and z2

Parameters:
  • z1 [real,in]

  • z2 [real,in]

Return:

res [real]

Called from:

set_cosmic_time()

Call to:

dtdz()

EPS wrapper

eps_wrapper

Description

module to interface with the Parkinson et al. 2008 tree generation routines

Quick access

Routines:

make_eps_tree()

Needed modules

Subroutines and functions

subroutine  eps_wrapper/make_eps_tree()
Called from:

asloth

Call to:

set_tree_params(), memory(), make_tree(), walk_tree()

Chemistry

chemistry

Quick access

Variables:

abhe, x_ion

Routines:

ch21(), ch22(), cl4(), cl64(), fh2_crit(), h2_cooling_rate(), h2_form_rate(), ph4(), t_hot2cold()

Needed modules

Variables

  • chemistry/abhe [real,parameter=y_helium/x_hydrogen/4.0]
  • chemistry/x_ion [real,parameter=0.0002]

    residual ionization fraction

Subroutines and functions

function  chemistry/t_hot2cold(n, t, z)
Parameters:
  • n [real,in]

  • t [real,in]

  • z [real,in]

Return:

res [real]

Called from:

timescaledetermination()

Call to:

fh2_crit(), h2_form_rate()

function  chemistry/h2_form_rate(n, t, z)
Parameters:
  • n [real,in]

  • t [real,in]

  • z [real,in]

Return:

res [real]

Called from:

t_hot2cold()

Call to:

ch21(), ph4(), ch22()

function  chemistry/fh2_crit(n, t, z)
Parameters:
  • n [real,in]

  • t [real,in]

  • z [real,in]

Return:

res [real]

Called from:

t_hot2cold()

Call to:

h2_cooling_rate()

function  chemistry/h2_cooling_rate(n, t)
Parameters:
  • n [real,in]

  • t [real,in]

Return:

res [real]

Called from:

fh2_crit()

Call to:

cl4(), cl64()

function  chemistry/ch22(temp)
Parameters:

temp [real,in]

Return:

res [real]

Called from:

h2_form_rate()

function  chemistry/ch21(temp)
Parameters:

temp [real,in]

Return:

res [real]

Called from:

h2_form_rate()

function  chemistry/ph4(z)
Parameters:

z [real,in]

Return:

res [real]

Called from:

h2_form_rate()

function  chemistry/cl64(temp)
Parameters:

temp [real,in]

Return:

res [real]

Called from:

h2_cooling_rate()

function  chemistry/cl4(temp)
Parameters:

temp [real,in]

Return:

res [real]

Called from:

h2_cooling_rate()

Input files

Description

List of input files

Quick access

Variables:

lines_lt_popii, lines_mmetals_popii, lines_qion_popii, mtree_file, output_string, pkinfile_dummy, popii_lt_file, popii_mmetals_file, popii_qion_file, popii_yields_file, popiii_yields_file, scale_file, tree_file, tree_name, tree_path

Variables

  • input_files/lines_lt_popii [integer]
  • input_files/lines_mmetals_popii [integer,parameter=27]
  • input_files/lines_qion_popii [integer]
  • input_files/mtree_file [character,parameter='tree_files/mass_estimates_lx13.dat']
  • input_files/output_string [character]
  • input_files/pkinfile_dummy [character,parameter='data/kvector_z1.txt']

    is later passed on to pkinfile

  • input_files/popii_lt_file [character]
  • input_files/popii_mmetals_file [character,parameter='data/kobayashi2006_z1e-3_mmetal.txt']
  • input_files/popii_qion_file [character]
  • input_files/popii_yields_file [character,parameter='data/kobayashi2006_z1e-3.txt']
  • input_files/popiii_yields_file [character,parameter='data/yields_isotopes_sum_tr.dat']
  • input_files/scale_file [character]
  • input_files/tree_file [character]
  • input_files/tree_name [character]
  • input_files/tree_path [character]

Memory modules

Tree_memory_arrays

Description

This module is use for managing the memory of the merger tree

Quick access

Variables:

mergertree_aux

Needed modules

Variables

  • tree_memory_arrays/mergertree_aux (*) [treenode,target/allocatable]

Tree_memory_arrays_passable

Description

This module is used to reference the merger tree

Quick access

Variables:

mergertree, number_of_nodes

Routines:

tree_index()

Needed modules

Variables

  • tree_memory_arrays_passable/mergertree (*) [treenode,pointer]
  • tree_memory_arrays_passable/number_of_nodes [integer]

Subroutines and functions

function  tree_memory_arrays_passable/tree_index(node)
Parameters:

node [treenode,pointer]

Return:

tree_index [integer,pure]

Called from:

associate_siblings()

Star formation

SF_routines

Quick access

Routines:

add_hmstars(), add_to_base_mstariisurv(), coldgasbindingenergy_cold(), coldgasbindingenergy_hot(), coldgasbindingenergy_nfw(), coldgasbindingenergy_stellar(), dm_concen(), get_n_ion(), hms_feedback(), hotgasbindingenergy_disk(), hotgasbindingenergy_hot(), hotgasbindingenergy_nfw(), imfsampling(), nfw_const(), rm_hmstars(), snedrivenoutflow(), survivingstarlist(), timescaledetermination(), writellstarstofileanddel()

Needed modules

Subroutines and functions

subroutine  sf_routines/add_hmstars(p_node, ii, timeborn, num_, zgas, pop)
Parameters:
  • p_node [treenode,inout]

  • ii [integer,in]

  • timeborn [real,in]

  • num [integer,in]

  • zgas (n_elements) [real,in]

  • pop [integer,in]

Called from:

imfsampling()

subroutine  sf_routines/rm_hmstars(p_node, highstar)
Parameters:
Called from:

hms_feedback()

function  sf_routines/get_n_ion(p_node, t_current, del_t)

This routine calculates the total number of ionizing photons emitted during this time-step

Parameters:
  • p_node [treenode,inout] :: the halo

  • t_current [real,in] :: beginning of the sub-step

  • del_t [real,in] :: time-step

Return:

n_ion_tot [real] :: number of total ionizing photons

Called from:

sf_step()

subroutine  sf_routines/hms_feedback(p_node, t_current, totalmetalejectathisstep, totalsneenergythisstep, m_heat, rel_del_t)

This routine calculates the cold gas mass that will be heated/ blown out from the halo and the explosion energy/ ejecta from SNe.

Parameters:
  • p_node [treenode,inout] :: the halo

  • t_current [real,in] :: beginnng of the sub-step

  • totalmetalejectathisstep (n_elements) [real,inout] :: metals produced in this time-step

  • totalsneenergythisstep [real,out] :: Msun cm^2 s^-2

  • m_heat [real,out] :: mass that will trasfer from cold to hot in this time-step

  • rel_del_t [real,in] :: time-step

Called from:

sf_step()

Call to:

add_to_m_metals(), rm_hmstars()

subroutine  sf_routines/add_to_base_mstariisurv(this_node)

Inherit M_star_II_surv to the base node at the final redshift

Parameters:

this_node [treenode,inout]

Called from:

asloth

subroutine  sf_routines/survivingstarlist(p_node, num, ii, z, timeborn, pop)

Non-standard routine if users are interested in stellar information of survival stars in satellites

Parameters:
  • p_node [treenode,inout] :: the halo

  • num [integer,in] :: number of stars in this IMF mass bin

  • ii [integer,in] :: index of the IMF mass bin

  • z (n_elements) [real,in] :: metallicity of the star

  • timeborn [real,in] :: time of star formation

  • pop [integer,in] :: stellar population

Called from:

imfsampling()

subroutine  sf_routines/writellstarstofileanddel(p_node)
Parameters:

p_node [treenode,inout]

Called from:

sf_step()

subroutine  sf_routines/imfsampling(p_node, totalmassnewstars, m_star_form, t_current, this_rng, zgas, pop)

This routine samples individual stars from the IMF and store massive stars in the list.

Parameters:
  • p_node [treenode,inout] :: the halo

  • totalmassnewstars [real,inout] :: total mass of newly formed stars

  • m_star_form [real,in] :: estimated total stellar mass based on cold gas mass and star formation efficiency

  • t_current [real,in] :: the time in the beginning of the time-step

  • this_rng [rng,inout] :: random number generator

  • zgas (n_elements) [real,in] :: gas metallicity

  • pop [population,in] :: stellar population

Use :

trace_mdf

Called from:

sf_step()

Call to:

get_mdf_bin(), poisson(), add_hmstars(), survivingstarlist(), add_to_node_mdf()

subroutine  sf_routines/dm_concen(m_halo, z, dm_concentration)

This routine determins the concentration of the NFW profile. We adopt the fitting curve by Correa et al. 2015 (doi:10.1093/mnras/stv1363) Planck cosmology (appendix B) Note that the fitting functions are valid for z=0-10 based on private conversation

Parameters:
  • m_halo [real,in] :: virial mass of the halo

  • z [real,in] :: current redshift

  • dm_concentration [real,out] :: (arbitrary) constant value, reference from Fig. 7 in Correa et al. 2015 for haloes > 10^5 Msun

Called from:

sf_step()

subroutine  sf_routines/timescaledetermination(p_node, v_dyn, t_dyn, ncold, n_hot, coldgas_tff, r_vir_current, dm_concentration, t_vir, t_cool)

This routines determines all the relative timescales that we need. Note that the time scales we eventually use are dimensionless.

Parameters:
  • p_node [treenode,inout] :: This also includes “dead” stars

  • v_dyn [real,inout] :: s; dynamical time of the halo center

  • t_dyn [real,inout] :: dynamical timescale of central part of the halo

  • ncold [real,inout] :: number density of cold gas

  • n_hot [real,inout] :: number density of hot gas

  • coldgas_tff [real,inout] :: free fall time of cold gas

  • r_vir_current [real,in] :: the current virial raius of the halo

  • dm_concentration [real,in] :: dark matter halo concentration

  • t_vir [real,in] :: virial temperature of the halo

  • t_cool [real,inout] :: cooling time of hot gas

Called from:

sf_step()

Call to:

t_hot2cold()

function  sf_routines/nfw_const(r_s, r_vir_current)
Parameters:
  • r_s [real,in]

  • r_vir_current [real,in]

Return:

a [real]

Called from:

hotgasbindingenergy_nfw(), coldgasbindingenergy_nfw()

function  sf_routines/hotgasbindingenergy_nfw(r_s, r_vir_current, m_hot, m_peak)
Parameters:
  • r_s [real,in]

  • r_vir_current [real,in]

  • m_hot [real,in]

  • m_peak [real,in]

Return:

be_hot_nfw [real]

Called from:

snedrivenoutflow()

Call to:

nfw_const()

function  sf_routines/hotgasbindingenergy_disk(r_s, r_vir_current, m_hot, m_disk)
Parameters:
  • r_s [real,in]

  • r_vir_current [real,in]

  • m_hot [real,in]

  • m_disk [real,in]

Return:

be_hot_disk [real]

Called from:

snedrivenoutflow()

function  sf_routines/hotgasbindingenergy_hot(r_vir_current, m_hot)
Parameters:
  • r_vir_current [real,in]

  • m_hot [real,in]

Return:

be_hot_hot [real]

Called from:

snedrivenoutflow()

function  sf_routines/coldgasbindingenergy_nfw(r_s, r_vir_current, m_cold, m_peak)
Parameters:
  • r_s [real,in]

  • r_vir_current [real,in]

  • m_cold [real,in]

  • m_peak [real,in]

Return:

be_cold_nfw [real]

Called from:

snedrivenoutflow()

Call to:

nfw_const()

function  sf_routines/coldgasbindingenergy_stellar(r_s, m_cold, m_stellar)
Parameters:
  • r_s [real,in]

  • m_cold [real,in]

  • m_stellar [real,in]

Return:

be_cold_stellar [real]

Called from:

snedrivenoutflow()

function  sf_routines/coldgasbindingenergy_hot(r_s, r_vir_current, m_cold, m_hot)
Parameters:
  • r_s [real,in]

  • r_vir_current [real,in]

  • m_cold [real,in]

  • m_hot [real,in]

Return:

be_cold_hot [real]

Called from:

snedrivenoutflow()

function  sf_routines/coldgasbindingenergy_cold(r_s, m_cold)
Parameters:
  • r_s [real,in]

  • m_cold [real,in]

Return:

be_cold_cold [real]

Called from:

snedrivenoutflow()

subroutine  sf_routines/snedrivenoutflow(p_node, r_vir_current, dm_concentration, totalsneenergythisstep, del_m_hot, totalmassnewstars, m_out_hot, m_out_cold)

This routines determines the binding energy of hot gas and cold gas. It then compare the SNe energy and the binding energy to determine how much gas SNe will blow out of the halo.

Parameters:
  • p_node [treenode,inout] :: the halo

  • r_vir_current [real,in] :: current virial radius of the halo

  • dm_concentration [real,in] :: dark matter halo’s concentration

  • totalsneenergythisstep [real,inout] :: sum of SNe energy that occur in this time-step

  • del_m_hot [real,in] :: smoothly accreted hot gas in this time-step

  • totalmassnewstars [real,in] :: total newly formed stellar mass in this time-step

  • m_out_hot [real,inout] :: hot gas mass that ends up in outflow in this time-step

  • m_out_cold [real,inout] :: cold gas mass that ends up in outflow in this time-step

Called from:

sf_step()

Call to:

hotgasbindingenergy_nfw(), hotgasbindingenergy_disk(), hotgasbindingenergy_hot(), coldgasbindingenergy_nfw(), coldgasbindingenergy_stellar(), coldgasbindingenergy_hot(), coldgasbindingenergy_cold()

Star_formation

Quick access

Routines:

add_parent_to_tree(), dt_adaptive(), m_star_dot(), prepare_node(), sf_step()

Needed modules

Subroutines and functions

subroutine  star_formation/prepare_node(p_node, m_star_max, is_ion)
Parameters:
  • p_node [treenode,inout] :: parent node

  • m_star_max [real,out]

  • is_ion [logical,out] :: set from most massive child

Called from:

sf_step()

Call to:

check_m_metals(), inherit_igm_z()

subroutine  star_formation/sf_step(node)
Parameters:

node [treenode,inout,target]

Called from:

asloth

Call to:

prepare_node(), rvir_mpc(), dm_concen(), get_t_vir(), check_m_metals(), get_metallicity(), calc_dz(), metalpoor(), timescaledetermination(), dt_adaptive(), m_star_dot(), imfsampling(), get_n_ion(), hms_feedback(), snedrivenoutflow(), assert(), v_plow_ad(), r_ion_ad(), writellstarstofileanddel()

subroutine  star_formation/add_parent_to_tree(node)
Parameters:

node [treenode,inout]

Called from:

asloth

Call to:

add_bubble_to_tree(), get_m_metals()

function  star_formation/dt_adaptive(p_node, coldgas_tff, t_dyn, del_m_hot, del_t, t_step, pop_now)

timestep in sec

Parameters:
  • p_node [treenode,in]

  • coldgas_tff [real,in]

  • t_dyn [real,in]

  • del_m_hot [real,in]

  • del_t [real,in]

  • t_step [real,in]

  • pop_now [integer,in]

Return:

dt_adaptive [real]

Called from:

sf_step()

Call to:

m_star_dot()

function  star_formation/m_star_dot(m_cold, coldgas_tff, pop_now)

star formation rate in this substep (Msun/s)

Parameters:
  • m_cold [real,in]

  • coldgas_tff [real,in]

  • pop_now [integer,in]

Return:

m_star_dot [real]

Use :

numerical_parameters (etaii(), etaiii())

Called from:

sf_step(), dt_adaptive()

Stellar feedback

feedback_routines

Quick access

Routines:

node_feedback(), self_enrichment(), statistical_feedback()

Needed modules

Subroutines and functions

subroutine  feedback_routines/node_feedback(this_node)
Parameters:

this_node [treenode,target]

Called from:

asloth

Call to:

self_enrichment(), statistical_feedback(), bubble_check(), ion_check()

subroutine  feedback_routines/self_enrichment(node)

This routine computes feedback exactly as the bubble-tree in the case that there is only self-enrichment

Parameters:

node [treenode]

Called from:

node_feedback()

subroutine  feedback_routines/statistical_feedback(this_node)
Parameters:

this_node [treenode,target]

Use :

random_object

Called from:

node_feedback()

Call to:

get_ran()

snowplow

Quick access

Routines:

r_ion_ad(), v_plow_ad()

Needed modules

Subroutines and functions

function  snowplow/v_plow_ad(m, z, r, r_v)
Parameters:
  • m [real,in]

  • z [real,in]

  • r [real,in]

  • r_v [real,in]

Return:

v [real]

Called from:

sf_step()

function  snowplow/r_ion_ad(nion, r_old, z, del_t, mhalo)
Parameters:
  • nion [real,in]

  • r_old [real,in]

  • z [real,in]

  • del_t [real,in]

  • mhalo [real,in]

Return:

r_new [real]

Called from:

sf_step()

Call to:

rvir_mpc(), rvir()

Feedback tracing

feedback_arrays

Quick access

Variables:

sfr, v_enriched, v_ionized

Routines:

add_to_feedback_volumes(), add_to_sfr()

Needed modules

Variables

  • feedback_arrays/sfr (2,nlev_max) [real,protected/optional/default=0]

    SFR: population, timestep

  • feedback_arrays/v_enriched (nlev_max) [real,protected/optional/default=0]
  • feedback_arrays/v_ionized (nlev_max) [real,protected/optional/default=0]

    (in physical Mpc^3)

Subroutines and functions

subroutine  feedback_arrays/add_to_feedback_volumes(node)
Parameters:

node [treenode]

Called from:

asloth

subroutine  feedback_arrays/add_to_sfr(node)
Parameters:

node [treenode]

Called from:

asloth

volume_fractions

Quick access

Routines:

get_fracs()

Needed modules

Subroutines and functions

subroutine  volume_fractions/get_fracs(jlevel)
Parameters:

jlevel [integer,in]

Use :

random_object

Called from:

asloth

Call to:

get_ran(), position_check()

Outputs

to_file

Quick access

Types:

file_specs

Routines:

add_timestamp(), close_outputs(), init_outputs(), outputs_satellites(), write_file(), write_files(), write_files_reali(), write_mw_properties()

Needed modules

Types

  • type  to_file/file_specs
    Type fields:
    • % file_string [character]

    • % head1 [character]

    • % head2 [character]

    • % out_dir [character]

    • % stuff (30,nlev_max) [real]

    • % var_name [character]

Variables

Subroutines and functions

subroutine  to_file/init_outputs()
Called from:

asloth

Call to:

add_timestamp()

subroutine  to_file/write_file(fs, var_name, ncoll)
Parameters:
  • fs [file_specs]

  • var_name [character]

  • ncoll [integer] :: loop writes one line

Called from:

write_files()

subroutine  to_file/outputs_satellites(count)
Parameters:

count [integer]

Use :

tree_memory_arrays_passable, trace_mdf

Called from:

asloth

Call to:

rvir_mpc(), add_to_node_mdf()

subroutine  to_file/write_files_reali()
Use :

tree_memory_arrays_passable, input_files, metal_functions, trace_mdf

Called from:

asloth

Call to:

rvir_mpc(), add_to_node_mdf()

subroutine  to_file/write_files(output)
Parameters:

output [file_specs,inout]

Called from:

asloth

Call to:

real_to_string(), write_file()

subroutine  to_file/close_outputs()

go through list of possible open file IDs

Called from:

asloth

subroutine  to_file/add_timestamp(output_path)
Parameters:

output_path [character,inout]

Called from:

init_outputs()

Call to:

int_to_string4(), int_to_string2()

subroutine  to_file/write_mw_properties()
Use :

tree_memory_arrays_passable, input_files

Called from:

asloth