LALSimulation  5.4.0.1-fe68b98
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 
69 typedef 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 
105 typedef REAL8 (*FluxFunction)(
106  REAL8 v,
108 
109 
110 typedef struct
111 {
116 
117 
118 typedef 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 /*
320 static 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 /*
359 static 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 /*
422 static 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 /*
436 static 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 /*
450 static 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 /*
556 static 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 x
list y
EnergyFunction dEnergy
expnCoeffsdEnergyFlux * coeffs
FluxFunction flux
expnCoeffsdEnergyFlux * coeffs