diff --git a/binarycpython/utils/useful_funcs.py b/binarycpython/utils/useful_funcs.py index 2b3b5001246f2fae36774d189df158aa3971bf1a..2fd50441b5bfd46f2dff2309234351f4cf85c2a2 100644 --- a/binarycpython/utils/useful_funcs.py +++ b/binarycpython/utils/useful_funcs.py @@ -16,12 +16,75 @@ Tasks: """ import math +import re from typing import Union +from binarycpython import _binary_c_bindings +from binarycpython.utils.functions import create_arg_string + AURSUN = 2.150445198804013386961742071435e02 YEARDY = 3.651995478818308811241877265275e02 + + +def minimum_period_for_RLOF(M1, M2, metallicity, store_memaddr=-1): + """ + Wrapper function for _binary_c_bindings.return_minimum_orbit_for_RLOF + + Handles the output and returns the minimum orbital period at which RLOF just does not occur at zams + + Args: + M1: Primary mass in solar mass + M2: Secondary mass in solar mass + metallicity: metallicity + store_memaddr (optional): store memory adress + Returns: + minimum orbital_period that just does not cause a RLOF at ZAMS + + """ + + bse_dict = {"M_1": M1, "M_2": M2, "metallicity": metallicity, "minimum_orbital_period_for_instant_RLOF": 1, "minimum_separation_for_instant_RLOF": 1} + + argstring = "binary_c " + create_arg_string(bse_dict) + + output = _binary_c_bindings.return_minimum_orbit_for_RLOF(argstring, store_memaddr) + + minimum_period = float(re.search('MINIMUM PERIOD (.*)', output).group(1)) + + return minimum_period + +print(minimum_period_for_RLOF(10, 5, 0.02)) + +def minimum_separation_for_RLOF(M1, M2, metallicity, store_memaddr=-1): + """ + Wrapper function for _binary_c_bindings.return_minimum_orbit_for_RLOF + + Handles the output and returns the minimum separation at which RLOF just does not occur at ZAMS + + Args: + M1: Primary mass in solar mass + M2: Secondary mass in solar mass + metallicity: metallicity + store_memaddr (optional): store memory adress + Returns: + minimum separation that just does not cause a RLOF at ZAMS + + """ + + bse_dict = {"M_1": M1, "M_2": M2, "metallicity": metallicity, "minimum_orbital_period_for_instant_RLOF": 1, "minimum_separation_for_instant_RLOF": 1} + + argstring = "binary_c " + create_arg_string(bse_dict) + + output = _binary_c_bindings.return_minimum_orbit_for_RLOF(argstring, store_memaddr) + + minimum_separation = float(re.search('MINIMUM SEPARATION (.*)', output).group(1)) + + return minimum_separation +# print(minimum_separation_for_RLOF(10, 5, 0.02)) + + + def calc_period_from_sep( M1: Union[int, float], M2: Union[int, float], sep: Union[int, float] ) -> Union[int, float]: