Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALSimulation 6.2.0.1-b246709
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
LALSimIMRPhenomX_PNR_alpha.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2022 Cardiff University
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with with program; see the file COPYING. If not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
17 * MA 02110-1301 USA
18 */
19
20#ifdef __cplusplus
21extern "C"
22{
23#endif
24
25 /**
26 * \author Eleanor Hamilton, Sebastian Khan, Jonathan E. Thompson
27 *
28 */
29
30#include <lal/LALStdlib.h>
31#include <lal/LALConstants.h>
32#include <lal/LALDatatypes.h>
33#include <lal/XLALError.h>
34
36
37#ifndef _OPENMP
38#define omp ignore
39#endif
40
41#ifndef PHENOMXHMDEBUG
42#define DEBUG 0
43#else
44#define DEBUG 1
45#endif
46
47 /**
48 * This function evaluates Eq. 59 of arXiv:2107.08876.
49 */
51 REAL8 Mf, /**< geometric frequency */
52 const IMRPhenomX_PNR_alpha_parameters *alphaParams, /**< Alpha parameter struct */
53 IMRPhenomXWaveformStruct *pWF, /**< PhenomX Waveform struct */
54 IMRPhenomXPrecessionStruct *pPrec /**< PhenomX Precession struct */
55 )
56 {
57 /* Alpha transition frequencies */
58 REAL8 Mf_alpha_lower = alphaParams->Mf_alpha_lower;
59 REAL8 Mf_alpha_upper = alphaParams->Mf_alpha_upper;
60
61 /* Continuity offset between intermediate and MR region */
62 REAL8 alpha_MR_offset = alphaParams->alpha_MR_offset;
63
64 if (Mf <= Mf_alpha_lower)
65 {
66 /* Below low-frequency cutoff, use either NNLO or MSA alpha depending on precession flag */
67 return IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf, pWF, pPrec);
68 }
69
70 if (Mf >= Mf_alpha_upper)
71 {
72 /* above high-frequency cutoff, use MR expression for alpha shifted for continuity */
73 return IMRPhenomX_PNR_MR_alpha_expression(Mf, alphaParams) + alpha_MR_offset;
74 }
75
76 /* evaluate interpolating function for alpha between Mf_alpha_lower and Mf_alpha_upper */
78 }
79
80 /**
81 * This function generates the blended PNR and PN expressions for alpha for the transition region of parameter space.
82 */
84 REAL8 Mf, /**< geometric frequency */
85 const IMRPhenomX_PNR_alpha_parameters *alphaParams, /**< Alpha parameter struct */
86 IMRPhenomXWaveformStruct *pWF, /**< PhenomX Waveform struct */
87 IMRPhenomXPrecessionStruct *pPrec /**< PhenomX Precession struct */
88 )
89 {
90 /* evaluate blending window */
91 double pnr_window = IMRPhenomX_PNR_AnglesWindow(pWF, pPrec);
92 double msa_window = 1 - pnr_window;
93
94 /* Alpha transition frequencies */
95 REAL8 Mf_alpha_lower = alphaParams->Mf_alpha_lower;
96 REAL8 Mf_alpha_upper = alphaParams->Mf_alpha_upper;
97
98 /* Continuity offset between intermediate and MR region */
99 REAL8 alpha_MR_offset = alphaParams->alpha_MR_offset;
100
101 if (Mf <= Mf_alpha_lower)
102 {
103 /* Below low-frequency cutoff, use either NNLO or MSA alpha depending on precession flag */
104 return IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf, pWF, pPrec);
105 }
106
107 if (Mf >= Mf_alpha_upper)
108 {
109 /* above high-frequency cutoff, use MR expression for alpha shifted for continuity */
110 REAL8 alpha_PN = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf, pWF, pPrec);
111 REAL8 alpha_MR = IMRPhenomX_PNR_MR_alpha_expression(Mf, alphaParams) + alpha_MR_offset;
112 return pnr_window * alpha_MR + msa_window * alpha_PN;
113 }
114
115 /* evaluate interpolating function for alpha between Mf_alpha_lower and Mf_alpha_upper */
116 REAL8 alpha_PN = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf, pWF, pPrec);
117 REAL8 alpha_IM = IMRPhenomX_PNR_intermediate_alpha_expression(Mf, alphaParams);
118 return pnr_window * alpha_IM + msa_window * alpha_PN;
119 }
120
121
122 /**
123 * Here we write a wrapper function to produce either MSA or NNLO
124 * alpha for use in IMRPhenomX_PNR_GeneratePNRAlphaAtMf. This function will
125 * toggle which to use based on IMRPhenomXPrecVersion.
126 */
128 REAL8 Mf, /**< geometric frequency */
129 IMRPhenomXWaveformStruct *pWF, /**< PhenomX waveform struct */
130 IMRPhenomXPrecessionStruct *pPrec /**< PhenomX precession struct */
131 )
132 {
133 /* Define PN expansion parameter v = (pi M f)^(1/3)*/
134 const double omega = LAL_PI * Mf;
135 const double omega_cbrt = cbrt(omega);
136
137 REAL8 alpha;
138
139 /* Toggle between NNLO and MSA alpha */
140 switch (pPrec->IMRPhenomXPrecVersion)
141 {
142 /* ~~~~~ Use NNLO PN Euler Angles - Appendix G of arXiv:2004.06503 and https://dcc.ligo.org/LIGO-T1500602 ~~~~~ */
143 case 101:
144 case 102:
145 case 103:
146 case 104:
147 {
148 const double omega_cbrt2 = omega_cbrt * omega_cbrt;
149 const double logomega = log(omega);
150
151 alpha = IMRPhenomX_PN_Euler_alpha_NNLO(pPrec, omega, omega_cbrt2, omega_cbrt, logomega);
152
153 break;
154 }
155 case 220:
156 case 221:
157 case 222:
158 case 223:
159 case 224:
160 {
161 vector vangles = {0., 0., 0.};
162
163 /* ~~~~~ Euler Angles from Chatziioannou et al, PRD 95, 104004, (2017), arXiv:1703.03967 ~~~~~ */
164 vangles = IMRPhenomX_Return_phi_zeta_costhetaL_MSA(omega_cbrt, pWF, pPrec);
165
166 alpha = vangles.x;
167
168 break;
169 }
170 case 330:
171 {
172 alpha = alpha_SpinTaylor_IMR(Mf,pWF,pPrec);
173 if(isnan(alpha) || isinf(alpha)) XLAL_ERROR(XLAL_EDOM, "Error in %s: alpha_SpinTaylor_IMR returned invalid value.\n",__func__);
174 break;
175 }
176
177 default:
178 {
179 XLAL_ERROR(XLAL_EINVAL, "Error: IMRPhenomXPrecessionVersion not recognized in IMRPhenomX_PNR_GetPNAlphaAtFreq.\n");
180 break;
181 }
182 }
183
184 return alpha;
185 }
186
187 /**
188 * This function evaluates the coefficients outlined in
189 * Sec 7A of arXiv:2107.08876 for alpha.
190 */
192 IMRPhenomX_PNR_alpha_parameters *alphaParams, /**< Alpha parameter struct */
193 IMRPhenomXWaveformStruct *pWF, /**< PhenomX waveform struct */
194 IMRPhenomXPrecessionStruct *pPrec /**< PhenomX precession struct */
195 )
196 {
197 /* safety first */
198 XLAL_CHECK(alphaParams != NULL, XLAL_EFAULT);
199 XLAL_CHECK(pWF != NULL, XLAL_EFAULT);
200 XLAL_CHECK(pPrec != NULL, XLAL_EFAULT);
201
202 /* Grab the single-spin MR parameters */
203 REAL8 eta = pWF->eta;
204 if( pPrec->IMRPhenomXPrecVersion==330 ){
205 eta = ( pWF->eta >= 0.09 ) ? pPrec->eta : 0.09;
206 }
207 else{
208 eta = pWF->eta;
209 }
210 REAL8 chiboundary = 0.80 - 0.20 * exp( -pow((pWF->q - 6.0)/1.5, 8) );
211 REAL8 chi;
212 if( pPrec->IMRPhenomXPrecVersion==330 ){
213 chi = ( pPrec->chi_singleSpin <= chiboundary ) ? pPrec->chi_singleSpin : chiboundary;
214 }
215 else{
216 chi = pPrec->chi_singleSpin;
217 }
219
220 /* Evaluate coefficients as described in Sec. 8D in arXiv:2107.08876 */
222 if (A2 > 0.0)
223 {
224 A2 = 0.0;
225 }
227 if (A3 < 0.00001)
228 {
229 A3 = 0.00001;
230 }
231 REAL8 maxA2 = LAL_PI*LAL_PI*sqrt(A3);
232 if (A2 < -maxA2)
233 {
234 A2 = -maxA2;
235 }
236
237 alphaParams->A1 = fabs(IMRPhenomX_PNR_alpha_A1_coefficient(eta, chi, costheta));
238 alphaParams->A2 = A2;
239 alphaParams->A3 = A3;
240 alphaParams->A4 = IMRPhenomX_PNR_alpha_A4_coefficient(eta, chi, costheta);
241
242 return XLAL_SUCCESS;
243 }
244
245 /**
246 * The following four functions are used to compute the C1 interpolation function
247 * used to connect the inspiral and MR expressions for alpha. They are evaluated at
248 * the two transition frequency values Mf1 = 2 A4 / 7 and Mf2 = A4 / 3.
249 * See Sec. 8A of arXiv:2107.08876.
250 *
251 * Specifically, the next four functions are Eq. 52 in arXiv:2107.08876.
252 */
254 REAL8 Mf1, /**< lower connection frequency in geometric units */
255 REAL8 Mf2, /**< upper connection frequency in geometric units */
256 REAL8 alpha1, /**< value of alpha at Mf1 */
257 REAL8 alpha2, /**< value of alpha at Mf2 */
258 REAL8 dalpha1, /**< derivative of alpha at Mf1 */
259 REAL8 dalpha2 /**< derivative of alpha at Mf2 */
260 )
261 {
262
263 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
264 REAL8 N = 2.0 * (Mf1 * alpha1 - Mf2 * alpha2) - (Mf1 - Mf2) * ((Mf1 * dalpha1 + Mf2 * dalpha2) + (alpha1 + alpha2));
265
266 return N / D;
267 }
268
270 REAL8 Mf1, /**< lower connection frequency in geometric units */
271 REAL8 Mf2, /**< upper connection frequency in geometric units */
272 REAL8 alpha1, /**< value of alpha at Mf1 */
273 REAL8 alpha2, /**< value of alpha at Mf2 */
274 REAL8 dalpha1, /**< derivative of alpha at Mf1 */
275 REAL8 dalpha2 /**< derivative of alpha at Mf2 */
276 )
277 {
278
279 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
280 REAL8 N = 3.0 * (Mf1 + Mf2) * (Mf2 * alpha2 - Mf1 * alpha1) + (Mf1 - Mf2) * ((Mf1 + 2.0 * Mf2) * (Mf1 * dalpha1 + alpha1) + (2.0 * Mf1 + Mf2) * (Mf2 * dalpha2 + alpha2));
281
282 return N / D;
283 }
284
286 REAL8 Mf1, /**< lower connection frequency in geometric units */
287 REAL8 Mf2, /**< upper connection frequency in geometric units */
288 REAL8 alpha1, /**< value of alpha at Mf1 */
289 REAL8 alpha2, /**< value of alpha at Mf2 */
290 REAL8 dalpha1, /**< derivative of alpha at Mf1 */
291 REAL8 dalpha2 /**< derivative of alpha at Mf2 */
292 )
293 {
294
295 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
296 REAL8 N = 6.0 * Mf1 * Mf2 * (Mf1 * alpha1 - Mf2 * alpha2) - (Mf1 - Mf2) * (Mf2 * (2.0 * Mf1 + Mf2) * (Mf1 * dalpha1 + alpha1) + Mf1 * (Mf1 + 2.0 * Mf2) * (Mf2 * dalpha2 + alpha2));
297
298 return N / D;
299 }
300
302 REAL8 Mf1, /**< lower connection frequency in geometric units */
303 REAL8 Mf2, /**< upper connection frequency in geometric units */
304 REAL8 alpha1, /**< value of alpha at Mf1 */
305 REAL8 alpha2, /**< value of alpha at Mf2 */
306 REAL8 dalpha1, /**< derivative of alpha at Mf1 */
307 REAL8 dalpha2 /**< derivative of alpha at Mf2 */
308 )
309 {
310
311 REAL8 D = (Mf2 - Mf1) * (Mf2 - Mf1) * (Mf2 - Mf1);
312 REAL8 N = Mf1 * Mf2 * Mf2 * (Mf2 - 3.0 * Mf1) * alpha1 - Mf1 * Mf1 * Mf2 * (Mf1 - 3.0 * Mf2) * alpha2 + Mf1 * Mf2 * (Mf1 - Mf2) * (Mf2 * (Mf1 * dalpha1 + alpha1) + Mf1 * (Mf2 * dalpha2 + alpha2));
313
314 return N / D;
315 }
316
317 /**
318 * This function evaluates Eq. 51 of arXiv:2107.08876
319 */
321 REAL8 Mf, /**< frequency in geometric units */
322 const IMRPhenomX_PNR_alpha_parameters *alphaParams /**< Alpha parameter struct */
323 )
324 {
325 /* check we have data */
326 XLAL_CHECK(alphaParams != NULL, XLAL_EFAULT);
327
328 /* get interpolation coefficients */
329 REAL8 a0 = alphaParams->alpha_interp_0;
330 REAL8 a1 = alphaParams->alpha_interp_1;
331 REAL8 a2 = alphaParams->alpha_interp_2;
332 REAL8 a3 = alphaParams->alpha_interp_3;
333
334 /* evaluate */
335 return a0 * Mf * Mf + a1 * Mf + a2 + a3 / Mf;
336 }
337
338 /**
339 * This function evaluates Eq. 48 of arXiv:2107.08876
340 */
342 REAL8 Mf, /**< frequency in geometric units */
343 const IMRPhenomX_PNR_alpha_parameters *alphaParams /**< Alpha parameter struct */
344 )
345 {
346 /* check we have data */
347 XLAL_CHECK(alphaParams != NULL, XLAL_EFAULT);
348
349 /* get MR coefficients */
350 REAL8 A1 = alphaParams->A1;
351 REAL8 A2 = alphaParams->A2;
352 REAL8 A3 = alphaParams->A3;
353 REAL8 A4 = alphaParams->A4;
354
355 /* evaluate */
356 return -(A1 / Mf + (A2 * sqrt(A3)) / (A3 + (Mf - A4) * (Mf - A4)));
357 }
358
359 /**
360 * This function evaluates the connection frequencies Mf1 and Mf2 detailed in Sec. 8A
361 * of arXiv:2107.08876. It then computes the values of alpha and its derivatives
362 * at these frequencies to compute the coefficients used for the intermediate
363 * interpolation function Eq. 51.
364 *
365 * The derivatives are computed using simple centered finite differences.
366 */
368 IMRPhenomX_PNR_alpha_parameters *alphaParams, /**< Alpha parameter struct */
369 IMRPhenomXWaveformStruct *pWF, /**< PhenomX waveform struct */
370 IMRPhenomXPrecessionStruct *pPrec /**< PhenomX precession struct */
371 )
372 {
373 /* safety first */
374 XLAL_CHECK(alphaParams != NULL, XLAL_EFAULT);
375 XLAL_CHECK(pWF != NULL, XLAL_EFAULT);
376 XLAL_CHECK(pPrec != NULL, XLAL_EFAULT);
377
378 /* define frequency spacing over which to calculate derivatives */
379 /* here set to be 0.0005Mf */
380 REAL8 dMf = 0.0005;
381
382 /* define connection frequencies for alpha */
383 REAL8 Mf_alpha_upper = alphaParams->A4 / 3.0;
384 REAL8 Mf_alpha_lower = (3.0 / 3.5) * Mf_alpha_upper;
385
386 /* catch cases where Mf_alpha_lower < 2 Hz and just use MSA alpha */
387 if (Mf_alpha_upper < XLALSimIMRPhenomXUtilsHztoMf(2.0, pWF->Mtot))
388 {
389 Mf_alpha_lower = 100.0;
390 Mf_alpha_upper = 100.0;
391 }
392
393 /* catch cases where Mf_alpha_lower lies below the starting frequency of the integration of the PN spin-precession eqs */
394 if (( pPrec->IMRPhenomXPrecVersion==330)&&(Mf_alpha_lower-2.*dMf < pPrec->Mfmin_integration) )
395 {
396 Mf_alpha_lower = 100.0;
397 Mf_alpha_upper = 100.0;
398 }
399
400 alphaParams->Mf_alpha_lower = Mf_alpha_lower;
401 alphaParams->Mf_alpha_upper = Mf_alpha_upper;
402
403 /* evaluate expressions for alpha at and around the connection frequencies */
404 REAL8 a1 = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf_alpha_lower - dMf, pWF, pPrec);
405 REAL8 alpha_lower = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf_alpha_lower, pWF, pPrec);
406 REAL8 a3 = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf_alpha_lower + dMf, pWF, pPrec);
407
408 REAL8 a4 = IMRPhenomX_PNR_MR_alpha_expression(Mf_alpha_upper - dMf, alphaParams);
409 REAL8 alpha_upper = IMRPhenomX_PNR_GetPNAlphaAtFreq(Mf_alpha_upper, pWF, pPrec);
410 REAL8 a6 = IMRPhenomX_PNR_MR_alpha_expression(Mf_alpha_upper + dMf, alphaParams);
411
412 /* calculate derivative of alpha at connection frequencies using finite difference central difference method */
413 REAL8 derivative_alpha_lower = (a3 - a1) / (2.0 * dMf);
414 REAL8 derivative_alpha_upper = (a6 - a4) / (2.0 * dMf);
415
416 /* evaluate the interpolation coefficients */
417 REAL8 alpha_interp_0 = IMRPhenomX_PNR_alpha_interpolation_0(Mf_alpha_lower, Mf_alpha_upper, alpha_lower, alpha_upper, derivative_alpha_lower, derivative_alpha_upper);
418 REAL8 alpha_interp_1 = IMRPhenomX_PNR_alpha_interpolation_1(Mf_alpha_lower, Mf_alpha_upper, alpha_lower, alpha_upper, derivative_alpha_lower, derivative_alpha_upper);
419 REAL8 alpha_interp_2 = IMRPhenomX_PNR_alpha_interpolation_2(Mf_alpha_lower, Mf_alpha_upper, alpha_lower, alpha_upper, derivative_alpha_lower, derivative_alpha_upper);
420 REAL8 alpha_interp_3 = IMRPhenomX_PNR_alpha_interpolation_3(Mf_alpha_lower, Mf_alpha_upper, alpha_lower, alpha_upper, derivative_alpha_lower, derivative_alpha_upper);
421
422 alpha_interp_0 = isnan(alpha_interp_0) ? 0.0 : alpha_interp_0;
423 alpha_interp_1 = isnan(alpha_interp_1) ? 0.0 : alpha_interp_1;
424 alpha_interp_2 = isnan(alpha_interp_2) ? 0.0 : alpha_interp_2;
425 alpha_interp_3 = isnan(alpha_interp_3) ? 0.0 : alpha_interp_3;
426
427 /* calculate the offset required for the MR contributions to alpha to continuously
428 * connect to the inspiral. */
429 REAL8 MR_alpha_at_Mf_upper = IMRPhenomX_PNR_MR_alpha_expression(Mf_alpha_upper, alphaParams);
430 REAL8 alpha_MR_offset = alpha_upper - MR_alpha_at_Mf_upper;
431
432 /* save alpha values into the struct */
433 alphaParams->alpha_lower = alpha_lower;
434 alphaParams->alpha_upper = alpha_upper;
435 alphaParams->derivative_alpha_lower = derivative_alpha_lower;
436 alphaParams->derivative_alpha_upper = derivative_alpha_upper;
437 alphaParams->alpha_interp_0 = alpha_interp_0;
438 alphaParams->alpha_interp_1 = alpha_interp_1;
439 alphaParams->alpha_interp_2 = alpha_interp_2;
440 alphaParams->alpha_interp_3 = alpha_interp_3;
441 alphaParams->alpha_MR_offset = alpha_MR_offset;
442
443 return XLAL_SUCCESS;
444 }
445
446#ifdef __cplusplus
447}
448#endif
REAL8 IMRPhenomX_PNR_MR_alpha_expression(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams)
This function evaluates Eq.
int IMRPhenomX_PNR_precompute_alpha_coefficients(IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates the coefficients outlined in Sec 7A of arXiv:2107.08876 for alpha.
REAL8 IMRPhenomX_PNR_alpha_interpolation_0(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
The following four functions are used to compute the C1 interpolation function used to connect the in...
REAL8 IMRPhenomX_PNR_intermediate_alpha_expression(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams)
This function evaluates Eq.
REAL8 IMRPhenomX_PNR_GetPNAlphaAtFreq(REAL8 Mf, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
Here we write a wrapper function to produce either MSA or NNLO alpha for use in IMRPhenomX_PNR_Genera...
REAL8 IMRPhenomX_PNR_GeneratePNRAlphaAtMf(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates Eq.
REAL8 IMRPhenomX_PNR_alpha_interpolation_1(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
REAL8 IMRPhenomX_PNR_alpha_interpolation_3(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
int IMRPhenomX_PNR_alpha_connection_parameters(IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function evaluates the connection frequencies Mf1 and Mf2 detailed in Sec.
REAL8 IMRPhenomX_PNR_GenerateMergedPNRAlphaAtMf(REAL8 Mf, const IMRPhenomX_PNR_alpha_parameters *alphaParams, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
This function generates the blended PNR and PN expressions for alpha for the transition region of par...
REAL8 IMRPhenomX_PNR_alpha_interpolation_2(REAL8 Mf1, REAL8 Mf2, REAL8 alpha1, REAL8 alpha2, REAL8 dalpha1, REAL8 dalpha2)
REAL8 IMRPhenomX_PNR_alpha_A1_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
expressions for each of the coefficients that appear in the merger-ringdown expression for alpha
REAL8 IMRPhenomX_PNR_alpha_A2_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_alpha_A3_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_alpha_A4_coefficient(REAL8 eta, REAL8 chi, REAL8 costheta)
REAL8 IMRPhenomX_PNR_AnglesWindow(IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
double IMRPhenomX_PN_Euler_alpha_NNLO(IMRPhenomXPrecessionStruct *pPrec, const double omega, const double omega_cbrt2, const double omega_cbrt, const double logomega)
Internal function to calculate alpha using pre-cached NNLO PN expressions.
vector IMRPhenomX_Return_phi_zeta_costhetaL_MSA(const double v, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
Wrapper to generate , and at a given frequency.
REAL8 alpha_SpinTaylor_IMR(REAL8 Mf, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPrecessionStruct *pPrec)
REAL8 XLALSimIMRPhenomXUtilsHztoMf(REAL8 fHz, REAL8 Mtot_Msun)
Convert from frequency in Hz to geometric frequency.
const double a4
const double a2
const double costheta
#define LAL_PI
double REAL8
#define XLAL_ERROR(...)
#define XLAL_CHECK(assertion,...)
XLAL_SUCCESS
XLAL_EFAULT
XLAL_EDOM
XLAL_EINVAL
int N
double alpha
Definition: sgwb.c:106
REAL8 derivative_alpha_upper
derivative at connection frequency
REAL8 derivative_alpha_lower
derivative at connection frequency
REAL8 alpha_interp_2
intermediate coefficient
REAL8 alpha_lower
alpha at connection frequency
REAL8 alpha_MR_offset
continuity offset between intermediate and MR
REAL8 alpha_interp_0
intermediate coefficient
REAL8 Mf_alpha_lower
connection frequency
REAL8 alpha_interp_3
intermediate coefficient
REAL8 Mf_alpha_upper
connection frequency
REAL8 alpha_upper
alpha at connection frequency
REAL8 alpha_interp_1
intermediate coefficient
REAL8 Mfmin_integration
Minimum frequency covered by the integration of PN spin-precessing equations for SpinTaylor models
REAL8 costheta_singleSpin
Polar angle of effective single spin, Eq.
INT4 IMRPhenomXPrecVersion
Flag to set version of Euler angles used.
REAL8 chi_singleSpin
Magnitude of effective single spin used for tapering two-spin angles, Eq.