mcfacts.physics.binary.evolve

Module for evolving the state of a binary.

mcfacts.physics.binary.evolve.bin_com_feedback_hankla(bin_orb_a, disk_surface_density, disk_opacity_func, disk_bh_eddington_ratio, disk_alpha_viscosity, disk_radius_outer)

Calculates ratio of heating torque to migration torque using Eqn. 28 in Hankla, Jiang & Armitage (2020)

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black holes

  • disk_surf_density_func (function) – Returns AGN gas disk surface density [kg/m^2] given a distance [r_{g,SMBH}] from the SMBH can accept a simple float (constant), but this is deprecated

  • disk_opacity_model (lambda) – Opacity as a function of radius

  • disk_bh_eddington_ratio (float) – Accretion rate of fully embedded stellar mass black hole [Eddington accretion rate]. 1.0=embedded BH accreting at Eddington. Super-Eddington accretion rates are permitted. User chosen input set by input file

  • disk_alpha_viscosity (float) – Disk gas viscocity [units??] alpha parameter

  • disk_radius_outer (float) – Outer radius [r_{g,SMBH}] of the disk

Returns:

ratio_feedback_to_mig – Ratio of feedback torque to migration torque [unitless]

Return type:

float array

Notes

This feedback model uses Eqn. 28 in Hankla, Jiang & Armitage (2020) which yields the ratio of heating torque to migration torque. Heating torque is directed outwards. So, Ratio <1, slows the inward migration of an object. Ratio>1 sends the object migrating outwards. The direction & magnitude of migration (effected by feedback) will be executed in type1.py.

The ratio of torque due to heating to Type 1 migration torque is calculated as R = Gamma_heat/Gamma_mig

~ 0.07 (speed of light/ Keplerian vel.)(Eddington ratio)(1/optical depth)(1/alpha)^3/2

where Eddington ratio can be >=1 or <1 as needed, optical depth (tau) = Sigma* kappa alpha = disk_alpha_viscosity (e.g. alpha = 0.01 in Sirko & Goodman 2003) kappa = 10^0.76 cm^2 g^-1=5.75 cm^2/g = 0.575 m^2/kg for most of Sirko & Goodman disk model (see Fig. 1 & sec 2) but e.g. electron scattering opacity is 0.4 cm^2/g So tau = Sigma*0.575 where Sigma is in kg/m^2. Since v_kep = c/sqrt(a(r_g)) then R ~ 0.07 (a(r_g))^{1/2}(Edd_ratio) (1/tau) (1/alpha)^3/2 So if assume a=10^3r_g, Sigma=7.e6kg/m^2, alpha=0.01, tau=0.575*Sigma (SG03 disk model), Edd_ratio=1, R ~5.5e-4 (a/10^3r_g)^(1/2) (Sigma/7.e6) v.small modification to in-migration at a=10^3r_g

~0.243 (R/10^4r_g)^(1/2) (Sigma/5.e5) comparable. >1 (a/2x10^4r_g)^(1/2)(Sigma/) migration is outward at >=20,000r_g in SG03 >10 (a/7x10^4r_g)^(1/2)(Sigma/) migration outwards starts to runaway in SG03

mcfacts.physics.binary.evolve.bin_contact_check(bin_mass_1, bin_mass_2, bin_sep, bin_flag_merging, smbh_mass)

Tests if binary separation has shrunk so that binary is touching

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black hole parameters

  • smbh_mass (float) – Mass [M_sun] of the SMBH

Returns:

blackholes_binary – Returns modified blackholes_binary with updated bin_sep and flag_merging.

Return type:

AGNBinaryBlackHole

Notes

Touching condition is where binary separation is <= R_schw(M_1) + R_schw(M_2)

= 2(R_g(M_1) + R_g(M_2)) = 2G(M_1+M_2) / c^{2}

Since binary separation is in units of r_g (GM_smbh/c^2) then condition is simply:

binary_separation <= 2M_bin/M_smbh

mcfacts.physics.binary.evolve.bin_harden_baruteau(bin_mass_1, bin_mass_2, bin_sep, bin_ecc, bin_time_to_merger_gw, bin_flag_merging, bin_time_merged, smbh_mass, timestep_duration_yr, time_gw_normalization, time_passed, r_g_in_meters)

Harden black hole binaries using Baruteau+11 prescription

Use Baruteau+11 prescription to harden a pre-existing binary. For every 1000 orbits of binary around its center of mass, the separation (between binary components) is halved.

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black hole parameters

  • smbh_mass (float) – Mass [M_sun] of the SMBH

  • timestep_duration_yr (float) – Length of timestep [yr]

  • time_gw_normalization (float) – A normalization for GW decay timescale [s], set by smbh_mass & normalized for a binary total mass of 10 solar masses.

  • bin_index (int) – Count of number of binaries

  • time_passed (float) – Time elapsed [yr] since beginning of simulation.

Returns:

blackholes_binary – Black hole binaries with time_to_merger_gw, bin_sep, flag_merging, and time_merged updated

Return type:

AGNBinaryBlackHole

mcfacts.physics.binary.evolve.bin_ionization_check(bin_mass_1, bin_mass_2, bin_orb_a, bin_sep, bin_id_num, smbh_mass)

