POSDYON Population Synthesis Configuration Guide
This documentation provides a detailed overview of the configuration options available in the Posydon software package.
TODO: fill each table cell with a description of the parameter and the options
Environment Variables
The environment variable PATH_TO_POSYDON will be read from your shell session.
Parameter |
Description/Value |
---|---|
PATH_TO_POSYDON |
<PATH_TO_POSYDON> |
SimulationProperties
After the environment variables, the next part of the population_params.ini
file
contains how systems will move through the simulation steps (Flow Chart) and the parameters for each step.
These parameters are read in and used to create a SimulationProperties`
object.
It allows for the addition of hooks before and after each step, and the evolution of a system (see Custom Hooks).
The SimulationProperties
can be manually read and loaded in.
Note that the loading of the simulation steps is separate from creating the object.
from posydon.binary_evol.simulationproperties import SimulationProperties
from posydon.popsyn.io import simprop_kwargs_from_ini
# read from file
sim_props = simprop_kwargs_from_ini('population_params.ini', vebose=False)
# create SimulationProperties object
sim = SimulationProperties(**sim_props)
# load the steps
sim.load_steps()
Flow Chart
The flow chart is the core of POSYDON. It controls the mapping between a POSYDON binary object and its step evolution, see the Flow Chart Object page for more details.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.flow_chart’, ‘flow_chart’] |
absolute_import = None |
‘package’ (kwarg for importlib.import_module) |
Step MESA (HMS-HMS, CO-HMS_RLO, CO-HeMS, CO-HeMS_RLO)
The MESA step is the most important step of POSYDON as it leverages the POSYDON MESA grids to evolve the binary object according to one of the supported MESA binary-star grids.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.MESA.step_mesa’, ‘MS_MS_step’] |
absolute_import = None |
‘package’ (kwarg for importlib.import_module) |
interpolation_path |
None (found by default) |
interpolation_filename |
None (found by default) |
interpolation_method |
‘1NN_1NN’ (‘nearest_neighbour’, ‘linear3c_kNN’, ‘1NN_1NN’ are options) |
save_initial_conditions |
True (only for interpolation_method=’nearest_neighbour’) |
track_interpolation |
False |
stop_method |
‘stop_at_max_time’ (‘stop_at_end’, ‘stop_at_max_time’, ‘stop_at_condition’ are options) |
stop_star |
‘star_1’ (only for stop_method=’stop_at_condition’, ‘star_1’ and ‘star_2’ are options) |
stop_var_name |
None (only for stop_method=’stop_at_condition’, string) |
stop_value |
None (only for stop_method=’stop_at_condition’, float) |
stop_interpolate |
True |
verbose |
False |
Step Detached
The detached step uses analytical expressions and MESA single star grids to evolve the binary object when it is not interacting.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.DT.step_detached’, ‘detached_step’] |
absolute_import |
None (‘package’ kwarg for importlib.import_module) |
matching_method |
‘minimize’ (options ‘minimize’ ‘root’) |
do_wind_loss |
True |
do_tides |
True |
do_gravitational_radiation |
True |
do_magnetic_braking |
True |
do_stellar_evolution_and_spin_from_winds |
True |
RLO_orbit_at_orbit_with_same_am |
False |
verbose |
False |
Step Disrupted
The dirtupted step evolves a system when a supernova has unbound the binary components. This class inherits from the detached step, but only evolves the remaining star in isolation.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.DT.step_disrupted’,’DisruptedStep’] |
Step Merged
In this step, the system has undergone a merger and is now a single star. This class inherits from the detached step, but only evolves the remaining star in isolation.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.DT.step_merged’,’MergedStep’] |
Step Initially Single
This step is used to evolve a single star system. This class inherits from the detached step and evolves the star in isolation.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.DT.step_initially_single’,’InitiallySingleStep’] |
Step Common Envelope
The common envelope step is used to evolve a binary system when the primary or secondary star has initiated a common envelope phase. It calculates the binding energy of the envelope and the energy available to eject it. If the energy budget is greater than the binding energy, the envelope is ejected and the system is evolved to the next step. If the energy budget is less than the binding energy, the system is merged.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.CE.step_CEE’, ‘StepCEE’] |
absolute_import |
None(‘package’ kwarg for importlib.import_module) |
prescription |
‘alpha-lambda’ |
common_envelope_efficiency |
1.0 (float in [0, inf]) |
common_envelope_option_for_lambda |
‘lambda_from_grid_final_values’ (options are: (1) ‘default_lambda’, (2) ‘lambda_from_grid_final_values’, (3) ‘lambda_from_profile_gravitational’, (4) ‘lambda_from_profile_gravitational_plus_internal’, (5) ‘lambda_from_profile_gravitational_plus_internal_minus_recombination’) |
common_envelope_lambda_default |
0.5 (float in [0, inf] used only for option (1)) |
common_envelope_option_for_HG_star |
‘optimistic’ (options are ‘optimistic’, ‘pessimistic’) |
common_envelope_alpha_thermal |
1.0 (float in [0, inf] used only for option for (4), (5)) |
core_definition_H_fraction |
0.1 (options are 0.01, 0.1, 0.3) |
core_definition_He_fraction |
0.1 |
CEE_tolerance_err |
0.001 (float in [0, inf]) |
common_envelope_option_after_succ_CEE |
‘core_not_replaced_noMT’ (options are ‘core_not_replaced_noMT’ ‘core_replaced_noMT’, ‘core_not_replaced_stableMT’ ‘core_not_replaced_windloss’) |
verbose |
False |
Step Supernova
This steps performs the core-collapse supernova evolution of the star. Multiple prescriptions are implemented and can be selected. If a standard prescription is used, interpolators are available to speed up the calculation and predict additional properties of the collapse, such as the spin.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.SN.step_SN’, ‘StepSN’] |
absolute_import |
None (‘package’ kwarg for importlib.import_module) |
mechanism |
‘Patton&Sukhbold20-engine’ (options are: ‘direct’, Fryer+12-rapid’, ‘Fryer+12-delayed’, ‘Sukhbold+16-engine’, ‘Patton&Sukhbold20-engine’) |
engine |
‘N20’ (options are ‘N20’ for ‘Sukhbold+16-engine’, ‘Patton&Sukhbold20-engine’ or None for the others) |
PISN |
‘Marchant+19’ (options are None, “Marchant+19”) |
ECSN |
“Podsiadlowksi+04” (options are “Tauris+15”, “Podsiadlowksi+04”) |
conserve_hydrogen_envelope |
True |
max_neutrino_mass_loss |
0.5 (float in [0,inf]) |
max_NS_mass |
2.5 (float in [0,inf]) |
use_interp_values |
True (if True, use interpolation values for the SN properties, which are calculated during |
use_profiles |
True |
use_core_masses |
True |
approx_at_he_depletion |
False |
kick |
True |
kick_normalisation |
‘one_over_mass’ (options are “one_minus_fallback”, “one_over_mass”, “NS_one_minus_fallback_BH_one”, “one”, “zero”) |
sigma_kick_CCSN_NS |
265.0 (float in [0,inf]) |
sigma_kick_CCSN_BH |
265.0 (float in [0,inf]) |
sigma_kick_ECSN |
20.0 (float in [0,inf]) |
verbose |
False |
Step Double Compact Object
In this step, the system has evolved to a double compact object system. The merger time due to gravitational wave emission is calculated.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.DT.double_CO’, ‘DoubleCO’] |
absolute_import |
None (‘package’ kwarg for importlib.import_module) |
n_o_steps_interval |
None |
Step End
The final step of the simulation. All succesfull systems should reach this step.
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.step_end’, ‘step_end’] |
absolute_import |
None (‘package’ kwarg for importlib.import_module) |
Extra Hooks
It’s possible to add custom hooks to the simulation steps.
A few example hooks are provides: TimingHooks
and StepNamesHooks
(See Custom Hooks for more details)
Parameter |
Description/Value |
---|---|
import |
[‘posydon.binary_evol.simulationproperties’, ‘TimingHooks’] |
absolute_import_1 |
None |
kwargs_1 |
{} |
import |
[‘posydon.binary_evol.simulationproperties’, ‘StepNamesHooks’] |
absolute_import_2 |
None |
kwargs_2 |
{} |
BinaryPopulation
A BinaryPopulation
is created to evolve the population using a given SimulationProperties
object.
This class requires additional parameters, because it will require initial distributions
for to sample BinaryStar
objects from,
such as the masses and orbital parameters.
Moreover, it contains the parameters for metallicity and the practicality of running populations.
This includes, the number of binaries, the metallicity, how often to save the population to file.
- When reading the binary population arguments from a
population_params.ini
file, the SimulationProperties
are read in automatically.
from posydon.popsyn.binarypopulation import BinaryPopulation
from posydon.popsyn.io import binarypop_kwargs_from_ini
# read from file
pop_params = binarypop_kwargs_from_ini('population_params.ini', vebose=False)
# create BinaryPopulation object
pop = BinaryPopulation(**pop_params)
These parameters contain options on how the population is evolved, in practical terms, ie. the number of binaries. It also contains which sampling distributions to use for the initial conditions of the binaries.
Parameter |
Description/Value |
---|---|
optimize_ram |
True (save population in batches) |
ram_per_cpu |
None (set maximum ram per cpu before batch saving in GB) |
dump_rate |
1000 (batch save after evolving N binaries) |
temp_directory |
‘batches’ (folder for keeping batch files) |
tqdm |
False (progress bar) |
breakdown_to_df |
True (convert BinaryStars into DataFrames after evolution) |
use_MPI |
True ( if True evolve with MPI, equivalent to the following: from mpi4py import MPI, comm = MPI.COMM_WORLD) |
metallicity |
[2., 1., 0.45, 0.2, 0.1, 0.01, 0.001, 0.0001] (In units of solar metallicity) |
entropy |
None (Random Number Generation: uses system entropy (recommended)) |
number_of_binaries |
1000000 (int) |
star_formation |
‘burst’ (options are ‘constant’ ‘burst’ ‘custom_linear’ ‘custom_log10’ ‘custom_linear_histogram’ ‘custom_log10_histogram’) |
max_simulation_time |
13.8e9 (float in [0,inf]) |
binary_fraction |
1 (float 0< fraction <=1) |
primary_mass_scheme |
‘Kroupa2001’ (options are ‘Salpeter’, ‘Kroupa1993’, ‘Kroupa2001’) |
primary_mass_min |
6.5 (float in [0,300]) |
primary_mass_max |
250.0 (float in [0,300]) |
secondary_mass_scheme |
‘flat_mass_ratio’ (options are ‘flat_mass_ratio’, ‘q=1’) |
secondary_mass_min |
0.35 (float in [0,300]) |
secondary_mass_max |
250.0 (float in [0,300]) |
orbital_scheme` |
‘period’ (options are ‘separation’, ‘period’) |
orbital_period_scheme |
‘Sana+12_period_extended’ (used only for orbital_scheme = ‘period’) |
orbital_period_min |
0.75 (float i [0,inf]) |
orbital_period_max |
6000.0 (float i [0,inf]) |
#orbital_separation_scheme |
‘log_uniform’ (used only for orbital_scheme = ‘separation’, ‘log_uniform’, ‘log_normal’) |
#orbital_separation_min |
5.0 (float i [0,inf]) |
#orbital_separation_max |
1e5 (float i [0,inf]) |
#log_orbital_separation_mean |
None (float i [0,inf] used only for orbital_separation_scheme =’log_normal’) |
#log_orbital_separation_sigma |
None (float i [0,inf] used only for orbital_separation_scheme =’log_normal’) |
eccentricity_scheme |
‘zero’ (options are ‘zero’, ‘thermal’, ‘uniform’) |
Saving Output
You can decide on your own output parameters for the population file.
The data is split in two different tables: the history
table and the oneline
table.
The history
table contains values that change throughout the evolution of the system,
while the oneline
table contains values that are constant throughout the evolution of the system or only occur once.
The binarystar
class contains the binary systems and
the parameters here determine what output of that class will be outputted into the final population file.
Parameter |
Description/Value |
---|---|
extra_columns |
{‘step_names’:’string’, ‘step_times’:’float64’} (‘step_times’ with from posydon.binary_evol.simulationproperties import TimingHooks) |
only_select_columns |
[‘state’, ‘event’, ‘time’, ‘orbital_period’, ‘eccentricity’, ‘lg_mtransfer_rate’] (all options: ‘state’, ‘event’, ‘time’, ‘separation’, ‘orbital_period’, ‘eccentricity’, ‘V_sys’, ‘rl_relative_overflow_1’, ‘rl_relative_overflow_2’, ‘lg_mtransfer_rate’, ‘mass_transfer_case’, ‘trap_radius’, ‘acc_radius’, ‘t_sync_rad_1’, ‘t_sync_conv_1’, ‘t_sync_rad_2’, ‘t_sync_conv_2’, ‘nearest_neighbour_distance’) |
This dictionary contains the parameters that will be saved in the output of the SingleStar objects in the system.
only_select_columns will be stored in the history table, and the initial and final step will be stored in the oneline table with the prefix S1
or S2
depending on the star,
scalar_names will only be stored in the oneline table.
Parameter |
Description/Value |
---|---|
include_S1 |
True |
only_select_columns |
[‘state’, ‘mass’, ‘log_R’, ‘log_L’, ‘lg_mdot’, ‘he_core_mass’, ‘he_core_radius’, ‘co_core_mass’, ‘co_core_radius’, ‘center_h1’, ‘center_he4’, ‘surface_h1’, ‘surface_he4’, ‘surf_avg_omega_div_omega_crit’, ‘spin’,] (options are: ‘state’, ‘metallicity’, ‘mass’, ‘log_R’, ‘log_L’, ‘lg_mdot’, ‘lg_system_mdot’, ‘lg_wind_mdot’, ‘he_core_mass’, ‘he_core_radius’, ‘c_core_mass’, ‘c_core_radius’, ‘o_core_mass’, ‘o_core_radius’, ‘co_core_mass’, ‘co_core_radius’, ‘center_h1’, ‘center_he4’, ‘center_c12’, ‘center_n14’, ‘center_o16’, ‘surface_h1’, ‘surface_he4’, ‘surface_c12’, ‘surface_n14’, ‘surface_o16’, ‘log_LH’, ‘log_LHe’, ‘log_LZ’, ‘log_Lnuc’, ‘c12_c12’, ‘center_gamma’, ‘avg_c_in_c_core’, ‘surf_avg_omega’, ‘surf_avg_omega_div_omega_crit’, ‘total_moment_of_inertia’, ‘log_total_angular_momentum’, ‘spin’, ‘conv_env_top_mass’, ‘conv_env_bot_mass’, ‘conv_env_top_radius’, ‘conv_env_bot_radius’, ‘conv_env_turnover_time_g’, ‘conv_env_turnover_time_l_b’, ‘conv_env_turnover_time_l_t’, ‘envelope_binding_energy’, ‘mass_conv_reg_fortides’, ‘thickness_conv_reg_fortides’, ‘radius_conv_reg_fortides’, ‘lambda_CE_1cent’, ‘lambda_CE_10cent’, ‘lambda_CE_30cent’, ‘lambda_CE_pure_He_star_10cent’, ‘profile [not currently supported]’) |
scalar_names |
[ ‘natal_kick_array’, ‘SN_type’, ‘f_fb’, ‘spin_orbit_tilt_first_SN’,’spin_orbit_tilt_second_SN’, ‘m_disk_accreted’, ‘m_disk_radiated’] |