5 #include <lal/LALStdlib.h>
6 #include <lal/LALConstants.h>
9 #include <lal/LALSimIMR.h>
43 REAL8 nu=m1*m2/pow(mtot,2);
44 REAL8 massc[]={-1.83417425e-03, 2.39226041e-03, 4.29407902e-03, 9.79775571e-03,
45 2.33868869e-07, -8.28090025e-07, -1.64315549e-06, 8.08340931e-06,
46 -2.00726981e-02, 1.31986011e-01, 6.50754064e-02, -1.42749961e-01};
48 if(chi1<0 && nu<0.188){
74 REAL8 nu=m1*m2/pow(mtot,2);
75 REAL8 spinc[]={-5.44187381e-03, 7.91165608e-03, 2.33362046e-02, 2.47764497e-02,
76 -8.56844797e-07, -2.81727682e-06, 6.61290966e-06, 4.28979016e-05,
77 -3.04174272e-02, 2.54889050e-01, 1.47549350e-01, -4.27905832e-01};
80 if(chi1<0 && nu<0.188){
132 REAL8 p320 = par[10];
133 REAL8 p321 = par[11];
134 REAL8 p11 = p110*ai + p111;
135 REAL8 p12 = p120*ai + p121;
136 REAL8 p21 = p210*ai + p211;
137 REAL8 p22 = p220*ai + p221;
138 REAL8 p31 = p310*ai + p311;
139 REAL8 p32 = p320*ai + p321;
140 p[0] = (p11 + p12*nu)*nu;
141 p[1] = (p21 + p22*nu)*nu;
142 p[2] = (p31 + p32*nu)*nu;
156 return (1 +
x *
p[0] + pow(
x,2) *
p[1]) / pow(1 +
x * pow(
p[2],2),2);
186 REAL8 eta = m1*m2/msq;
188 printf(
"Truncating eta from above to 0.25. This should only be necessary in some rounding corner cases, but better check your m1 and m2 inputs...");
192 printf(
"Truncating negative eta to 0.0. This should only be necessary in some rounding corner cases, but better check your m1 and m2 inputs...");
195 REAL8 eta2 = eta*eta;
196 REAL8 eta3 = eta2*eta;
197 REAL8 eta4 = eta2*eta2;
202 REAL8 Shat = (chi1*m1sq+chi2*m2sq)/(m1sq+m2sq);
203 REAL8 Shat2 = Shat*Shat;
204 REAL8 Shat3 = Shat2*Shat;
207 REAL8 chidiff = chi1 - chi2;
211 REAL8 chidiff2 = chidiff*chidiff;
213 REAL8 sqrt2 = pow(2.,0.5);
215 REAL8 sqrt1m4eta = pow((1. - 4.*eta),0.5);
228 REAL8 a3 = -0.84667563764404;
230 REAL8 b1 = -0.2091189048177395;
231 REAL8 b2 = -0.19709136361080587;
232 REAL8 b3 = -0.1588185739358418;
233 REAL8 b5 = 2.9852925538232014;
234 REAL8 f20 = 4.271313308472851;
235 REAL8 f30 = 31.08987570280556;
236 REAL8 f50 = 1.5673498395263061;
237 REAL8 f10 = 1.8083565298668276;
239 REAL8 d10 = -0.09803730445895877;
240 REAL8 d11 = -3.2283713377939134;
241 REAL8 d20 = 0.01118530335431078;
242 REAL8 d30 = -0.01978238971523653;
243 REAL8 d31 = -4.91667749015812;
244 REAL8 f11 = 15.738082204419655;
245 REAL8 f31 = -243.6299258830685;
246 REAL8 f51 = -0.5808669012986468;
248 REAL8 Erad = (((1. + -2.0/3.0*sqrt2)*eta +
a2*eta2 + a3*eta3 +
a4*eta4)*(1. + b10*
b1*Shat*(f10 + f11*eta + (16. - 16.*f10 - 4.*f11)*eta2) + b20*
b2*Shat2*(f20 + f21*eta + (16. - 16.*f20 - 4.*f21)*eta2) + b30*b3*Shat3*(f30 + f31*eta + (16. - 16.*f30 - 4.*f31)*eta2)))/(1. + b50*b5*Shat*(f50 + f51*eta + (16. - 16.*f50 - 4.*f51)*eta2)) + d10*sqrt1m4eta*eta2*(1. + d11*eta)*chidiff + d30*Shat*sqrt1m4eta*eta*(1. + d31*eta)*chidiff + d20*eta3*chidiff2;
274 REAL8 eta = m1*m2/msq;
276 printf(
"Truncating eta from above to 0.25. This should only be necessary in some rounding corner cases, but better check your m1 and m2 inputs...");
280 printf(
"Truncating negative eta to 0.0. This should only be necessary in some rounding corner cases, but better check your m1 and m2 inputs...");
283 REAL8 eta2 = eta*eta;
284 REAL8 eta3 = eta2*eta;
287 REAL8 S1 = chi1*m1sq/msq;
288 REAL8 S2 = chi2*m2sq/msq;
290 REAL8 Shat = (chi1*m1sq+chi2*m2sq)/(m1sq+m2sq);
291 REAL8 Shat2 = Shat*Shat;
292 REAL8 Shat3 = Shat2*Shat;
295 REAL8 chidiff = chi1 - chi2;
299 REAL8 chidiff2 = chidiff*chidiff;
302 REAL8 sqrt3 = pow(3.,0.5);
303 REAL8 sqrt1m4eta = pow((1. - 4.*eta),0.5);
318 REAL8 a3 = -9.487364155598392;
319 REAL8 a5 = 2.5134875145648374;
322 REAL8 b3 = 0.6540138407185817;
323 REAL8 b5 = 0.8396665722805308;
324 REAL8 f21 = 8.77367320110712;
325 REAL8 f31 = 22.830033250479833;
326 REAL8 f50 = 1.8804718791591157;
327 REAL8 f11 = 4.409160174224525;
329 REAL8 d10 = 0.3223660562764661;
330 REAL8 d11 = 9.332575956437443;
331 REAL8 d20 = -0.059808322561702126;
332 REAL8 d30 = 2.3170397514509933;
333 REAL8 d31 = -3.2624649875884852;
334 REAL8 f12 = 0.5118334706832706;
335 REAL8 f22 = -32.060648277652994;
336 REAL8 f32 = -153.83722669033995;
337 REAL8 f51 = -4.770246856212403;
340 REAL8 Lorb = (2.*sqrt3*eta + a20*
a2*eta2 + a30*a3*eta3)/(1. + a50*a5*eta) + (b10*
b1*Shat*(f11*eta + f12*eta2 + (64. - 16.*f11 - 4.*f12)*eta3) + b20*
b2*Shat2*(f21*eta + f22*eta2 + (64. - 16.*f21 - 4.*f22)*eta3) + b30*b3*Shat3*(f31*eta + f32*eta2 + (64. - 16.*f31 - 4.*f32)*eta3))/(1. + b50*b5*Shat*(f50 + f51*eta + f52*eta2 + (64. - 64.*f50 - 16.*f51 - 4.*f52)*eta3)) + d10*sqrt1m4eta*eta2*(1. + d11*eta)*chidiff + d30*Shat*sqrt1m4eta*eta3*(1. + d31*eta)*chidiff + d20*eta3*chidiff2;
342 REAL8 chif = Lorb + Stot;
static REAL8 model3a(const REAL8 nu, const REAL8 ai, const REAL8 lam, const REAL8 *par)
Template 3D model for an NSBH remnant property.
REAL8 XLALBHNS_spin_aligned(const REAL8 m1, const REAL8 m2, const REAL8 chi1, const REAL8 lam)
Compute final black hole spin for aligned black hole spin.
static void pijk_to_pk(REAL8 *p, const REAL8 nu, const REAL8 ai, const REAL8 *par)
Calculate parameters for 1D model.
REAL8 XLALbbh_final_mass_non_precessing_UIB2016(const REAL8 m1, const REAL8 m2, const REAL8 chi1, const REAL8 chi2)
Calculate the final mass with the aligned-spin NR fit.
REAL8 XLALbbh_final_spin_non_precessing_UIB2016(const REAL8 m1, const REAL8 m2, const REAL8 chi1, const REAL8 chi2)
Calculate the final spin with the aligned-spin NR fit.
REAL8 XLALBHNS_mass_aligned(const REAL8 m1, const REAL8 m2, const REAL8 chi1, const REAL8 lam)
Compute final black hole mass for aligned black hole spin.
static double model1a(const REAL8 x, const REAL8 *p)
Template 1D model for an NSBH remnant property.