26#include <lal/LALStdlib.h>
27#include <lal/LALConstants.h>
30#include <lal/LALSimIMR.h>
36#define UNUSED __attribute__ ((unused))
51 taper = 1. / (exp((t2 - t1)/(t - t1) + (t2 - t1)/(t - t2)) + 1.);
60 if ((*m1 == *m2) && (*lambda1 != *lambda2))
61 XLALPrintWarning(
"m1 == m2 (%g), but lambda1 != lambda2 (%g, %g).\n", *m1, *lambda1, *lambda2);
63 REAL8 lambda1_tmp, lambda2_tmp, m1_tmp, m2_tmp;
65 lambda1_tmp = *lambda1;
66 lambda2_tmp = *lambda2;
70 lambda1_tmp = *lambda2;
71 lambda2_tmp = *lambda1;
77 *lambda1 = lambda1_tmp;
78 *lambda2 = lambda2_tmp;
82 to enfore that m1 should be the larger mass.\
83 After trying to enforce this m1 = %f and m2 = %f\n", *m1, *m2);
94 if ((*m1 == *m2) && (*lambda1 != *lambda2))
95 XLALPrintWarning(
"m1 == m2 (%g), but lambda1 != lambda2 (%g, %g).\n", *m1, *lambda1, *lambda2);
97 REAL8 lambda1_tmp, lambda2_tmp, m1_tmp, m2_tmp, chi1_tmp, chi2_tmp;
99 lambda1_tmp = *lambda1;
100 lambda2_tmp = *lambda2;
106 lambda1_tmp = *lambda2;
107 lambda2_tmp = *lambda1;
115 *lambda1 = lambda1_tmp;
116 *lambda2 = lambda2_tmp;
122 to enfore that m1 should be the larger mass.\
123 After trying to enforce this m1 = %f and m2 = %f\n", *m1, *m2);
145 const REAL8 mtot = m1 + m2;
149 const REAL8 Xa = m1 / mtot;
150 const REAL8 Xb = m2 / mtot;
157 const REAL8 term1 = ( 1.0 + 12.0*Xb/Xa ) * pow(Xa, 5.0) * lambda1;
158 const REAL8 term2 = ( 1.0 + 12.0*Xa/Xb ) * pow(Xb, 5.0) * lambda2;
159 const REAL8 kappa2T = (3.0/13.0) * ( term1 + term2 );
169 const REAL8 mtot_MSUN,
175 XLALPrintError(
"XLAL Error - %s: q (%f) should be greater or equal to unity!\n",
180 const REAL8 a_0 = 0.3586;
181 const REAL8 n_1 = 3.35411203e-2;
182 const REAL8 n_2 = 4.31460284e-5;
183 const REAL8 d_1 = 7.54224145e-2;
184 const REAL8 d_2 = 2.23626859e-4;
186 const REAL8 kappa2T2 = kappa2T * kappa2T;
188 const REAL8 num = 1.0 + n_1*kappa2T + n_2*kappa2T2;
189 const REAL8 den = 1.0 + d_1*kappa2T + d_2*kappa2T2;
190 const REAL8 Q_0 = a_0 / sqrt(
q);
193 const REAL8 Momega_merger = Q_0 * (num / den);
210 const REAL8 mtot_MSUN,
219 XLALPrintError(
"XLAL Error - %s: q (%f) should be greater or equal to unity!\n",
227 REAL8 m1 = Xa*mtot_MSUN;
228 REAL8 m2 = Xb*mtot_MSUN;
236 REAL8 Xa_3 = Xa_2*Xa;
238 REAL8 Xb_3 = Xb_2*Xb;
240 REAL8 kappa2eff = 3.0*nu*(Xa_3*lambda1 + Xb_3*lambda2);
242 const REAL8 a_0 = 0.22;
244 const REAL8 a_1M = 0.80;
245 const REAL8 a_1S = 0.25;
246 const REAL8 b_1S = -1.99;
248 const REAL8 a_1T = 0.0485;
249 const REAL8 a_2T = 0.00000586;
250 const REAL8 a_3T = 0.10;
251 const REAL8 a_4T = 0.000186;
253 const REAL8 b_1T = 1.80;
254 const REAL8 b_2T = 599.99;
255 const REAL8 b_3T = 7.80;
256 const REAL8 b_4T = 84.76;
258 const REAL8 Xval = 1.0 - 4.0*nu;
260 const REAL8 p_1S = a_1S*(1.0 + b_1S*Xval);
261 const REAL8 p_1T = a_1T*(1.0 + b_1T*Xval);
262 const REAL8 p_2T = a_2T*(1.0 + b_2T*Xval);
263 const REAL8 p_3T = a_3T*(1.0 + b_3T*Xval);
264 const REAL8 p_4T = a_4T*(1.0 + b_4T*Xval);
266 const REAL8 kappa2eff2 = kappa2eff*kappa2eff;
268 const REAL8 Sval = Xa_2*chi1_AS + Xb_2*chi2_AS;
270 const REAL8 QM = 1.0 + a_1M*Xval;
271 const REAL8 QS = 1.0 + p_1S*Sval;
273 const REAL8 num = 1.0 + p_1T*kappa2eff + p_2T*kappa2eff2;
274 const REAL8 den = 1.0 + p_3T*kappa2eff + p_4T*kappa2eff2;
275 const REAL8 QT = num / den;
279 const REAL8 Qfit = a_0*QM*QS*QT;
312 REAL8 PN_x = pow(M_omega, 2.0/3.0);
313 REAL8 PN_x_2 = PN_x * PN_x;
314 REAL8 PN_x_3over2 = pow(PN_x, 3.0/2.0);
315 REAL8 PN_x_5over2 = pow(PN_x, 5.0/2.0);
318 const REAL8 c_Newt = 2.4375;
320 const REAL8 n_1 = -17.428;
321 const REAL8 n_3over2 = 31.867;
322 const REAL8 n_2 = -26.414;
323 const REAL8 n_5over2 = 62.362;
325 const REAL8 d_1 = n_1 - 2.496;
326 const REAL8 d_3over2 = 36.089;
328 REAL8 tidal_phase = - kappa2T * c_Newt / (Xa * Xb) * PN_x_5over2;
330 REAL8 num = 1.0 + (n_1 * PN_x) + (n_3over2 * PN_x_3over2) + (n_2 * PN_x_2) + (n_5over2 * PN_x_5over2) ;
331 REAL8 den = 1.0 + (d_1 * PN_x) + (d_3over2 * PN_x_3over2) ;
333 REAL8 ratio = num / den;
335 tidal_phase *= ratio;
353 prefac = 9.0*kappa2T;
358 const REAL8 n1 = 4.157407407407407;
359 const REAL8 n289 = 2519.111111111111;
360 const REAL8 d = 13477.8073677;
362 poly = (1.0 + n1*
x + n289*pow(
x, 2.89))/(1+
d*pow(
x,4.));
363 ampT = - prefac*pow(
x,3.25)*poly;
373 NRTidalv2_coeffs[0] = 2.4375;
374 NRTidalv2_coeffs[1] = -12.615214237993088;
375 NRTidalv2_coeffs[2] = 19.0537346970349;
376 NRTidalv2_coeffs[3] = -21.166863146081035;
377 NRTidalv2_coeffs[4] = 90.55082156324926;
378 NRTidalv2_coeffs[5] = -60.25357801943598;
379 NRTidalv2_coeffs[6] = -15.111207827736678;
380 NRTidalv2_coeffs[7] = 22.195327350624694;
381 NRTidalv2_coeffs[8] = 8.064109635305156;
400 REAL8 PN_x = pow(M_omega, 2.0/3.0);
401 REAL8 PN_x_2 = PN_x * PN_x;
402 REAL8 PN_x_3 = PN_x * PN_x_2;
403 REAL8 PN_x_3over2 = pow(PN_x, 3.0/2.0);
404 REAL8 PN_x_5over2 = pow(PN_x, 5.0/2.0);
406 REAL8 NRTidalv2_coeffs[9];
412 const REAL8 c_Newt = NRTidalv2_coeffs[0];
413 const REAL8 n_1 = NRTidalv2_coeffs[1];
414 const REAL8 n_3over2 = NRTidalv2_coeffs[2];
415 const REAL8 n_2 = NRTidalv2_coeffs[3];
416 const REAL8 n_5over2 = NRTidalv2_coeffs[4];
417 const REAL8 n_3 = NRTidalv2_coeffs[5];
418 const REAL8 d_1 = NRTidalv2_coeffs[6];
419 const REAL8 d_3over2 = NRTidalv2_coeffs[7];
420 const REAL8 d_2 = NRTidalv2_coeffs[8];
421 REAL8 tidal_phase = - kappa2T * c_Newt / (Xa * Xb) * PN_x_5over2;
422 REAL8 num = 1.0 + (n_1 * PN_x) + (n_3over2 * PN_x_3over2) + (n_2 * PN_x_2) + (n_5over2 * PN_x_5over2) + (n_3 * PN_x_3);
423 REAL8 den = 1.0 + (d_1 * PN_x) + (d_3over2 * PN_x_3over2) + (d_2 * PN_x_2) ;
424 REAL8 ratio = num / den;
425 tidal_phase *= ratio;
439 REAL8 Xa_3 = Xa_2*Xa;
440 REAL8 Xa_4 = Xa_3*Xa;
441 REAL8 Xa_5 = Xa_4*Xa;
444 REAL8 Xb_3 = Xb_2*Xb;
445 REAL8 Xb_4 = Xb_3*Xb;
446 REAL8 Xb_5 = Xb_4*Xb;
448 REAL8 den_a = 11.0*Xa-12.0;
449 REAL8 den_b = 11.0*Xb-12.0;
452 PN_coeffs[0] = -3.0*den_a/(16*Xa*Xb_2);
453 PN_coeffs[1] = (-1300.0*Xa_3 + 11430.0*Xa_2 + 4595.0*Xa -15895.0)/(672.0*den_a);
455 PN_coeffs[3] = (22861440.0*Xa_5 - 102135600.0*Xa_4 + 791891100.0*Xa_3 + 874828080.0*Xa_2 + 216234195.0*Xa -1939869350.0)/(27433728.0*den_a);
456 PN_coeffs[4] = -
LAL_PI*(10520.0*Xa_3 -7598.0*Xa_2 +22415.0*Xa - 27719.0)/(672.0*den_a);
458 PN_coeffs[5] = -3.0*den_b/(16*Xb*Xa_2);
459 PN_coeffs[6] = (-1300.0*Xb_3 + 11430.0*Xb_2 + 4595.0*Xb -15895.0)/(672.0*den_b);
461 PN_coeffs[8] = (22861440.0*Xb_5 - 102135600.0*Xb_4 + 791891100.0*Xb_3 + 874828080.0*Xb_2 + 216234195.0*Xb -1939869350.0)/(27433728.0*den_b);
462 PN_coeffs[9] = -
LAL_PI*(10520.0*Xb_3 -7598.0*Xb_2 +22415.0*Xb - 27719.0)/(672.0*den_b);
475 const REAL8 PN_coeffs[10]
482 const REAL8 s10 = 1.273000423;
483 const REAL8 s11 = 3.64169971e-03;
484 const REAL8 s12 = 1.76144380e-03;
486 const REAL8 s20 = 2.78793291e+01;
487 const REAL8 s21 = 1.18175396e-02;
488 const REAL8 s22 = -5.39996790e-03;
490 const REAL8 s30 = 1.42449682e-01;
491 const REAL8 s31 = -1.70505852e-05;
492 const REAL8 s32 = 3.38040594e-05;
499 NRTidalv3_coeffs[0] = s10 + s11*kappa2T + s12*
q*kappa2T;
500 NRTidalv3_coeffs[1] = s20 + s21*kappa2T + s22*
q*kappa2T;
501 NRTidalv3_coeffs[2] = s30 + s31*kappa2T + s32*
q*kappa2T;
503 REAL8 s2s3 = NRTidalv3_coeffs[1]*NRTidalv3_coeffs[2];
504 NRTidalv3_coeffs[3] =
cosh(s2s3) + sinh(s2s3);
506 NRTidalv3_coeffs[4] = 3.0*Xb*Xa*Xa*Xa*Xa*lambda1;
507 NRTidalv3_coeffs[5] = 3.0*Xa*Xb*Xb*Xb*Xb*lambda2;
513 REAL8 kappaA_alpha = pow(NRTidalv3_coeffs[4] + 1,
alpha);
514 REAL8 kappaB_alpha = pow(NRTidalv3_coeffs[5] + 1,
alpha);
520 const REAL8 n_5over20 = -9.40654388e+02;
521 const REAL8 n_5over21 = 6.26517157e+02;
522 const REAL8 n_5over22 = 5.53629706e+02;
523 const REAL8 n_5over23 = 8.84823087e+01;
525 const REAL8 n_30 = 4.05483848e+02;
526 const REAL8 n_31 = -4.25525054e+02;
527 const REAL8 n_32 = -1.92004957e+02;
528 const REAL8 n_33 = -5.10967553e+01;
530 const REAL8 d_10 = 3.80343306e+00;
531 const REAL8 d_11 = -2.52026996e+01;
532 const REAL8 d_12 = -3.08054443e+00;
534 NRTidalv3_coeffs[6] = n_5over20 + n_5over21*Xa + n_5over22*kappaA_alpha + n_5over23*Xa_beta;
535 NRTidalv3_coeffs[7] = n_30 + n_31*Xa + n_32*kappaA_alpha + n_33*Xa_beta;
536 NRTidalv3_coeffs[8] = d_10 + d_11*Xa + d_12*Xa_beta;
538 NRTidalv3_coeffs[9] = n_5over20 + n_5over21*Xb + n_5over22*kappaB_alpha + n_5over23*Xb_beta;
539 NRTidalv3_coeffs[10] = n_30 + n_31*Xb + n_32*kappaB_alpha + n_33*Xb_beta;
540 NRTidalv3_coeffs[11] = d_10 + d_11*Xb + d_12*Xb_beta;
543 REAL8 c_1A = PN_coeffs[1];
544 REAL8 c_3over2A = PN_coeffs[2];
545 REAL8 c_2A = PN_coeffs[3];
546 REAL8 c_5over2A = PN_coeffs[4];
548 REAL8 c_1B = PN_coeffs[6];
549 REAL8 c_3over2B = PN_coeffs[7];
550 REAL8 c_2B = PN_coeffs[8];
551 REAL8 c_5over2B = PN_coeffs[9];
554 REAL8 inv_c1_A = 1.0/c_1A;
555 NRTidalv3_coeffs[12] = c_1A + NRTidalv3_coeffs[8];
556 NRTidalv3_coeffs[13] = ((c_1A*c_3over2A) - c_5over2A - (c_3over2A)*NRTidalv3_coeffs[8] + NRTidalv3_coeffs[6])*inv_c1_A;
557 NRTidalv3_coeffs[14] = c_2A + c_1A*NRTidalv3_coeffs[8];
558 NRTidalv3_coeffs[15] = -(c_5over2A + c_3over2A*NRTidalv3_coeffs[8] - NRTidalv3_coeffs[6])*inv_c1_A;
560 REAL8 inv_c1_B = 1.0/c_1B;
561 NRTidalv3_coeffs[16] = c_1B + NRTidalv3_coeffs[11];
562 NRTidalv3_coeffs[17] = ((c_1B*c_3over2B) - c_5over2B - (c_3over2B)*NRTidalv3_coeffs[11] + NRTidalv3_coeffs[9])*inv_c1_B;
563 NRTidalv3_coeffs[18] = c_2B + c_1B*NRTidalv3_coeffs[11];
564 NRTidalv3_coeffs[19] = -(c_5over2B + c_3over2B*NRTidalv3_coeffs[11] - NRTidalv3_coeffs[9])*inv_c1_B;
576 const REAL8 NRTidalv3_coeffs[20],
577 const REAL8 PN_coeffs[10]
582 REAL8 s1 = NRTidalv3_coeffs[0];
583 REAL8 s2 = NRTidalv3_coeffs[1];
585 REAL8 exps2s3 = NRTidalv3_coeffs[3];
587 REAL8 s2Mom = -s2*M_omega*2.0;
588 REAL8 exps2Mom =
cosh(s2Mom) + sinh(s2Mom);
591 REAL8 dynk2bar = 1.0 + ((s1) - 1)*(1.0/(1.0 + exps2Mom*exps2s3)) - ((s1-1.0)/(1.0 + exps2s3)) - 2.0*M_omega*((s1) - 1)*s2*exps2s3/((1.0 + exps2s3)*(1.0 + exps2s3));
593 REAL8 PN_x = M_omega / cbrt(M_omega);
594 REAL8 PN_x_2 = PN_x * PN_x;
595 REAL8 PN_x_3 = PN_x * PN_x_2;
596 REAL8 PN_x_3over2 = PN_x * sqrt(PN_x);
597 REAL8 PN_x_5over2 = PN_x_3over2 * PN_x;
599 REAL8 kappaA = NRTidalv3_coeffs[4];
600 REAL8 kappaB = NRTidalv3_coeffs[5];
602 REAL8 dynkappaA = kappaA*dynk2bar;
603 REAL8 dynkappaB = kappaB*dynk2bar;
606 REAL8 n_5over2A = NRTidalv3_coeffs[6];
607 REAL8 n_3A = NRTidalv3_coeffs[7];
608 REAL8 d_1A = NRTidalv3_coeffs[8];
610 REAL8 n_5over2B = NRTidalv3_coeffs[9];
611 REAL8 n_3B = NRTidalv3_coeffs[10];
612 REAL8 d_1B = NRTidalv3_coeffs[11];
615 REAL8 c_NewtA = PN_coeffs[0];
616 REAL8 c_NewtB = PN_coeffs[5];
619 REAL8 n_1A = NRTidalv3_coeffs[12];
620 REAL8 n_3over2A = NRTidalv3_coeffs[13];
621 REAL8 n_2A = NRTidalv3_coeffs[14];
622 REAL8 d_3over2A = NRTidalv3_coeffs[15];
624 REAL8 n_1B = NRTidalv3_coeffs[16];
625 REAL8 n_3over2B = NRTidalv3_coeffs[17];
626 REAL8 n_2B = NRTidalv3_coeffs[18];
627 REAL8 d_3over2B = NRTidalv3_coeffs[19];
629 REAL8 factorA = -c_NewtA*PN_x_5over2*dynkappaA;
630 REAL8 factorB = -c_NewtB*PN_x_5over2*dynkappaB;
633 REAL8 numA = 1.0 + (n_1A*PN_x) + (n_3over2A*PN_x_3over2) + (n_2A*PN_x_2) + (n_5over2A*PN_x_5over2) + (n_3A*PN_x_3);
634 REAL8 denA = 1.0 + (d_1A*PN_x) + (d_3over2A*PN_x_3over2);
636 REAL8 numB = 1.0 + (n_1B*PN_x) + (n_3over2B*PN_x_3over2) + (n_2B*PN_x_2) + (n_5over2B*PN_x_5over2) + (n_3B*PN_x_3);
637 REAL8 denB = 1.0 + (d_1B*PN_x) + (d_3over2B*PN_x_3over2);
639 REAL8 ratioA = numA/denA;
640 REAL8 ratioB = numB/denB;
642 REAL8 tidal_phaseA = factorA*ratioA;
643 REAL8 tidal_phaseB = factorB*ratioB;
645 REAL8 tidal_phase = tidal_phaseA + tidal_phaseB;
661 const REAL8 PN_coeffs[10]
668 REAL8 PN_x = M_omega / cbrt(M_omega);
669 REAL8 PN_x_2 = PN_x * PN_x;
670 REAL8 PN_x_3over2 = PN_x * sqrt(PN_x);
671 REAL8 PN_x_5over2 = PN_x_3over2 * PN_x;
673 REAL8 kappaA = 3.0*Xb*Xa*Xa*Xa*Xa*lambda1;
674 REAL8 kappaB = 3.0*Xa*Xb*Xb*Xb*Xb*lambda2;
677 REAL8 c_NewtA = PN_coeffs[0];
678 REAL8 c_1A = PN_coeffs[1];
679 REAL8 c_3over2A = PN_coeffs[2];
680 REAL8 c_2A = PN_coeffs[3];
681 REAL8 c_5over2A = PN_coeffs[4];
683 REAL8 c_NewtB = PN_coeffs[5];
684 REAL8 c_1B = PN_coeffs[6];
685 REAL8 c_3over2B = PN_coeffs[7];
686 REAL8 c_2B = PN_coeffs[8];
687 REAL8 c_5over2B = PN_coeffs[9];
689 REAL8 factorA = -c_NewtA*PN_x_5over2*kappaA;
690 REAL8 factorB = -c_NewtB*PN_x_5over2*kappaB;
692 REAL8 tidal_phasePNA = factorA*(1.0 + (c_1A*PN_x) + (c_3over2A*PN_x_3over2) + (c_2A*PN_x_2) + (c_5over2A*PN_x_5over2));
693 REAL8 tidal_phasePNB = factorB*(1.0 + (c_1B*PN_x) + (c_3over2B*PN_x_3over2) + (c_2B*PN_x_2) + (c_5over2B*PN_x_5over2));
695 REAL8 tidal_phasePN = tidal_phasePNA + tidal_phasePNB;
697 return tidal_phasePN;
720 if( lambda1 < 0 || lambda2 < 0 )
721 XLAL_ERROR(
XLAL_EFUNC,
"lambda1 = %f, lambda2 = %f. Both should be greater than zero for NRTidal models", lambda1, lambda2);
724 const REAL8 mtot = m1 + m2;
730 if ((*fHz).data[(*fHz).length - 1] > 1.)
738 for(
UINT4 i = 0;
i < (*fHz).length;
i++)
793 if( lambda1 < 0 || lambda2 < 0 )
794 XLAL_ERROR(
XLAL_EFUNC,
"lambda1 = %f, lambda2 = %f. Both should be greater than zero for NRTidal models", lambda1, lambda2);
798 const REAL8 mtot = m1 + m2;
802 const REAL8 Xa = m1 / mtot;
803 const REAL8 Xb = m2 / mtot;
811 const REAL8 fHz_end_taper = 1.2*fHz_mrg;
812 const REAL8 fHz_end_taper_v3 = 1.2*fHz_mrg_v3;
815 for(
UINT4 i = 0;
i < (*fHz).length;
i++){
817 (*planck_taper).data[
i] = 1.0 -
PlanckTaper((*fHz).data[
i], fHz_mrg, fHz_end_taper);
821 for(
UINT4 i = 0;
i < (*fHz).length;
i++) {
824 (*planck_taper).data[
i] = 1.0 -
PlanckTaper((*fHz).data[
i], fHz_mrg, fHz_end_taper);
831 REAL8 NRTidalv3_coeffs[20];
833 REAL8 fHzmrgcheck = 0.9 * fHz_mrg_v3;
834 for (
UINT4 i = 0;
i < (*fHz).length;
i++) {
836 if ((*fHz).data[
i] >= fHzmrgcheck && (*phi_tidal).data[
i] >= (*phi_tidal).data[
i-1]) {
841 if (indexmin != -1) {
842 REAL8 tidal_min_value = (*phi_tidal).data[indexmin];
843 for (
UINT4 i = indexmin + 1;
i < (*fHz).length;
i++) {
844 (*phi_tidal).data[
i] = tidal_min_value;
847 for(
UINT4 i = 0;
i < (*fHz).length;
i++) {
848 REAL8 planck_func =
PlanckTaper((*fHz).data[
i], 1.15*fHz_mrg_v3, 1.35*fHz_mrg_v3);
850 (*phi_tidal).data[
i] = (*phi_tidal).data[
i]*(1.0 - planck_func) +
SimNRTunedTidesFDTidalPhase_PN((*fHz).data[
i], Xa, mtot, lambda1, lambda2, PN_coeffs)*planck_func;
852 (*planck_taper).data[
i] = 1.0 -
PlanckTaper((*fHz).data[
i], fHz_mrg_v3, fHz_end_taper_v3);
856 for(
UINT4 i = 0;
i < (*fHz).length;
i++) {
858 (*planck_taper).data[
i] = 1.0;
862 for(
UINT4 i = 0;
i < (*fHz).length;
i++) {
864 (*planck_taper).data[
i] = 1.0 -
PlanckTaper((*fHz).data[
i], fHz_mrg, fHz_end_taper);
871 REAL8 NRTidalv3_coeffs[20];
873 REAL8 fHzmrgcheck = 0.9 * fHz_mrg_v3;
874 for (
UINT4 i = 0;
i < (*fHz).length;
i++) {
876 if ((*fHz).data[
i] >= fHzmrgcheck && (*phi_tidal).data[
i] >= (*phi_tidal).data[
i-1]) {
881 if (indexmin != -1) {
882 REAL8 tidal_min_value = (*phi_tidal).data[indexmin];
883 for (
UINT4 i = indexmin + 1;
i < (*fHz).length;
i++) {
884 (*phi_tidal).data[
i] = tidal_min_value;
887 for(
UINT4 i = 0;
i < (*fHz).length;
i++) {
888 REAL8 planck_func =
PlanckTaper((*fHz).data[
i], 1.15*fHz_mrg_v3, 1.35*fHz_mrg_v3);
890 (*phi_tidal).data[
i] = (*phi_tidal).data[
i]*(1.0 - planck_func) +
SimNRTunedTidesFDTidalPhase_PN((*fHz).data[
i], Xa, mtot, lambda1, lambda2, PN_coeffs)*planck_func;
891 (*planck_taper).data[
i] = 1.0 -
PlanckTaper((*fHz).data[
i], fHz_mrg_v3, fHz_end_taper_v3);
894 else if (NRTidal_version ==
NoNRT_V)
897 XLAL_ERROR(
XLAL_EINVAL,
"Unknown version of NRTidal being used! At present, NRTidal_V, NRTidalv2_V, NRTidalv2NSBH_V, NRTidalv2NoAmpCorr_V and NoNRT_V are the only known ones!" );
923 REAL8 chi1_sq = 0., chi2_sq = 0.;
924 REAL8 X_Asq = 0., X_Bsq = 0.;
925 REAL8 octparam1 = 0, octparam2 = 0.;
937 *SS_3p5PN = - 400.*
LAL_PI*(quadparam1-1.)*chi1_sq*X_Asq - 400.*
LAL_PI*(quadparam2-1.)*chi2_sq*X_Bsq;
938 *SSS_3p5PN = 10.*((X_Asq+308./3.*X_A)*chi1+(X_Bsq-89./3.*X_B)*chi2)*(quadparam1-1.)*X_Asq*chi1_sq
939 + 10.*((X_Bsq+308./3.*X_B)*chi2+(X_Asq-89./3.*X_A)*chi1)*(quadparam2-1.)*X_Bsq*chi2_sq
940 - 440.*octparam1*X_A*X_Asq*chi1_sq*chi1 - 440.*octparam2*X_B*X_Bsq*chi2_sq*chi2;
static vector d(const double L_norm, const double J_norm, const vector roots)
Internal function that returns the coefficients "d_0", "d_2" and "d_4" from 1703.03967 corresponding ...
static double beta(const double a, const double b, const sysq *system)
Internal function that computes the spin-orbit couplings.
void XLALSimInspiralGetHOSpinTerms(REAL8 *SS_3p5PN, REAL8 *SSS_3p5PN, REAL8 X_A, REAL8 X_B, REAL8 chi1, REAL8 chi2, REAL8 quadparam1, REAL8 quadparam2)
Function to add 3.5PN spin-squared and 3.5PN spin-cubed terms.
static int EnforcePrimaryMassIsm1_v3(REAL8 *m1, REAL8 *m2, REAL8 *lambda1, REAL8 *lambda2, REAL8 *chi1_AS, REAL8 *chi2_AS)
function to swap masses, spins, and lambda to enforce m1 >= m2, This is mainly for NRTidalv3,...
static double SimNRTunedTidesFDTidalPhase_v3(const REAL8 fHz, const REAL8 mtot, const REAL8 NRTidalv3_coeffs[20], const REAL8 PN_coeffs[10])
Tidal phase correction for NRTidalv3, Eq.
static double SimNRTunedTidesFDTidalPhase_PN(const REAL8 fHz, const REAL8 Xa, const REAL8 mtot, const REAL8 lambda1, const REAL8 lambda2, const REAL8 PN_coeffs[10])
PN tidal phase correction, at 7.5PN, to connect with NRTidalv3 Phase post-merger, see Eq.
static REAL8 SimNRTunedTidesFDTidalAmplitude(const REAL8 fHz, const REAL8 mtot, const REAL8 kappa2T)
Tidal amplitude corrections; only available for NRTidalv2; Eq 24 of arxiv:1905.06011.
static REAL8 PlanckTaper(const REAL8 t, const REAL8 t1, const REAL8 t2)
Planck taper window.
static double SimNRTunedTidesFDTidalPhase_v2(const REAL8 fHz, const REAL8 Xa, const REAL8 Xb, const REAL8 mtot, const REAL8 kappa2T)
NRTunedTidesFDTidalPhase is Eq 22 of https://arxiv.org/abs/1905.06011 and is a function of x = angula...
static int EnforcePrimaryMassIsm1(REAL8 *m1, REAL8 *m2, REAL8 *lambda1, REAL8 *lambda2)
function to swap masses and lambda to enforce m1 >= m2
int XLALSimNRTunedTidesSetFDTidalPhase_PN_Coeffs(REAL8 *PN_coeffs, const REAL8 Xa)
Coefficients or the PN tidal phase correction, at 7.5PN, to connect with NRTidalv3 Phase post-merger,...
int XLALSimNRTunedTidesFDTidalPhaseFrequencySeries(const REAL8Sequence *phi_tidal, const REAL8Sequence *amp_tidal, const REAL8Sequence *planck_taper, const REAL8Sequence *fHz, REAL8 m1_SI, REAL8 m2_SI, REAL8 lambda1, REAL8 lambda2, REAL8 chi1_AS, REAL8 chi2_AS, NRTidal_version_type NRTidal_version)
Function to call the frequency domain tidal correction over an array of input frequencies.
double XLALSimNRTunedTidesMergerFrequency_v3(const REAL8 mtot_MSUN, REAL8 lambda1, REAL8 lambda2, const REAL8 q, REAL8 chi1_AS, REAL8 chi2_AS)
compute the merger frequency of a BNS system for NRTidalv3 (https://arxiv.org/pdf/2311....
int XLALSimNRTunedTidesSetFDTidalPhase_v2_Coeffs(REAL8 *NRTidalv2_coeffs)
Set the NRTidalv2 phase coefficients in an array for use here and in the IMRPhenomX*_NRTidalv2 implem...
double XLALSimNRTunedTidesMergerFrequency(const REAL8 mtot_MSUN, const REAL8 kappa2T, const REAL8 q)
compute the merger frequency of a BNS system.
static double SimNRTunedTidesFDTidalPhase(const REAL8 fHz, const REAL8 Xa, const REAL8 Xb, const REAL8 mtot, const REAL8 kappa2T)
Internal function only.
int XLALSimNRTunedTidesFDTidalAmplitudeFrequencySeries(const REAL8Sequence *amp_tidal, const REAL8Sequence *fHz, REAL8 m1, REAL8 m2, REAL8 lambda1, REAL8 lambda2)
Function to call amplitude tidal series only; done for convenience to use for PhenomD_NRTidalv2 and S...
double XLALSimNRTunedTidesComputeKappa2T(REAL8 m1_SI, REAL8 m2_SI, REAL8 lambda1, REAL8 lambda2)
convenient function to compute tidal coupling constant.
int XLALSimNRTunedTidesSetFDTidalPhase_v3_Coeffs(REAL8 *NRTidalv3_coeffs, const REAL8 Xa, const REAL8 mtot, const REAL8 lambda1, const REAL8 lambda2, const REAL8 PN_coeffs[10])
Set the NRTidalv3 effective love number and phase coefficients in an array for use here and in the IM...
REAL8 XLALSimUniversalRelationSpinInducedOctupoleVSSpinInducedQuadrupole(REAL8 qm_def)
@ NRTidalv2NoAmpCorr_V
version NRTidalv2, without amplitude corrections
@ NRTidalv3_V
version NRTidalv3
@ NRTidal_V
version NRTidal: based on https://arxiv.org/pdf/1706.02969.pdf
@ NoNRT_V
special case for PhenomPv2 BBH baseline
@ NRTidalv3NoAmpCorr_V
version NRTidalv3, without amplitude corrections
@ NRTidalv2NSBH_V
version NRTidalv2: https://arxiv.org/abs/1905.06011 with amplitude corrections for NSBH (used for SEO...
@ NRTidalv2_V
version NRTidalv2: https://arxiv.org/abs/1905.06011
#define XLAL_CHECK(assertion,...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int int XLALPrintWarning(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1