LALSimulation  5.4.0.1-fe68b98
LALSimIMRPhenomX_ringdown.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2018 Geraint Pratten
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 
21 /**
22  * \author Geraint Pratten
23  *
24  * \file
25  *
26  * \brief Internal function for IMRPhenomX phenomenological waveform model, arXiv:2001.11412
27  * See \ref LALSimIMRPhenom_c for more details.
28  *
29  */
30 
31 
33 
34 
35 /******************************* IMRPhenomX Amplitude Functions *******************************/
36 
37 /******************************* Amplitude Functions: Ringdown *******************************/
38 
39 /* Phenomenological Ringdown Amplitude Coefficient, gamma_2. See Section VI.C of arXiv:2001.11412. Note that this is just \lambda in the paper. */
40 static double IMRPhenomX_Ringdown_Amp_22_gamma2(double eta, double S, double dchi, double delta, int RDAmpFlag){
41 
42  /*
43  Effective Spin Used: STotR.
44  */
45 
46  double S2 = S*S;
47 
48  double eta2 = (eta*eta);
49 
50  double noSpin, eqSpin, uneqSpin;
51 
52  switch ( RDAmpFlag )
53  {
54  case 103:
55  {
56  noSpin = (0.8312293675316895 + 7.480371544268765*eta - 18.256121237800397*eta2)/(1. + 10.915453595496611*eta - 30.578409433912874*eta2);
57 
58  eqSpin = (S*(0.5869408584532747 + eta*(-0.1467158405070222 - 2.8489481072076472*S) + 0.031852563636196894*S + eta2*(0.25295441250444334 + 4.6849496672664594*S)))/(3.8775263105069953 - 3.41755361841226*S + 1.*S2);
59 
60  uneqSpin = -0.00548054788508203*dchi*delta*eta;
61  break;
62  }
63  default:
64  {
65  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_gamma2: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 103.\n");
66  }
67  }
68 
69  return (noSpin + eqSpin + uneqSpin);
70 
71 }
72 
73 /* Phenomenological Ringdown Amplitude Coefficient, gamma_3. See Section VI.C of arXiv:2001.11412. Note that this is just \sigma in the paper. */
74 static double IMRPhenomX_Ringdown_Amp_22_gamma3(double eta, double S, double dchi, double delta, int RDAmpFlag){
75 
76  /*
77  Effective Spin: STotR.
78  */
79 
80  double eta2 = (eta*eta);
81  double eta3 = (eta2*eta);
82 
83  double noSpin, eqSpin, uneqSpin;
84 
85  switch ( RDAmpFlag )
86  {
87  /* Canonical, 3 Coefficients */
88  case 103:
89  {
90  noSpin = (1.3666000000000007 - 4.091333144596439*eta + 2.109081209912545*eta2 - 4.222259944408823*eta3)/(1. - 2.7440263888207594*eta);
91 
92  eqSpin = (0.07179105336478316 + eta2*(2.331724812782498 - 0.6330998412809531*S) + eta*(-0.8752427297525086 + 0.4168560229353532*S) - 0.05633734476062242*S)*S;
93 
94  uneqSpin = 0. * delta * dchi;
95  break;
96  }
97  default:
98  {
99  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_gamma3: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 103.\n");
100  }
101  }
102 
103  return (noSpin + eqSpin + uneqSpin);
104 
105 }
106 
107 /* Collocation point for ringdown amplitude evaluated at F1 = f_peak */
108 static double IMRPhenomX_Ringdown_Amp_22_v1(double eta, double S, double dchi, double delta, int RDAmpFlag){
109 
110  /*
111  Effective Spin: STotR.
112  */
113 
114  double eta2 = (eta*eta);
115  UNUSED double eta3 = (eta2*eta);
116  UNUSED double eta4 = (eta3*eta);
117 
118  double S2 = S * S;
119  double S3 = S * S2;
120  double S4 = S * S3;
121 
122  double noSpin, eqSpin, uneqSpin;
123 
124  switch ( RDAmpFlag )
125  {
126  /* Canonical, 3 coefficients */
127  case 103:
128  {
129  noSpin = (0.03689164742964719 + 25.417967754401182*eta + 162.52904393600332*eta2)/(1. + 61.19874463331437*eta - 29.628854485544874*eta2);
130 
131  eqSpin = (S*(-0.14352506969368556 + 0.026356911108320547*S + 0.19967405175523437*S2 - 0.05292913111731128*S3 + eta3*(-48.31945248941757 - 3.751501972663298*S + 81.9290740950083*S2 + 30.491948143930266*S3 - 132.77982622925845*S4) + eta*(-4.805034453745424 + 1.11147906765112*S + 6.176053843938542*S2 - 0.2874540719094058*S3 - 8.990840289951514*S4) - 0.18147275151697131*S4 + eta2*(27.675454081988036 - 2.398327419614959*S - 47.99096500250743*S2 - 5.104257870393138*S3 + 72.08174136362386*S4)))/(-1.4160870461211452 + 1.*S);
132 
133  uneqSpin = -0.04426571511345366*dchi*delta*eta2;
134  break;
135  }
136  default:
137  {
138  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_v1: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 103.\n");
139  }
140  }
141 
142  return (noSpin + eqSpin + uneqSpin);
143 
144 }
145 
146 /* Phenomenological Ringdown Amplitude Ansatz. See Eq. 6.17 or arXiv:2001.11412. */
148 
149  int RDAmpFlag = pWF->IMRPhenomXRingdownAmpVersion;
150 
151  double gammaR = pAmp->gammaR; // gamma2 / (gamma3 * fDAMP)
152  double gammaD13 = pAmp->gammaD13; // fDAMP * gamma1 * gamma3
153  double gammaD2 = pAmp->gammaD2; // (fDAMP * gamma3)^2
154 
155  double dfr = ff - pWF->fRING;
156 
157  double ampRD;
158 
159  switch ( RDAmpFlag )
160  {
161  /* Canonical, 3 coefficients */
162  case 103:
163  {
164  // Switch to only doubles in the expression
165  ampRD = exp(- dfr * gammaR ) * (gammaD13) / (dfr*dfr + gammaD2);
166  break;
167  }
168  default:
169  {
170  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_Ansatz: IMRPhenomXRingdownAmpVersion is not valid. Recommended flag is 103.\n");
171  break;
172  }
173  }
174 
175  return ampRD;
176 }
177 
178 /* Derivative (with respect to f) of Phenomenological Ringdown Amplitude Ansatz. See Eq. 6.17 or arXiv:2001.11412. */
180 
181  int RDAmpFlag = pWF->IMRPhenomXRingdownAmpVersion;
182 
183  double g1 = pAmp->gamma1;
184  double g2 = pAmp->gamma2;
185  double g3 = pAmp->gamma3;
186 
187  double frd = pWF->fRING;
188  double fda = pWF->fDAMP;
189  double dfr = ff - frd;
190  double dfd = fda * g3;
191 
192  double numerator, denominator, prefactor;
193  double DampRD;
194 
195  switch ( RDAmpFlag )
196  {
197  /* Canonical, 5 coefficients */
198  case 103:
199  {
200  prefactor = - exp(- g2 * dfr / dfd) * g1;
201  numerator = (dfr*dfr*g2 + 2.0*fda*dfr*g3 + fda*fda*g2*g3*g3);
202  denominator = (dfr*dfr + dfd*dfd) * (dfr*dfr + dfd*dfd);
203  DampRD = prefactor * numerator / denominator;
204  break;
205  }
206  default:
207  {
208  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_Ansatz: IMRPhenomXRingdownAmpVersion is not valid. Recommended flag is 103. \n");
209  break;
210  }
211  }
212 
213  return DampRD;
214 }
215 
216 /* Frequency of amplitude peak (f_peak), see Eq. 20 of 1508.07253 or Eq. XX of YY. */
217 static double IMRPhenomX_Ringdown_Amp_22_PeakFrequency(double gamma2, double gamma3, double frd, double fda, int RDAmpFlag){
218 
219  double fpeak;
220 
221  switch ( RDAmpFlag )
222  {
223  case 103:
224  {
225  /* If gamma2 > 1, then the square root term can become imaginary. Set this term to zero. */
226  if(gamma2 <= 1.0)
227  {
228  fpeak = fabs(frd + fda * gamma3 * (sqrt(1.0 - gamma2 * gamma2) - 1.0) / gamma2);
229  }
230  else
231  {
232  fpeak = fabs(frd + fda*(-1.0)*gamma3/gamma2);
233  }
234  break;
235  }
236  default:
237  {
238  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Amp_22_PeakFrequency: IMRPhenomXRingdownAmpVersion is not valid. Recommended flag is 103. \n");
239  break;
240  }
241  }
242 
243  return fpeak;
244 }
245 
246 /******************************* Phase Functions: Ringdown *******************************/
247 /* Collocation point for ringdown phase evaluated at f_ring = f_4. See Section VII.C of arXiv:2001.11412. */
248 static double IMRPhenomX_Ringdown_Phase_22_v4(double eta, double S, double dchi, double delta, int RDPhaseFlag){
249 
250  /*
251  Effective Spin Used: STotR.
252  */
253 
254  double eta2 = eta*eta;
255  double eta3 = eta2*eta;
256  double eta4 = eta3*eta;
257  double eta5 = eta4*eta;
258 
259  double S2 = S*S;
260  double S3 = S2*S;
261  double S4 = S3*S;
262 
263  double noSpin, eqSpin, uneqSpin;
264 
265  switch ( RDPhaseFlag )
266  {
267  case 105: /* Canonical, 5 coefficients */
268  {
269  noSpin = (-85.86062966719405 - 4616.740713893726*eta - 4925.756920247186*eta2 + 7732.064464348168*eta3 + 12828.269960300782*eta4 - 39783.51698102803*eta5)/(1. + 50.206318806624004*eta);
270 
271  eqSpin = (S*(33.335857451144356 - 36.49019206094966*S + eta3*(1497.3545918387515 - 101.72731770500685*S)*S - 3.835967351280833*S2 + 2.302712009652155*S3 + eta2*(93.64156367505917 - 18.184492163348665*S + 423.48863373726243*S2 - 104.36120236420928*S3 - 719.8775484010988*S4) + 1.6533417657003922*S4 + eta*(-69.19412903018717 + 26.580344399838758*S - 15.399770764623746*S2 + 31.231253209893488*S3 + 97.69027029734173*S4) + eta4*(1075.8686153198323 - 3443.0233614187396*S - 4253.974688619423*S2 - 608.2901586790335*S3 + 5064.173605639933*S4)))/(-1.3705601055555852 + 1.*S);
272 
273  uneqSpin = dchi*delta*eta*(22.363215261437862 + 156.08206945239374*eta);
274  break;
275  }
276  default:
277  {
278  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_v3: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 105. \n");
279  }
280  }
281 
282  return (noSpin + eqSpin + uneqSpin);
283 }
284 
285 /* Difference between collocation points 1 and 2 (d12 = v1 - v2). See Section VII.C of arXiv:2001.11412. */
286 static double IMRPhenomX_Ringdown_Phase_22_d12(double eta, double S, double dchi, double delta, int RDPhaseFlag){
287 
288  /*
289  Effective Spin Used: STotR.
290  */
291 
292  double eta2 = eta*eta;
293  double eta3 = eta2*eta;
294  double eta4 = eta3*eta;
295 
296  double S2 = S*S;
297  double S3 = S2*S;
298  double S4 = S3*S;
299  double S5 = S4*S;
300 
301  double noSpin, eqSpin, uneqSpin;
302 
303  switch ( RDPhaseFlag )
304  {
305  case 105: /* Canonical, 5 coefficients */
306  {
307 
308  noSpin = (eta*(0.7207992174994245 - 1.237332073800276*eta + 6.086871214811216*eta2))/(0.006851189888541745 + 0.06099184229137391*eta - 0.15500218299268662*eta2 + 1.*eta3);
309 
310  eqSpin = ((0.06519048552628343 - 25.25397971063995*eta - 308.62513664956975*eta4 + 58.59408241189781*eta2 + 160.14971486043524*eta3)*S + eta*(-5.215945111216946 + 153.95945758807616*eta - 693.0504179144295*eta2 + 835.1725103648205*eta3)*S2 + (0.20035146870472367 - 0.28745205203100666*eta - 47.56042058800358*eta4)*S3 + eta*(5.7756520242745735 - 43.97332874253772*eta + 338.7263666984089*eta3)*S4 + (-0.2697933899920511 + 4.917070939324979*eta - 22.384949087140086*eta4 - 11.61488280763592*eta2)*S5)/(1. - 0.6628745847248266*S);
311 
312  uneqSpin = -23.504907495268824*dchi*delta*eta2;
313 
314  break;
315  }
316  default:
317  {
318  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_d12: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 105. \n");
319  }
320  }
321 
322  return (noSpin + eqSpin + uneqSpin);
323 }
324 
325 /* Difference between collocation points 2 and 4 (d24 = v2 - v4). See Section VII.C of arXiv:2001.11412. */
326 static double IMRPhenomX_Ringdown_Phase_22_d24(double eta, double S, double dchi, double delta, int RDPhaseFlag){
327 
328  /*
329  Effective Spin Used: STotR.
330  */
331 
332  double eta2 = eta*eta;
333  double eta3 = eta2*eta;
334  double eta4 = eta3*eta;
335 
336  double S2 = S*S;
337  double S3 = S2*S;
338 
339  double noSpin, eqSpin, uneqSpin;
340 
341  switch ( RDPhaseFlag )
342  {
343  case 105: /* Canonical, 5 coefficients */
344  {
345 
346  noSpin = (eta*(-9.460253118496386 + 9.429314399633007*eta + 64.69109972468395*eta2))/(-0.0670554310666559 - 0.09987544893382533*eta + 1.*eta2);
347 
348  eqSpin = (17.36495157980372*eta*S + eta3*S*(930.3458437154668 + 808.457330742532*S) + eta4*S*(-774.3633787391745 - 2177.554979351284*S - 1031.846477275069*S2) + eta2*S*(-191.00932194869588 - 62.997389062600035*S + 64.42947340363101*S2) + 0.04497628581617564*S3)/(1. - 0.7267610313751913*S);
349 
350  uneqSpin = dchi*delta*(-36.66374091965371 + 91.60477826830407*eta)*eta2;
351 
352  break;
353  }
354  default:
355  {
356  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_d13: IMRPhenomXRingdownPhaseVersion is not valid. Recommended flag is 105.\n");
357  }
358  }
359 
360  return (noSpin + eqSpin + uneqSpin);
361 }
362 
363 /* Difference between collocation points 3 and 4 (d34 = v3 - v4). See Section VII.C of arXiv:2001.11412. */
364 static double IMRPhenomX_Ringdown_Phase_22_d34(double eta, double S, double dchi, double delta, int RDPhaseFlag){
365 
366  double eta2 = eta*eta;
367  double eta3 = eta2*eta;
368  double eta5 = eta3*eta2;
369 
370  double S2 = S*S;
371  double S3 = S2*S;
372  double S4 = S3*S;
373 
374  double noSpin, eqSpin, uneqSpin;
375 
376  switch ( RDPhaseFlag )
377  {
378  /* Canonical, 5 coefficients */
379  case 105:
380  {
381  noSpin = (eta*(-8.506898502692536 + 13.936621412517798*eta))/(-0.40919671232073945 + 1.*eta);
382 
383  eqSpin = (eta*(1.7280582989361533*S + 18.41570325463385*S3 - 13.743271480938104*S4) + eta2*(73.8367329022058*S - 95.57802408341716*S3 + 215.78111099820157*S4) + 0.046849371468156265*S2 + eta3*S*(-27.976989112929353 + 6.404060932334562*S - 633.1966645925428*S3 + 109.04824706217418*S2))/(1. - 0.6862449113932192*S);
384 
385  uneqSpin = 641.8965762829259*dchi*delta*eta5;
386 
387  break;
388  }
389  default:
390  {
391  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_d43: IMRPhenomXRingdownPhaseVersion is not valid.\n");
392  }
393  }
394 
395  return (noSpin + eqSpin + uneqSpin);
396 
397 }
398 
399 /* Difference between collocation points 5 and 4 (d54 = v5 - v4). See Section VII.C of arXiv:2001.11412. */
400 static double IMRPhenomX_Ringdown_Phase_22_d54(double eta, double S, double dchi, double delta, int RDPhaseFlag){
401 
402  double eta2 = eta*eta;
403  double eta3 = eta2*eta;
404 
405  double noSpin, eqSpin, uneqSpin;
406 
407  switch ( RDPhaseFlag )
408  {
409  case 105: /* Canonical, 4 coefficients */
410  {
411  noSpin = (eta*(7.05731400277692 + 22.455288821807095*eta + 119.43820622871043*eta2))/(0.26026709603623255 + 1.*eta);
412 
413  eqSpin = (eta2*(134.88158268621922 - 56.05992404859163*S)*S + eta*S*(-7.9407123129681425 + 9.486783128047414*S) + eta3*S*(-316.26970506215554 + 90.31815139272628*S))/(1. - 0.7162058321905909*S);
414 
415  uneqSpin = 43.82713604567481*dchi*delta*eta3;
416 
417  break;
418  }
419  default:
420  {
421  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_d53: IMRPhenomXRingdownPhaseVersion is not valid.\n");
422  }
423  }
424 
425  return (noSpin + eqSpin + uneqSpin);
426 
427 }
428 
429 /*
430  Phenomenological ringdown phase derivative ansatz:
431 
432  a_0 + a_1 f^(-1) + a_2 f^(-2) + a_3 f^(-3) + a_4 f^(-4) + ( aRD ) / ( (f_damp^2 + (f - f_ring)^2 ) )
433 
434  where a_5 = - dphase0 * aRD
435 
436  The canonical ringdown ansatz used here sets a_3 = 0.
437 
438  See Eq. 7.11 of arXiv:2001.11412.
439 */
441 
442  int RDPhaseFlag = pWF->IMRPhenomXRingdownPhaseVersion;
443 
444  //double invf = powers_of_f->m_one;
445  double invf2 = powers_of_f->m_two;
446  double invf4 = powers_of_f->m_four;
447  double invf1o3 = powers_of_f->m_one_third;
448 
449  double frd = pWF->fRING;
450  double fda = pWF->fDAMP;
451  double phaseRD;
452 
453  // c0 = a0, c1 = a1, c2 = a2, c3 = a4 are the polynomial Coefficients
454  // c4 = a_L = -(dphase0 * a_RD) is the Lorentzian coefficient.
455  switch ( RDPhaseFlag )
456  {
457  /* Canonical, 5 coefficients */
458  case 105:
459  {
460  phaseRD = ( pPhase->c0 + pPhase->c1*invf1o3 + pPhase->c2*invf2 + pPhase->c4*invf4 + ( pPhase->cL / (fda*fda + (ff - frd)*(ff - frd)) ) );
461  break;
462  }
463  default:
464  {
465  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_AnsatzInt: IMRPhenomXRingdownPhaseVersion is not valid.\n");
466  break;
467  }
468  }
469 
470  return phaseRD;
471 }
472 
473 /*
474  Phenomenological ringdown phase ansatz (i.e. integral of phase derivative ansatz). See. Eq. 7.11 of arxiv:2001.11412.
475 */
477 
478  int RDPhaseFlag = pWF->IMRPhenomXRingdownPhaseVersion;
479 
480  double invf = powers_of_f->m_one;
481  double invf3 = powers_of_f->m_three;
482  //double logf = powers_of_f->log;
483  double f2o3 = powers_of_f->two_thirds;
484 
485  double frd = pWF->fRING;
486  double fda = pWF->fDAMP;
487 
488  double c0 = pPhase->c0;
489  double c1 = pPhase->c1;
490  double c2 = pPhase->c2;
491  double c4ov3 = pPhase->c4ov3;
492  double cLovfda = pPhase->cLovfda;
493 
494  double phaseRDInt;
495 
496  switch ( RDPhaseFlag )
497  {
498  /* Canonical, 5 coefficients */
499  case 105:
500  {
501  phaseRDInt = ( c0*ff + 1.5*c1*f2o3 - c2*invf - c4ov3*invf3 + (cLovfda * atan( (ff - frd )/fda ) ) );
502  break;
503  }
504  default:
505  {
506  XLAL_ERROR_REAL8(XLAL_EINVAL, "Error in IMRPhenomX_Ringdown_Phase_22_AnsatzInt: IMRPhenomXRingdownPhaseVersion is not valid.\n");
507  break;
508  }
509  }
510 
511  return phaseRDInt;
512 }
const double c1
const double g3
const double g2
const double g1
const double c2
const double c0
static double double delta
static double IMRPhenomX_Ringdown_Amp_22_gamma2(double eta, double S, double dchi, double delta, int RDAmpFlag)
static double IMRPhenomX_Ringdown_Phase_22_v4(double eta, double S, double dchi, double delta, int RDPhaseFlag)
static double IMRPhenomX_Ringdown_Phase_22_d24(double eta, double S, double dchi, double delta, int RDPhaseFlag)
static double IMRPhenomX_Ringdown_Amp_22_v1(double eta, double S, double dchi, double delta, int RDAmpFlag)
static double IMRPhenomX_Ringdown_Phase_22_AnsatzInt(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPhaseCoefficients *pPhase)
static double IMRPhenomX_Ringdown_Phase_22_d12(double eta, double S, double dchi, double delta, int RDPhaseFlag)
static double IMRPhenomX_Ringdown_Phase_22_d34(double eta, double S, double dchi, double delta, int RDPhaseFlag)
static double IMRPhenomX_Ringdown_Amp_22_PeakFrequency(double gamma2, double gamma3, double frd, double fda, int RDAmpFlag)
static double IMRPhenomX_Ringdown_Phase_22_Ansatz(double ff, IMRPhenomX_UsefulPowers *powers_of_f, IMRPhenomXWaveformStruct *pWF, IMRPhenomXPhaseCoefficients *pPhase)
static double IMRPhenomX_Ringdown_Amp_22_DAnsatz(double ff, IMRPhenomXWaveformStruct *pWF, IMRPhenomXAmpCoefficients *pAmp)
static double IMRPhenomX_Ringdown_Phase_22_d54(double eta, double S, double dchi, double delta, int RDPhaseFlag)
static double IMRPhenomX_Ringdown_Amp_22_Ansatz(double ff, IMRPhenomXWaveformStruct *pWF, IMRPhenomXAmpCoefficients *pAmp)
static double IMRPhenomX_Ringdown_Amp_22_gamma3(double eta, double S, double dchi, double delta, int RDAmpFlag)
#define XLAL_ERROR_REAL8(...)
XLAL_EINVAL