Tests whether binary has been ionized beyond some limit

This function tests whether a binary has been softened beyond some limit. Returns ID numbers of binaries to be ionized. The limit is set to some fraction of the binary Hill sphere, frac_R_hill

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black hole parameters

  • smbh_mass (float) – Mass [M_sun] of the SMBH

Returns:

bh_id_nums – ID numbers of binaries to be removed from binary array

Return type:

numpy.ndarray

Notes

Default is frac_R_hill = 1.0 (ie binary is ionized at the Hill sphere). Change frac_R_hill if you’re testing binary formation at >R_hill.

R_hill = a_com*(M_bin/3M_smbh)^1/3

where a_com is the radial disk location of the binary center of mass, M_bin = M_1 + M_2 is the binary mass M_smbh is the SMBH mass (given by smbh_mass)

Condition is: if bin_separation > frac_R_hill*R_hill:

Ionize binary. Remove binary from blackholes_binary! Add two new singletons to the singleton arrays.

mcfacts.physics.binary.evolve.bin_reality_check(bin_mass_1, bin_mass_2, bin_orb_a_1, bin_orb_a_2, bin_ecc, bin_id_num)

Tests if binaries are real (location and mass do not equal 0)

This function tests to see if the binary is real. If location = 0 or mass = 0 and any other element is NON-ZERO then discard this binary element. Returns ID numbers of fake binaries.

Parameters:

blackholes_binary (AGNBinaryBlackHole) – Binary black hole parameters

Returns:

id_nums or bh_bin_id_num_fakes – ID numbers of fake binaries with float type

Return type:

numpy.ndarray

mcfacts.physics.binary.evolve.change_bin_mass(binary_mass_1, binary_mass_2, binary_flag_merging, disk_bh_eddington_ratio, disk_bh_eddington_mass_growth_rate, timestep_duration_yr)

Add mass to binary components according to chosen BH mass accretion prescription

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black holes in prograde orbits around SMBH

  • disk_bh_eddington_ratio (float) – Accretion rate of fully embedded stellar mass black hole [Eddington accretion rate]. 1.0=embedded BH accreting at Eddington. Super-Eddington accretion rates are permitted. User chosen input set by input file

  • mdisk_bh_eddington_mass_growth_rate (float) – Fractional rate of mass growth [yr^{-1}] AT Eddington accretion rate per year (fixed at 2.3e-8 in mcfacts_sim)

  • timestep_duration_yr (float) – Length of timestep [yr]

Returns:

blackholes_binary – Binary black holes with updated masses after accreting at prescribed rate for one timestep

Return type:

AGNBinaryBlackHole

mcfacts.physics.binary.evolve.change_bin_spin_angles(bin_spin_angle_1, bin_spin_angle_2, binary_flag_merging, disk_bh_eddington_ratio, disk_bh_torque_condition, spin_minimum_resolution, timestep_duration_yr)

Subtract spin angle according to chosen BH torque prescription

Given initial binary black hole spin angles at start of timestep, subtract spin angle according to chosen BH torque prescription. If spin angle is less than spin minimum resolution, spin angle is set to 0.

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – binary black holes in prograde orbits around the SMBH

  • disk_bh_eddington_ratio (float) – Accretion rate of fully embedded stellar mass black hole [Eddington accretion rate]. 1.0=embedded BH accreting at Eddington. Super-Eddington accretion rates are permitted. User chosen input set by input file

  • disk_bh_torque_condition (float) – Fraction of initial mass required to be accreted before BH spin is torqued fully into alignment with the AGN disk. We don’t know for sure but (Bogdanovic et al. 2007) says between 0.01=1% and 0.1=10% is what is required User chosen input set by input file

  • timestep_duration_yr (float) – Length of timestep [yr]

Returns:

blackholes_binary – Binary black holes with updated spin angles after subtracting angle at prescribed rate for one timestep

Return type:

AGNBinaryBlackHole

mcfacts.physics.binary.evolve.change_bin_spin_magnitudes(bin_spin_1, bin_spin_2, bin_flag_merging, disk_bh_eddington_ratio, disk_bh_torque_condition, timestep_duration_yr)

Add spin according to chosen BH torque prescription

Given initial binary black hole spins at start of timestep_duration_yr, add spin according to chosen BH torque prescription. If spin is greater than max allowed spin, spin is set to max value.

Parameters:
  • blackholes_binary (AGNBinaryBlackHole) – Binary black holes in prograde orbits around SMBH

  • disk_bh_eddington_ratio (float) – Accretion rate of fully embedded stellar mass black hole [Eddington accretion rate]. 1.0=embedded BH accreting at Eddington. Super-Eddington accretion rates are permitted. User chosen input set by input file

  • disk_bh_torque_condition (float) – Fraction of initial mass required to be accreted before BH spin is torqued fully into alignment with the AGN disk. We don’t know for sure but (Bogdanovic et al. 2007) says between 0.01=1% and 0.1=10% is what is required User chosen input set by input file

  • timestep_duration_yr (float) – Length of timestep [yr]

Returns:

blackholes_binary – Binary black holes with updated spins after spinning up at prescribed rate for one timestep

Return type:

AGNBinaryBlackHole