Loading [MathJax]/extensions/TeX/AMSmath.js
LALInspiral 5.0.3.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
LALInspiralChooseModel.c
Go to the documentation of this file.
1/*
2* Copyright (C) 2007 David Churches, Jolien Creighton, David McKechan, B.S. Sathyaprakash, Thomas Cokelaer, Duncan Brown, Riccardo Sturani, Laszlo Vereb, Drew Keppel
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 * \author Sathyaprakash, B. S.
22 * \file
23 * \ingroup LALInspiral_h
24 *
25 * \brief Module to set the pointers to the required energy and flux functions.
26 * Normally, a user is not required to call this function to generate a waveform.
27 *
28 * ### Prototypes ###
29 *
30 * <tt>LALInspiralChooseModel()</tt>
31 * <ul>
32 * <li> \c f: Output containing the pointers to the appropriate
33 * energy, flux, frequency, timing and phasing functions.</li>
34 * <li> \c ak: Output containing the PN expnasion coefficients.</li>
35 * <li> \c params: Input containing binary chirp parameters.</li>
36 * </ul>
37 *
38 * ### Description ###
39 *
40 * This module gives the post-Newtonian expansions and/or P-approximants
41 * to the energy, its derivative and gravitational-wave flux functions. More
42 * specifically, the <tt>static REAL8</tt> functions below give Taylor expansions
43 * of \f$dE/dv,\f$ and \f${\cal F}(v),\f$ P-approximants of \f$e(v),\f$ \f$dE/dv\f$
44 * (derived from \f$e(v)\f$) and \f${\cal F}(v).\f$
45 *
46 * \c LALInspiralChooseModel
47 * is used to set pointers to the required energy and flux functions
48 * \f$E^{\prime}_T(v),\f$ \f$\mathcal{F}_T(v),\f$ \f$E^{\prime}_P(v)\f$ and \f$\mathcal{F}_P(v),\f$
49 * in <tt>expnFunc,</tt> as also the GW phasing and frequency fucntions used in
50 * the various approximants to generate the waveform.
51 * More specifically pointers are set to the following functions in the structure
52 * \c expnFunc:
53 * <ul>
54 * <li> <tt>EnergyFunction *dEnergy</tt>
55 * </li><li> <tt>FluxFunction *flux</tt>
56 * </li><li> <tt>InspiralTiming2 *timing2</tt>
57 * </li><li> <tt>InspiralPhasing2 *phasing2</tt>
58 * </li><li> <tt>InspiralPhasing3 *phasing3</tt>
59 * </li><li> <tt>InspiralFrequency3 *frequency3</tt></li>
60 * </ul>
61 * \c LALInspiralChooseModel also outputs in \c ak the
62 * last stable orbit (LSO) velocity \f$v_\textrm{LSO}\f$ (as <tt>ak->vn</tt>)
63 * defined by the equation \f$E'(v_\textrm{LSO})=0,\f$
64 * the values of the GW frequency \f$f_\textrm{LSO}=v_\textrm{LSO}^3/(\pi m)\f$
65 * (as <tt>ak->fn</tt>) and time (as <tt>ak->tn</tt>) elapsed from <tt>params->fLower</tt>
66 * to smaller of \c fCutOff and <tt>ak->fn</tt> by evaluating the integral
67 * \f{equation}{
68 * t_n = t_{0} - m \int^{v_n}_{v_0} \frac{E^{\prime}(v)}{\mathcal{F}(v)} \, dv\,,
69 * \f}
70 * where \f$t_{0}\f$ (usually equal to zero) is the user specified starting
71 * time for the waveform when the wave frequency reaches <tt>params->fLower</tt>
72 * and \f$v_{0}= (\pi m f)^{1/3}\f$ (with \f$f=<tt>params->fLower</tt>\f$) is the velocity
73 * at time \f$t_{0}.\f$ Note that \f$E'(v)\f$ and \f${\cal F}(v)\f$ are defined in
74 * <tt>f->dEnergy</tt> and <tt>f->flux.</tt>
75 *
76 * ### Algorithm ###
77 *
78 * Numerical integration is used to compute <tt>ak->tn.</tt>
79 *
80 * ### Uses ###
81 *
82 * LALInspiralTofV
83 *
84 * ### Notes ###
85 *
86 * <ul>
87 * <li> See Damour, Iyer and Sathyaprakash, PRD 57, 885, 1998 for further details.
88 * Damour, Iyer and Sathyaprakash, PRD 63, 044023, 2001 is a resource paper that
89 * summarizes how to generate waveforms in different approximations to the dynamics
90 * of a compact binary under radiation reaction.</li>
91 * <li> The Pade Approximant for the 1PN expansion is undefined as also
92 * EOB at orders less than 2PN. BCV is independent of the PN order.
93 * Spinning waveforms are only defined at the highest PN order.</li>
94 * </ul>
95 *
96 */
97
98#include <math.h>
99#include <lal/LALStdlib.h>
100#include <lal/LALInspiral.h>
101
103{
104 REAL8 dEnergy;
105 dEnergy = ak->dETaN * v;
106 return (dEnergy);
107}
108
109
111{
112 REAL8 dEnergy, x;
113 x = v*v;
114 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x);
115 return (dEnergy);
116}
117
118
120{
121 REAL8 dEnergy, x;
122 x = v*v;
123 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x*x);
124 return (dEnergy);
125}
126
127
128
130{
131 REAL8 dEnergy, x;
132 x = v*v;
133 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x*x + ak->dETa3*x*x*x);
134 return (dEnergy);
135}
136
137
138
139
140
141
142static REAL8 Ft0(REAL8 v, expnCoeffs *ak)
143{
144 REAL8 flux,v2,v4,v8,v10;
145 v2 = v*v;
146 v4 = v2*v2;
147 v8 = v4*v4;
148 v10 = v8*v2;
149 flux = ak->FTaN * v10;
150 return (flux);
151}
152
153
154static REAL8 Ft2(REAL8 v, expnCoeffs *ak)
155{
156 REAL8 flux,v2,v4,v8,v10;
157 v2 = v*v;
158 v4 = v2*v2;
159 v8 = v4*v4;
160 v10 = v8*v2;
161 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2);
162 return (flux);
163}
164
165
166static REAL8 Ft3(REAL8 v, expnCoeffs *ak)
167{
168 REAL8 flux,v2,v4,v8,v10;
169 v2 = v*v;
170 v4 = v2*v2;
171 v8 = v4*v4;
172 v10 = v8*v2;
173 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v);
174 return (flux);
175}
176
177
178static REAL8 Ft4(REAL8 v, expnCoeffs *ak)
179{
180 REAL8 flux,v2,v4,v8,v10;
181 v2 = v*v;
182 v4 = v2*v2;
183 v8 = v4*v4;
184 v10 = v8*v2;
185 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4);
186 return (flux);
187}
188
189
190static REAL8 Ft5(REAL8 v, expnCoeffs *ak)
191{
192 REAL8 flux,v2,v4,v8,v10;
193 v2 = v*v;
194 v4 = v2*v2;
195 v8 = v4*v4;
196 v10 = v8*v2;
197 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
198 + ak->FTa5*v4*v);
199 return (flux);
200}
201
202
203static REAL8 Ft6(REAL8 v, expnCoeffs *ak)
204{
205 REAL8 flux,v2,v4,v6,v8,v10;
206 v2 = v*v;
207 v4 = v2*v2;
208 v6 = v4*v2;
209 v8 = v4*v4;
210 v10 = v8*v2;
211 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
212 + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6);
213 return (flux);
214}
215
216
217static REAL8 Ft7(REAL8 v, expnCoeffs *ak)
218{
219 REAL8 flux,v2,v4,v6,v8,v10;
220 v2 = v*v;
221 v4 = v2*v2;
222 v6 = v4*v2;
223 v8 = v4*v4;
224 v10 = v8*v2;
225 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
226 + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6 + ak->FTa7*v6*v);
227 return (flux);
228}
229
230
231/*
232static REAL8 ep0(REAL8 v, expnCoeffs *ak)
233{
234 REAL8 x, energy;
235 ak = NULL;
236 x = v*v;
237 energy = -x;
238 return (energy);
239}
240*/
241
242
243static REAL8 ep2(REAL8 v, expnCoeffs *ak)
244{
245 REAL8 x, energy;
246 x = v*v;
247 energy = -x / (1. + ak->ePa1 * x);
248 return (energy);
249}
250
251
252static REAL8 ep4(REAL8 v, expnCoeffs *ak)
253{
254 REAL8 x, energy;
255 x = v*v;
256 energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x));
257 return (energy);
258}
259
260
261static REAL8 ep6(REAL8 v, expnCoeffs *ak)
262{
263 REAL8 x, energy;
264 x = v*v;
265 energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x /(1. + ak->ePa3*x)));
266 return (energy);
267}
268
269/*
270static REAL8 dEp0(REAL8 v, expnCoeffs *ak)
271{
272 REAL8 energy, denergy, Energy, dEnergy, y;
273 energy = ep0(v, ak);
274 y = sqrt(1.+energy);
275 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
276 denergy = -1;
277 dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
278 return(dEnergy);
279}
280*/
281
282
284{
285 REAL8 energy, denergy, Energy, dEnergy, x, y;
286 x = v*v;
287 energy = ep2(v, ak);
288 y = sqrt(1.+energy);
289 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
290 denergy = -1. / ((1. + ak->ePa1*x)*(1. + ak->ePa1*x));
291 dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
292 return(dEnergy);
293}
294
295
297{
298 REAL8 energy, denergy, Energy, dEnergy, denom, x, y;
299 x = v*v;
300 energy = ep4(v, ak);
301 y = sqrt(1.+energy);
302 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
303
304 denom = 1. + (ak->ePa1 + ak->ePa2) * x;
305 denom = denom * denom;
306 denergy = (1. + 2.*ak->ePa2*x + ((ak->ePa1 + ak->ePa2) * ak->ePa2 * x*x))/denom;
307 dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
308 return(dEnergy);
309}
310
311
312
314{
315 REAL8 energy, denergy, Energy, dEnergy, denom, x, y;
316 x = v*v;
317 energy = ep6(v, ak);
318 y = sqrt(1.+energy);
319 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
320
321 denom = 1. + (ak->ePa1 + ak->ePa2 + ak->ePa3) * x + ak->ePa1*ak->ePa3*x*x;
322 denom = denom * denom;
323
324 denergy = (1. + 2.*(ak->ePa2+ak->ePa3)*x + (ak->ePa1*ak->ePa2
325 + ak->ePa2*ak->ePa2 + 2.* ak->ePa2*ak->ePa3
326 + ak->ePa3*ak->ePa3) * x*x)
327 /denom;
328 dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
329 return(dEnergy);
330}
331
332
333
334/*
335static REAL8 Fp0(REAL8 v, expnCoeffs *ak)
336{
337 REAL8 flux,v2,v4,v8,v10;
338 v2 = v*v;
339 v4 = v2*v2;
340 v8 = v4*v4;
341 v10 = v8*v2;
342 flux = ak->fPaN * v10;
343 return (flux);
344}
345*/
346
347/*
348static REAL8 Fp1(REAL8 v, expnCoeffs *ak)
349{
350 REAL8 flux,v2,v4,v8,v10;
351 v2 = v*v;
352 v4 = v2*v2;
353 v8 = v4*v4;
354 v10 = v8*v2;
355 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v) * (1.-v/ak->vpoleP4));
356 return (flux);
357}
358*/
359
360/*
361static REAL8 Fp2(REAL8 v, expnCoeffs *ak)
362{
363 REAL8 flux,v2,v4,v8,v10;
364 v2 = v*v;
365 v4 = v2*v2;
366 v8 = v4*v4;
367 v10 = v8*v2;
368 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v / (1.+ak->fPa2*v)) * (1.-v/ak->vpoleP4));
369 return (flux);
370}
371*/
372
373
374static REAL8 Fp3(REAL8 v, expnCoeffs *ak)
375{
376 REAL8 flux,v2,v4,v8,v10;
377 v2 = v*v;
378 v4 = v2*v2;
379 v8 = v4*v4;
380 v10 = v8*v2;
381 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v)))
382 * (1.-v/ak->vpoleP4));
383 return (flux);
384}
385
386
387static REAL8 Fp4(REAL8 v, expnCoeffs *ak)
388{
389 REAL8 flux,v2,v4,v8,v10;
390 v2 = v*v;
391 v4 = v2*v2;
392 v8 = v4*v4;
393 v10 = v8*v2;
394 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
395 / (1.+ak->fPa4*v)))) * (1.-v/ak->vpoleP4));
396 return (flux);
397}
398
399
400static REAL8 Fp5(REAL8 v, expnCoeffs *ak)
401{
402 REAL8 flux,v2,v4,v8,v10;
403 v2 = v*v;
404 v4 = v2*v2;
405 v8 = v4*v4;
406 v10 = v8*v2;
407 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
408 / (1.+ak->fPa4*v / (1.+ak->fPa5*v))))) * (1.-v/ak->vpoleP4));
409 return (flux);
410}
411
412
413static REAL8 Fp6(REAL8 v, expnCoeffs *ak)
414{
415 REAL8 flux,v2,v4,v6,v8,v10;
416 v2 = v*v;
417 v4 = v2*v2;
418 v6 = v4*v2;
419 v8 = v4*v4;
420 v10 = v8*v2;
421 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
422 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v))))))
423 * (1.-v/ak->vpoleP6));
424 /* */
425 flux *= (1.+ log(v/ak->vlsoP4) * ak->FTl6*v6) ;
426 return (flux);
427}
428
429
430static REAL8 Fp7(REAL8 v, expnCoeffs *ak)
431{
432 REAL8 flux,v2,v4,v6,v8,v10;
433 v2 = v*v;
434 v4 = v2*v2;
435 v6 = v4*v2;
436 v8 = v4*v4;
437 v10 = v8*v2;
438 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
439 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v)))))))
440 * (1.-v/ak->vpoleP6));
441 flux *= (1.+ log(v/ak->vlsoP4) * ak->FTl6*v6) ;
442 return (flux);
443}
444
445/* Flux for the EOBNRv2 model */
447{
448 REAL8 flux,v2,v4,v6,v8,v10, l6, l8;
449 v2 = v*v;
450 v4 = v2*v2;
451 v6 = v4*v2;
452 v8 = v4*v4;
453 v10 = v8*v2;
454 l6 = ak->FTl6;
455 l8 = ak->FTl8 - ak->FTa2*ak->FTl6;
456 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
457 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v
458 / (1.+ak->fPa8*v))))))))
459 * (1.-v/ak->vpolePP));
460 flux *= (1.+ log(v/ak->vlsoPP) * (l6*v6 + l8*v8) ) ;
461 return (flux);
462}
463
464/*
465static REAL8 Fp8(REAL8 v, expnCoeffs *ak)
466{
467 REAL8 flux,v2,v4,v6,v8,v10, l6, l8;
468 v2 = v*v;
469 v4 = v2*v2;
470 v6 = v4*v2;
471 v8 = v4*v4;
472 v10 = v8*v2;
473 l6 = ak->FTl6;
474 l8 = ak->FTl8 - ak->FTa2*ak->FTl6;
475 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
476 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v
477 / (1.+ak->fPa8*v))))))))
478 * (1.-v/ak->vpoleP6));
479 flux *= (1.+ log(v/ak->vlsoP4) * (l6*v6 + l8*v8) ) ;
480 return (flux);
481}
482*/
483
484
485void
488 expnFunc *f,
489 expnCoeffs *ak,
491 )
492{
493 XLAL_PRINT_DEPRECATION_WARNING("XLALInspiralChooseModel");
494
497
500
502 RETURN (status);
503}
504
505int
507 expnFunc *f,
508 expnCoeffs *ak,
510 )
511{
512 REAL8 vn, vlso;
513 TofVIn in1;
514 REAL8 tofv;
515 void *in2;
516
517 if (f == NULL)
519 if (ak == NULL)
521 if (params == NULL)
523 if (params->order == LAL_PNORDER_HALF || (INT4)params->order < 0
524 || (INT4)params->order > 8)
525 {
526 XLALPrintError("XLAL Error - %s: PN order %d%s not supported\n", __func__,
527 ((INT4)params->order)/2, ((INT4)params->order)%2?".5":"");
529 }
530
531 vlso = 0;
532
533 switch (params->order)
534 {
536 switch (params->approximant)
537 {
538 case AmpCorPPN:
539 case Eccentricity:
540 case TaylorT1:
541 case TaylorT2:
542 case TaylorT3:
543 case TaylorF1:
544 case TaylorF2:
545 case TaylorF2RedSpin:
547 case SpinTaylorT3:
548 case SpinTaylor:
549 case SpinTaylorT4:
550 case PhenSpinTaylorRD:
551 case SpinQuadTaylor:
552 case IMRPhenomA:
553 case IMRPhenomB:
554 case IMRPhenomD:
555 case IMRPhenomFA:
556 case IMRPhenomFB:
557 ak->vn = ak->vlso = vlso = ak->vlsoT0;
558 f->dEnergy = dEt0;
559 f->flux = Ft0;
564 break;
565 case PadeT1:
566 case PadeF1:
567 case EOB:
568 case EOBNR:
569 case EOBNRv2:
570 case EOBNRv2HM:
571 case TaylorEt:
572 case TaylorT4:
573 case TaylorN:
574 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
576 break;
577 default:
578 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
580 }
581 break;
582 case LAL_PNORDER_HALF:
583 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
585 break;
586 case LAL_PNORDER_ONE:
587 switch (params->approximant)
588 {
589 case Eccentricity:
590 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
592 break;
593 case AmpCorPPN:
594 case TaylorT1:
595 case TaylorT2:
596 case TaylorT3:
597 case TaylorF1:
598 case TaylorF2:
599 case TaylorF2RedSpin:
601 case SpinTaylorT3:
602 case SpinTaylor:
603 case SpinTaylorT4:
604 case PhenSpinTaylorRD:
605 case SpinQuadTaylor:
606 case IMRPhenomA:
607 case IMRPhenomB:
608 case IMRPhenomD:
609 case IMRPhenomFA:
610 case IMRPhenomFB:
611
612 ak->vn = ak->vlso = vlso = ak->vlsoT2;
613 f->dEnergy = dEt2;
614 f->flux = Ft2;
619 break;
620 case PadeT1:
621 case PadeF1:
622 case EOB:
623 case EOBNR:
624 case EOBNRv2:
625 case EOBNRv2HM:
626 case TaylorEt:
627 case TaylorT4:
628 case TaylorN:
629 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
631 break;
632 default:
633 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
635 }
636 break;
638 switch (params->approximant)
639 {
640 case Eccentricity:
641 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
643 break;
644 case AmpCorPPN:
645 case TaylorT1:
646 case TaylorT2:
647 case TaylorT3:
648 case TaylorF1:
649 case TaylorF2:
650 case TaylorF2RedSpin:
652 case SpinTaylorT3:
653 case SpinTaylor:
654 case SpinTaylorT4:
655 case PhenSpinTaylorRD:
656 case SpinQuadTaylor:
657 case IMRPhenomA:
658 case IMRPhenomB:
659 case IMRPhenomD:
660 case IMRPhenomFA:
661 case IMRPhenomFB:
662 ak->vn = ak->vlso = vlso = ak->vlsoT2;
663 f->dEnergy = dEt2;
664 f->flux = Ft3;
669 break;
670 case PadeT1:
671 ak->vn = ak->vlso = vlso = ak->vlsoP0;
672 f->dEnergy = dEp2;
673 f->flux = Fp3;
674 break;
675 case PadeF1:
676 case EOB:
677 case EOBNR:
678 case EOBNRv2:
679 case EOBNRv2HM:
680 case TaylorEt:
681 case TaylorT4:
682 case TaylorN:
683 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
685 break;
686 default:
687 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
689 }
690 break;
691 case LAL_PNORDER_TWO:
692 switch (params->approximant)
693 {
694 case Eccentricity:
695 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
697 break;
698 case AmpCorPPN:
699 case TaylorT1:
700 case TaylorT2:
701 case TaylorT3:
702 case TaylorF1:
703 case TaylorF2:
704 case TaylorF2RedSpin:
706 case SpinTaylorT3:
707 case SpinTaylor:
708 case SpinTaylorT4:
709 case PhenSpinTaylorRD:
710 case SpinQuadTaylor:
711/*
712 The value vlsoT4 is too large and doesn't work sometimes;
713 so we use vlsoT2.
714*/
715 ak->vn = ak->vlso = vlso = ak->vlsoT2;
716 f->dEnergy = dEt4;
717 f->flux = Ft4;
722 break;
723 case PadeT1:
724 case EOB:
725 case EOBNR:
726 case EOBNRv2:
727 case EOBNRv2HM:
728 case IMRPhenomA:
729 case IMRPhenomB:
730 case IMRPhenomD:
731 case IMRPhenomFA:
732 case IMRPhenomFB:
733 case TaylorEt:
734 case TaylorT4:
735 case TaylorN:
736 ak->vn = ak->vlso = vlso = ak->vlsoP4;
737 f->dEnergy = dEp4;
738 f->flux = Fp4;
739 break;
740 case PadeF1:
741 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
743 break;
744 default:
745 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
747 }
748 break;
750 switch (params->approximant)
751 {
752 case Eccentricity:
753 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
755 break;
756 case AmpCorPPN:
757 case TaylorT1:
758 case TaylorT2:
759 case TaylorT3:
760 case TaylorF1:
761 case TaylorF2:
762 case TaylorF2RedSpin:
764 case SpinTaylorT3:
765 case SpinTaylor:
766 case SpinTaylorT4:
767 case PhenSpinTaylorRD:
768 case SpinQuadTaylor:
769/*
770 The value vlsoT4 is too large and doesn't work with 2.5 PN
771 Taylor approximant; so we use vlsoT2.
772*/
773 ak->vn = ak->vlso = vlso = ak->vlsoT2;
774 f->dEnergy = dEt4;
775 f->flux = Ft5;
780 break;
781 case PadeT1:
782 case EOB:
783 case EOBNR:
784 case EOBNRv2:
785 case EOBNRv2HM:
786 case IMRPhenomA:
787 case IMRPhenomB:
788 case IMRPhenomD:
789 case IMRPhenomFA:
790 case IMRPhenomFB:
791 case TaylorEt:
792 case TaylorT4:
793 case TaylorN:
794 ak->vn = ak->vlso = vlso = ak->vlsoP4;
795 f->dEnergy = dEp4;
796 f->flux = Fp5;
797 break;
798 case PadeF1:
799 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
801 break;
802 default:
803 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
805 }
806 break;
808 switch (params->approximant)
809 {
810 case Eccentricity:
811 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
813 break;
814 case AmpCorPPN:
815 case TaylorT1:
816 case TaylorT2:
817 case TaylorT3:
818 case TaylorF1:
819 case TaylorF2:
820 case TaylorF2RedSpin:
822 case SpinTaylorT3:
823 case SpinTaylorT4:
824 case SpinTaylor:
825 case PhenSpinTaylorRD:
826 case SpinQuadTaylor:
827/*
828 vlsoT6 is as yet undetermined and vlsoT4 is too large in
829 certain cases (TaylorT2 crashes for (1.4,10)); using vlsoT2;
830*/
831 ak->vn = ak->vlso = vlso = ak->vlsoT2;
832 f->dEnergy = dEt6;
833 f->flux = Ft6;
838 break;
839 case PadeT1:
840 case EOB:
841 case EOBNR:
842 case EOBNRv2:
843 case EOBNRv2HM:
844 case IMRPhenomA:
845 case IMRPhenomB:
846 case IMRPhenomD:
847 case IMRPhenomFA:
848 case IMRPhenomFB:
849 case TaylorEt:
850 case TaylorT4:
851 case TaylorN:
852 ak->vn = ak->vlso = vlso = ak->vlsoP6;
853 f->dEnergy = dEp6;
854 f->flux = Fp6;
855 break;
856 case PadeF1:
857 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
859 break;
860 default:
861 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
863 }
864 break;
866 switch (params->approximant)
867 {
868 case Eccentricity:
869 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
871 break;
872 case AmpCorPPN:
873 case TaylorT1:
874 case TaylorT2:
875 case TaylorT3:
876 case TaylorF1:
877 case TaylorF2:
878 case TaylorF2RedSpin:
880 case SpinTaylorT3:
881 case SpinTaylor:
882 case SpinTaylorT4:
883 case PhenSpinTaylorRD:
884 case SpinQuadTaylor:
885 ak->vn = ak->vlso = vlso = ak->vlsoT2;
886 f->dEnergy = dEt6;
887 f->flux = Ft7;
892 break;
893 case PadeT1:
894 case EOB:
895 case EOBNR:
896 case EOBNRv2:
897 case EOBNRv2HM:
898 case IMRPhenomA:
899 case IMRPhenomB:
900 case IMRPhenomD:
901 case IMRPhenomFA:
902 case IMRPhenomFB:
903 case TaylorEt:
904 case TaylorT4:
905 case TaylorN:
906 ak->vn = ak->vlso = vlso = ak->vlsoP6;
907 f->dEnergy = dEp6;
908 f->flux = Fp7;
909 break;
910 case PadeF1:
911 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
913 break;
914 default:
915 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
917 break;
918 }
919 break;
921 switch (params->approximant)
922 {
923 case Eccentricity:
924 XLALPrintError("XLAL Error - %s: The PN order requested is not implemented for this approximant\n", __func__);
926 break;
927 case EOBNRv2:
928 case EOBNRv2HM:
929 ak->vn = ak->vlso = vlso = ak->vlsoPP;
930 f->dEnergy = dEp6;
931 f->flux = Fp8PP;
932 break;
933 case EOB:
934 case EOBNR:
935 case IMRPhenomA:
936 case IMRPhenomB:
937 case IMRPhenomD:
938 case IMRPhenomFA:
939 case IMRPhenomFB:
940 ak->vn = ak->vlso = vlso = ak->vlsoP6;
941 f->dEnergy = dEp6;
942 f->flux = Fp7;
943 break;
944 case AmpCorPPN:
945 case TaylorT1:
946 case TaylorT2:
947 case TaylorT3:
948 case TaylorF1:
949 case TaylorF2:
950 case TaylorF2RedSpin:
952 case SpinTaylorT3:
953 case SpinTaylor:
954 case SpinTaylorT4:
955 case PhenSpinTaylorRD:
956 case SpinQuadTaylor:
957 case PadeT1:
958 case PadeF1:
959 case TaylorEt:
960 case TaylorT4:
961 case TaylorN:
962 XLALPrintError("XLAL Error - %s: PN approximant not supported for requested PN order\n", __func__);
964 break;
965 default:
966 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
968 break;
969 }
970 break;
971 default:
972 XLALPrintError("XLAL Error - %s: Unknown PN order in switch\n", __func__);
974 }
975
976 switch (params->approximant)
977 {
978 case AmpCorPPN:
979 case TaylorT1:
980 case TaylorT2:
981 case TaylorT3:
982 case TaylorF1:
983 case EOB:
984 case EOBNR:
985 case PadeT1:
986 case PadeF1:
987 case TaylorF2:
988 case TaylorF2RedSpin:
990 case SpinTaylorT3:
991 case SpinTaylor:
992 case SpinTaylorT4:
993 case PhenSpinTaylorRD:
994 case SpinQuadTaylor:
995 case TaylorEt:
996 case TaylorT4:
997 case TaylorN:
998 ak->flso = vlso * vlso * vlso /(LAL_PI * ak->totalmass);
999
1000 if (ak->fn)
1001 {
1002 vn = cbrt(LAL_PI * ak->totalmass * ak->fn);
1003 ak->vn = (vn < vlso) ? vn : vlso;
1004 }
1005
1006 in1.t=0.0;
1007 in1.v0=ak->v0;
1008 in1.t0=ak->t0;
1009 in1.vlso=ak->vlso;
1010 in1.totalmass = ak->totalmass;
1011 in1.dEnergy = f->dEnergy;
1012 in1.flux = f->flux;
1013 in1.coeffs = ak;
1014
1015 in2 = (void *) &in1;
1016
1017 tofv = XLALInspiralTofV(ak->vn, in2);
1018 if (XLAL_IS_REAL8_FAIL_NAN(tofv))
1020
1021 ak->tn = -tofv - ak->samplinginterval;
1022 params->fCutoff = ak->fn = pow(ak->vn, 3.)/(LAL_PI * ak->totalmass);
1023 /*
1024 for (v=0; v<ak->vn; v+=0.001)
1025 {
1026 FtN = Ft0(v,ak);
1027 printf("%e %e %e %e %e %e %e\n", v,
1028 Ft2(v,ak)/FtN, Ft3(v,ak)/FtN, Ft4(v,ak)/FtN, Ft5(v,ak)/FtN,
1029 Ft6(v,ak)/FtN, Ft7(v,ak)/FtN);
1030 }
1031 exit(0);
1032 */
1033 break;
1034 case BCV:
1035 case BCVSpin:
1036 ak->tn = 100.;
1037 break;
1038 case IMRPhenomA:
1039 case IMRPhenomB:
1040 case IMRPhenomD:
1041 case IMRPhenomFA:
1042 case IMRPhenomFB:
1043 case EOBNRv2:
1044 case EOBNRv2HM:
1045 ak->tn = 5.*ak->totalmass/(256.*ak->eta*pow(ak->v0,8.)) + 1000.*ak->totalmass;
1046 break;
1047 case Eccentricity:
1048 /* The eccentric waveforms contain harmonic, so similarly to amplitude corrected waveforms
1049 * the duration are longer than non eccentric waveform and starts at 2fl/3*/
1050 ak->tn = 5.*ak->totalmass/256./ak->eta/pow(LAL_PI*ak->totalmass*params->fLower/3.*2.,8./3.);
1051 ak->flso = vlso * vlso * vlso /(LAL_PI * ak->totalmass);
1052 break;
1053 default:
1054 XLALPrintError("XLAL Error - %s: Unknown case in PN approximant switch\n", __func__);
1056 }
1057
1058 return 0;
1059}
REAL8 XLALInspiralPhasing2_5PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralFrequency3_3PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_7PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_0PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_3PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralFrequency3_4PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_6PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_4PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_0PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralFrequency3_0PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_2PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_3PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_7PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing2_6PN(REAL8 v, expnCoeffs *ak)
REAL8 XLALInspiralTiming2_5PN(REAL8 f, void *params)
REAL8 XLALInspiralFrequency3_2PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralTiming2_2PN(REAL8 f, void *params)
REAL8 XLALInspiralFrequency3_7PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralFrequency3_6PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralTofV(REAL8, void *)
REAL8 XLALInspiralTiming2_6PN(REAL8 f, void *params)
REAL8 XLALInspiralTiming2_3PN(REAL8 f, void *params)
REAL8 XLALInspiralTiming2_4PN(REAL8 f, void *params)
REAL8 XLALInspiralFrequency3_5PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_4PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralTiming2_7PN(REAL8 f, void *params)
REAL8 XLALInspiralPhasing3_2PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralPhasing3_5PN(REAL8 td, expnCoeffs *ak)
REAL8 XLALInspiralTiming2_0PN(REAL8 f, void *params)
static REAL8 dEp4(REAL8 v, expnCoeffs *ak)
static REAL8 Fp3(REAL8 v, expnCoeffs *ak)
static REAL8 Fp5(REAL8 v, expnCoeffs *ak)
static REAL8 Ft3(REAL8 v, expnCoeffs *ak)
static REAL8 Ft2(REAL8 v, expnCoeffs *ak)
static REAL8 dEp2(REAL8 v, expnCoeffs *ak)
static REAL8 Ft5(REAL8 v, expnCoeffs *ak)
static REAL8 dEt0(REAL8 v, expnCoeffs *ak)
static REAL8 Ft6(REAL8 v, expnCoeffs *ak)
static REAL8 Fp6(REAL8 v, expnCoeffs *ak)
static REAL8 ep6(REAL8 v, expnCoeffs *ak)
static REAL8 Ft7(REAL8 v, expnCoeffs *ak)
void LALInspiralChooseModel(LALStatus *status, expnFunc *f, expnCoeffs *ak, InspiralTemplate *params)
static REAL8 dEp6(REAL8 v, expnCoeffs *ak)
static REAL8 Fp8PP(REAL8 v, expnCoeffs *ak)
int XLALInspiralChooseModel(expnFunc *f, expnCoeffs *ak, InspiralTemplate *params)
static REAL8 Ft4(REAL8 v, expnCoeffs *ak)
static REAL8 Ft0(REAL8 v, expnCoeffs *ak)
static REAL8 dEt6(REAL8 v, expnCoeffs *ak)
static REAL8 dEt2(REAL8 v, expnCoeffs *ak)
static REAL8 Fp7(REAL8 v, expnCoeffs *ak)
static REAL8 ep4(REAL8 v, expnCoeffs *ak)
static REAL8 ep2(REAL8 v, expnCoeffs *ak)
static REAL8 Fp4(REAL8 v, expnCoeffs *ak)
static REAL8 dEt4(REAL8 v, expnCoeffs *ak)
#define ATTATCHSTATUSPTR(statusptr)
#define DETATCHSTATUSPTR(statusptr)
#define INITSTATUS(statusptr)
#define RETURN(statusptr)
#define ABORTXLAL(sp)
#define LAL_PI
double REAL8
int32_t INT4
EOB
PadeT1
IMRPhenomFB
EOBNRv2HM
SpinTaylorT4
TaylorEt
BCVSpin
EOBNRv2
TaylorN
IMRPhenomFA
IMRPhenomD
SpinQuadTaylor
TaylorF2RedSpin
Eccentricity
EOBNR
PadeF1
IMRPhenomA
AmpCorPPN
TaylorF1
TaylorT3
TaylorT4
TaylorF2
IMRPhenomB
PhenSpinTaylorRD
SpinTaylorFrameless
BCV
TaylorT1
SpinTaylor
SpinTaylorT3
TaylorT2
LAL_PNORDER_TWO_POINT_FIVE
LAL_PNORDER_THREE
LAL_PNORDER_TWO
LAL_PNORDER_ONE
LAL_PNORDER_PSEUDO_FOUR
LAL_PNORDER_THREE_POINT_FIVE
LAL_PNORDER_HALF
LAL_PNORDER_ONE_POINT_FIVE
LAL_PNORDER_NEWTONIAN
#define XLAL_ERROR(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_PRINT_DEPRECATION_WARNING(replacement)
#define XLAL_IS_REAL8_FAIL_NAN(val)
XLAL_EFAULT
XLAL_EFUNC
XLAL_EINVAL
list y
x
The inspiral waveform parameter structure containing information about the waveform to be generated.
Definition: LALInspiral.h:205
REAL8 t0
Definition: LALInspiral.h:567
REAL8 v0
Definition: LALInspiral.h:566
REAL8 totalmass
Definition: LALInspiral.h:569
EnergyFunction dEnergy
expnCoeffsdEnergyFlux * coeffs
REAL8 t
Definition: LALInspiral.h:565
FluxFunction flux
REAL8 vlso
Definition: LALInspiral.h:568
This structure contains various post-Newtonian and P-approximant expansion coefficients; the meanings...
Definition: LALInspiral.h:399
REAL8 dETaN
Definition: LALInspiral.h:419
REAL8 fPa7
Definition: LALInspiral.h:434
REAL8 ePa1
Definition: LALInspiral.h:409
REAL8 fPa6
Definition: LALInspiral.h:434
REAL8 totalmass
Definition: LALInspiral.h:474
REAL8 FTa6
Definition: LALInspiral.h:424
REAL8 fPa2
Definition: LALInspiral.h:434
REAL8 FTa4
Definition: LALInspiral.h:424
REAL8 FTaN
Definition: LALInspiral.h:424
REAL8 FTa2
Definition: LALInspiral.h:424
REAL8 vpoleP6
Definition: LALInspiral.h:495
REAL8 fPa4
Definition: LALInspiral.h:434
REAL8 flso
Definition: LALInspiral.h:487
REAL8 vlsoT0
Definition: LALInspiral.h:492
REAL8 dETa2
Definition: LALInspiral.h:419
REAL8 dETa3
Definition: LALInspiral.h:419
REAL8 vpoleP4
Definition: LALInspiral.h:495
REAL8 fPaN
Definition: LALInspiral.h:434
REAL8 vlsoP6
Definition: LALInspiral.h:493
REAL8 fPa3
Definition: LALInspiral.h:434
REAL8 fPa1
Definition: LALInspiral.h:434
REAL8 FTa7
Definition: LALInspiral.h:424
REAL8 samplinginterval
Definition: LALInspiral.h:469
REAL8 fPa5
Definition: LALInspiral.h:434
REAL8 vlsoT2
Definition: LALInspiral.h:492
REAL8 vlsoP4
Definition: LALInspiral.h:493
REAL8 vpolePP
Definition: LALInspiral.h:496
REAL8 FTl8
Definition: LALInspiral.h:424
REAL8 fPa8
Definition: LALInspiral.h:434
REAL8 FTa3
Definition: LALInspiral.h:424
REAL8 FTl6
Definition: LALInspiral.h:424
REAL8 vlsoP0
Definition: LALInspiral.h:493
REAL8 ePa2
Definition: LALInspiral.h:409
REAL8 FTa5
Definition: LALInspiral.h:424
REAL8 vlso
Definition: LALInspiral.h:487
REAL8 ePa3
Definition: LALInspiral.h:409
REAL8 vlsoPP
Definition: LALInspiral.h:494
REAL8 dETa1
Definition: LALInspiral.h:419
Structure to hold the pointers to the generic functions defined above.
Definition: LALInspiral.h:546
InspiralPhasing2 * phasing2
Definition: LALInspiral.h:550
EnergyFunction * dEnergy
Definition: LALInspiral.h:547
InspiralPhasing3 * phasing3
Definition: LALInspiral.h:551
InspiralTiming2 * timing2
Definition: LALInspiral.h:549
FluxFunction * flux
Definition: LALInspiral.h:548
InspiralFrequency3 * frequency3
Definition: LALInspiral.h:552