Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALSimulation 6.2.0.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
LALSimInspiraldEnergyFlux.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 LALSimInspiral_h
24 *
25 * \brief Module containing the energy and flux functions for waveform generation.
26 *
27 * ### Prototypes ###
28 *
29 * <tt>REAL8 SAMPLEFUNCTION()</tt>
30 * <ul>
31 * <li> \c v: PN parameter.<\li>
32 * <li> \c ak: Input containing the PN expnasion coefficients.</li>
33 * </ul>
34 *
35 * ### Description ###
36 *
37 * This module gives the post-Newtonian expansions and/or P-approximants
38 * to the energy, its derivative and gravitational-wave flux functions. More
39 * specifically, the <tt>REAL8</tt> functions below give Taylor expansions
40 * of \f$dE/dv,\f$ and \f${\cal F}(v),\f$ P-approximants of \f$e(v),\f$ \f$dE/dv\f$
41 * (derived from \f$e(v)\f$) and \f${\cal F}(v).\f$
42 *
43 * ### Notes ###
44 *
45 * <ul>
46 * <li> See Damour, Iyer and Sathyaprakash, PRD 57, 885, 1998 for further details.
47 * Damour, Iyer and Sathyaprakash, PRD 63, 044023, 2001 is a resource paper that
48 * summarizes how to generate waveforms in different approximations to the dynamics
49 * of a compact binary under radiation reaction.</li>
50 * <li> The Pade Approximant for the 1PN expansion is undefined as also
51 * EOB at orders less than 2PN. BCV is independent of the PN order.
52 * Spinning waveforms are only defined at the highest PN order.</li>
53 * </ul>
54 *
55 */
56
57#ifndef LALSIMINSPIRALDENERGYFLUC_C
58#define LALSIMINSPIRALDENERGYFLUC_C
59
60#ifdef __GNUC__
61#define UNUSED __attribute__ ((unused))
62#else
63#define UNUSED
64#endif
65
66#include <math.h>
67#include <lal/LALStdlib.h>
68
69typedef struct
70{
71 /* coefficients in the Pade expression of new energy function */
72 REAL8 ePaN, ePa1, ePa2, ePa3;
73 /* coefficients in the Taylor expansion of usual energy function */
74 REAL8 ETaN, ETa1, ETa2, ETa3, ETa5, ETa6;
75 /* coefficients in the Taylor expansion of the derivative of the
76 usual energy function */
77 REAL8 dETaN, dETa1, dETa2, dETa3, dETa5, dETa6;
78
79 /* Taylor expansion coefficients of energy flux*/
80 REAL8 FTaN, FTa1, FTa2, FTa3, FTa4, FTa5, FTa6, FTa7, FTa8, FTl6, FTl8, FTa10, FTa12;
81 /* Coefficients of the corresponding P-approximant */
82 REAL8 fPaN, fPa1, fPa2, fPa3, fPa4, fPa5, fPa6, fPa7, fPa8;
83
84 /* symmetric mass ratio, total mass, component masses */
85 REAL8 eta, totalmass;
86
87 /* initial and final values of frequency, time, velocity; lso
88 values of velocity and frequency; final phase. */
90
91 /* last stable orbit and pole defined by various Taylor and P-approximants */
92 REAL8 vlsoT0, vlsoT2, vlsoT4, vlsoT6;
93 REAL8 vlsoP0, vlsoP2, vlsoP4, vlsoP6;
95 REAL8 vpoleP4, vpoleP6;
98
99
101 REAL8 v,
103
104
106 REAL8 v,
108
109
110typedef struct
111{
116
117
118typedef struct
119{
128} TofVIn;
129
130
132{
133 REAL8 dEnergy;
134 REAL8 x = v*v;
135 dEnergy = ak->ETaN * x;
136 return (dEnergy);
137}
138
140{
141 REAL8 Energy;
142 REAL8 x = v*v;
143 REAL8 x5 = x*x*x*x*x;
144 REAL8 x6 = x*x5;
145 Energy = ak->ETaN * x * (1. + ak->ETa1*x + ak->ETa5*x5 + ak->ETa6*x6);
146 return Energy;
147}
148
150{
151 REAL8 Energy;
152 REAL8 x = v*v;
153 REAL8 x2 = x*x;
154 REAL8 x5 = x*x2*x2;
155 REAL8 x6 = x*x5;
156 Energy = ak->ETaN * x * (1. + ak->ETa1*x + ak->ETa2*x2 + ak->ETa5*x5
157 + ak->ETa6*x6);
158 return Energy;
159}
160
162{
163 REAL8 Energy;
164 REAL8 x = v*v;
165 REAL8 x2 = x*x;
166 REAL8 x3 = x*x2;
167 REAL8 x5 = x3*x2;
168 REAL8 x6 = x*x5;
169 Energy = ak->ETaN * x * (1. + ak->ETa1*x + ak->ETa2*x2 + ak->ETa3*x3
170 + ak->ETa5*x5 + ak->ETa6*x6);
171 return Energy;
172}
173
175{
176 REAL8 dEnergy;
177 dEnergy = ak->dETaN * v;
178 return (dEnergy);
179}
180
181
183{
184 REAL8 dEnergy;
185 REAL8 x = v*v;
186 REAL8 x5 = x*x*x*x*x;
187 REAL8 x6 = x*x5;
188 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa5*x5 + ak->dETa6*x6);
189 return (dEnergy);
190}
191
192
194{
195 REAL8 dEnergy;
196 REAL8 x = v*v;
197 REAL8 x2 = x*x;
198 REAL8 x5 = x*x2*x2;
199 REAL8 x6 = x*x5;
200 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x2 + ak->dETa5*x5
201 + ak->dETa6*x6);
202 return (dEnergy);
203}
204
205
207{
208 REAL8 dEnergy;
209 REAL8 x = v*v;
210 REAL8 x2 = x*x;
211 REAL8 x3 = x*x2;
212 REAL8 x5 = x3*x2;
213 REAL8 x6 = x*x5;
214 dEnergy = ak->dETaN * v * (1. + ak->dETa1*x + ak->dETa2*x2 + ak->dETa3*x3
215 + ak->dETa5*x5 + ak->dETa6*x6);
216 return (dEnergy);
217}
218
219
221{
222 REAL8 flux,v2,v4,v8,v10;
223 v2 = v*v;
224 v4 = v2*v2;
225 v8 = v4*v4;
226 v10 = v8*v2;
227 flux = ak->FTaN * v10;
228 return (flux);
229}
230
231
233{
234 REAL8 flux,v2,v4,v8,v10,v12;
235 v2 = v*v;
236 v4 = v2*v2;
237 v8 = v4*v4;
238 v10 = v8*v2;
239 v12 = v10*v2;
240 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa10*v10 + ak->FTa12*v12);
241 return (flux);
242}
243
244
246{
247 REAL8 flux,v2,v4,v8,v10,v12;
248 v2 = v*v;
249 v4 = v2*v2;
250 v8 = v4*v4;
251 v10 = v8*v2;
252 v12 = v10*v2;
253 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa10*v10
254 + ak->FTa12*v12);
255 return (flux);
256}
257
258
260{
261 REAL8 flux,v2,v4,v8,v10,v12;
262 v2 = v*v;
263 v4 = v2*v2;
264 v8 = v4*v4;
265 v10 = v8*v2;
266 v12 = v10*v2;
267 flux = ak->FTaN * v10 * (1. + ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
268 + ak->FTa10*v10 + ak->FTa12*v12);
269 return (flux);
270}
271
272
274{
275 REAL8 flux,v2,v4,v8,v10,v12;
276 v2 = v*v;
277 v4 = v2*v2;
278 v8 = v4*v4;
279 v10 = v8*v2;
280 v12 = v10*v2;
281 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
282 + ak->FTa5*v4*v + ak->FTa10*v10 + ak->FTa12*v12);
283 return (flux);
284}
285
286
288{
289 REAL8 flux,v2,v4,v6,v8,v10,v12;
290 v2 = v*v;
291 v4 = v2*v2;
292 v6 = v4*v2;
293 v8 = v4*v4;
294 v10 = v8*v2;
295 v12 = v10*v2;
296 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
297 + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6 + ak->FTa10*v10
298 + ak->FTa12*v12);
299 return (flux);
300}
301
302
304{
305 REAL8 flux,v2,v4,v6,v8,v10,v12;
306 v2 = v*v;
307 v4 = v2*v2;
308 v6 = v4*v2;
309 v8 = v4*v4;
310 v10 = v8*v2;
311 v12 = v10*v2;
312 flux = ak->FTaN * v10 * (1.+ ak->FTa2*v2 + ak->FTa3*v2*v + ak->FTa4*v4
313 + ak->FTa5*v4*v + (ak->FTa6 + ak->FTl6*log(v))*v6 + ak->FTa7*v6*v
314 + ak->FTa10*v10 + ak->FTa12*v12);
315 return (flux);
316}
317
318
319/*
320static REAL8 UNUSED XLALSimInspiralep0(REAL8 v, expnCoeffsdEnergyFlux *ak)
321{
322 REAL8 x, energy;
323 ak = NULL;
324 x = v*v;
325 energy = -x;
326 return (energy);
327}
328*/
329
330
332{
333 REAL8 x, energy;
334 x = v*v;
335 energy = -x / (1. + ak->ePa1 * x);
336 return (energy);
337}
338
339
341{
342 REAL8 x, energy;
343 x = v*v;
344 energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x));
345 return (energy);
346}
347
348
350{
351 REAL8 x, energy;
352 x = v*v;
353 energy = -x / (1. + ak->ePa1*x /(1. + ak->ePa2*x /(1. + ak->ePa3*x)));
354 return (energy);
355}
356
357
358/*
359static REAL8 UNUSED XLALSimInspiraldEp0(REAL8 v, expnCoeffsdEnergyFlux *ak)
360{
361 REAL8 energy, denergy, Energy, dEnergy, y;
362 energy = ep0(v, ak);
363 y = sqrt(1.+energy);
364 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
365 denergy = -1;
366 dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
367 return(dEnergy);
368}
369*/
370
371
373{
374 REAL8 energy, denergy, Energy, dEnergy, x, y;
375 x = v*v;
376 energy = XLALSimInspiralep2(v, ak);
377 y = sqrt(1.+energy);
378 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
379 denergy = -1. / ((1. + ak->ePa1*x)*(1. + ak->ePa1*x));
380 dEnergy = v * ak->eta * denergy /((1.+Energy) * y);
381 return(dEnergy);
382}
383
384
386{
387 REAL8 energy, denergy, Energy, dEnergy, denom, x, y;
388 x = v*v;
389 energy = XLALSimInspiralep4(v, ak);
390 y = sqrt(1.+energy);
391 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
392
393 denom = 1. + (ak->ePa1 + ak->ePa2) * x;
394 denom = denom * denom;
395 denergy = (1. + 2.*ak->ePa2*x + ((ak->ePa1 + ak->ePa2) * ak->ePa2 * x*x))/denom;
396 dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
397 return(dEnergy);
398}
399
400
402{
403 REAL8 energy, denergy, Energy, dEnergy, denom, x, y;
404 x = v*v;
405 energy = XLALSimInspiralep6(v, ak);
406 y = sqrt(1.+energy);
407 Energy = sqrt(1. + 2.* ak->eta * (y - 1.)) - 1.;
408
409 denom = 1. + (ak->ePa1 + ak->ePa2 + ak->ePa3) * x + ak->ePa1*ak->ePa3*x*x;
410 denom = denom * denom;
411
412 denergy = (1. + 2.*(ak->ePa2+ak->ePa3)*x + (ak->ePa1*ak->ePa2
413 + ak->ePa2*ak->ePa2 + 2.* ak->ePa2*ak->ePa3
414 + ak->ePa3*ak->ePa3) * x*x)
415 /denom;
416 dEnergy = - v * ak->eta * denergy /((1.+Energy) * y);
417 return(dEnergy);
418}
419
420
421/*
422static REAL8 UNUSED XLALSimInspiralFp0(REAL8 v, expnCoeffsdEnergyFlux *ak)
423{
424 REAL8 flux,v2,v4,v8,v10;
425 v2 = v*v;
426 v4 = v2*v2;
427 v8 = v4*v4;
428 v10 = v8*v2;
429 flux = ak->fPaN * v10;
430 return (flux);
431}
432*/
433
434
435/*
436static REAL8 UNUSED XLALSimInspiralFp1(REAL8 v, expnCoeffsdEnergyFlux *ak)
437{
438 REAL8 flux,v2,v4,v8,v10;
439 v2 = v*v;
440 v4 = v2*v2;
441 v8 = v4*v4;
442 v10 = v8*v2;
443 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v) * (1.-v/ak->vpoleP4));
444 return (flux);
445}
446*/
447
448
449/*
450static REAL8 UNUSED XLALSimInspiralFp2(REAL8 v, expnCoeffsdEnergyFlux *ak)
451{
452 REAL8 flux,v2,v4,v8,v10;
453 v2 = v*v;
454 v4 = v2*v2;
455 v8 = v4*v4;
456 v10 = v8*v2;
457 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v / (1.+ak->fPa2*v)) * (1.-v/ak->vpoleP4));
458 return (flux);
459}
460*/
461
462
464{
465 REAL8 flux,v2,v4,v8,v10;
466 v2 = v*v;
467 v4 = v2*v2;
468 v8 = v4*v4;
469 v10 = v8*v2;
470 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v)))
471 * (1.-v/ak->vpoleP4));
472 return (flux);
473}
474
475
477{
478 REAL8 flux,v2,v4,v8,v10;
479 v2 = v*v;
480 v4 = v2*v2;
481 v8 = v4*v4;
482 v10 = v8*v2;
483 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
484 / (1.+ak->fPa4*v)))) * (1.-v/ak->vpoleP4));
485 return (flux);
486}
487
488
490{
491 REAL8 flux,v2,v4,v8,v10;
492 v2 = v*v;
493 v4 = v2*v2;
494 v8 = v4*v4;
495 v10 = v8*v2;
496 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
497 / (1.+ak->fPa4*v / (1.+ak->fPa5*v))))) * (1.-v/ak->vpoleP4));
498 return (flux);
499}
500
501
503{
504 REAL8 flux,v2,v4,v6,v8,v10;
505 v2 = v*v;
506 v4 = v2*v2;
507 v6 = v4*v2;
508 v8 = v4*v4;
509 v10 = v8*v2;
510 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
511 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v))))))
512 * (1.-v/ak->vpoleP6));
513 /* */
514 flux *= (1.+ log(v/ak->vlsoP4) * ak->FTl6*v6) ;
515 return (flux);
516}
517
518
520{
521 REAL8 flux,v2,v4,v6,v8,v10;
522 v2 = v*v;
523 v4 = v2*v2;
524 v6 = v4*v2;
525 v8 = v4*v4;
526 v10 = v8*v2;
527 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
528 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v)))))))
529 * (1.-v/ak->vpoleP6));
530 flux *= (1.+ log(v/ak->vlsoP4) * ak->FTl6*v6) ;
531 return (flux);
532}
533
534
535/* Flux for the EOBNRv2 model */
537{
538 REAL8 flux,v2,v4,v6,v8,v10, l6, l8;
539 v2 = v*v;
540 v4 = v2*v2;
541 v6 = v4*v2;
542 v8 = v4*v4;
543 v10 = v8*v2;
544 l6 = ak->FTl6;
545 l8 = ak->FTl8 - ak->FTa2*ak->FTl6;
546 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
547 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v
548 / (1.+ak->fPa8*v))))))))
549 * (1.-v/ak->vpolePP));
550 flux *= (1.+ log(v/ak->vlsoPP) * (l6*v6 + l8*v8) ) ;
551 return (flux);
552}
553
554
555/*
556static REAL8 UNUSED XLALSimInspiralFp8(REAL8 v, expnCoeffsdEnergyFlux *ak)
557{
558 REAL8 flux,v2,v4,v6,v8,v10, l6, l8;
559 v2 = v*v;
560 v4 = v2*v2;
561 v6 = v4*v2;
562 v8 = v4*v4;
563 v10 = v8*v2;
564 l6 = ak->FTl6;
565 l8 = ak->FTl8 - ak->FTa2*ak->FTl6;
566 flux = ak->fPaN * v10/ ((1.+ak->fPa1*v/(1.+ak->fPa2*v/ (1.+ak->fPa3*v
567 / (1.+ak->fPa4*v / (1.+ak->fPa5*v / (1.+ak->fPa6*v / (1.+ak->fPa7*v
568 / (1.+ak->fPa8*v))))))))
569 * (1.-v/ak->vpoleP6));
570 flux *= (1.+ log(v/ak->vlsoP4) * (l6*v6 + l8*v8) ) ;
571 return (flux);
572}
573*/
574
575#endif /* LALSIMINSPIRALDENERGYFLUC_C */
static REAL8 UNUSED XLALSimInspiralFt0(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEp4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralEt6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralep4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp7(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEp6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt2(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralEt0(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralep6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralEt4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp8PP(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp3(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEp2(REAL8 v, expnCoeffsdEnergyFlux *ak)
REAL8(* FluxFunction)(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEt4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt4(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEt2(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralEt2(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFp5(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEt0(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt7(REAL8 v, expnCoeffsdEnergyFlux *ak)
REAL8(* EnergyFunction)(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralep2(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiraldEt6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt6(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt5(REAL8 v, expnCoeffsdEnergyFlux *ak)
static REAL8 UNUSED XLALSimInspiralFt3(REAL8 v, expnCoeffsdEnergyFlux *ak)
double REAL8
list y
x
EnergyFunction dEnergy
expnCoeffsdEnergyFlux * coeffs
FluxFunction flux
expnCoeffsdEnergyFlux * coeffs