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:
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:
- 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:
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
floattype- Return type:
- 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:
- 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:
- 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: