109#include <lal/Units.h>
110#include <lal/LALInspiral.h>
111#include <lal/FindRoot.h>
112#include <lal/SeqFactories.h>
113#include <lal/NRWaveInject.h>
114#include <lal/TimeSeries.h>
117#define UNUSED __attribute__ ((unused))
122#define ninty4by3etc 18.687902694437592603
124typedef struct tagrOfOmegaIn {
128typedef struct tagPr3In {
129 REAL8 eta, zeta2, omegaS, omega, vr,
r,
q;
256 A = 1. - 2./
r + 2.*eta/r3;
257 z = r3 * A * A/(r3 - 3.*
r2 + 5.*eta);
258 omega = sqrt((1.-3*eta/
r2)/(r3 * (1. + 2*eta*(sqrt(z)-1.))));
259 jadiab = sqrt (
r2 * (
r2 - 3.*eta)/(r3 - 3.*
r2 + 5.*eta));
261 tmpVar = r3 - 3.*
r2 + 5.*eta;
262 djadiabdr = (r3*r3 - 6.*r3*
r2 + 3.*eta*
r2*
r2 +20.*eta*r3-30.*eta*eta*
r)/
263 (tmpVar * tmpVar * 2. * jadiab);
264 H0cap = sqrt(1. + 2.*eta*(-1. + sqrt(z)))/eta;
265 cr = A*A/((1.-6.*eta/
r2) * eta * H0cap * sqrt(z));
267 FDIS = -ak->
flux(v, ak->
coeffs)/(eta * omega);
268 pr = FDIS/(djadiabdr*cr);
282 phase = sqrt(
r2 * (
r2 - 3.*eta) / (r3 - 3.*
r2 + 5.*eta));
299 A = 1. - 2./
r + 2.*eta/r3;
300 z = r3 * A * A/(r3 - 3.*
r2 + 5.*eta);
301 x = sqrt((1.-3*eta/
r2)/(r3 * (1. + 2*eta*(sqrt(z)-1.))));
320 eta = rofomegain->
eta;
321 omega = rofomegain->
omega;
325 A = 1. - 2./
r + 2.*eta/r3;
326 z = r3 * A * A/(r3 - 3.*
r2 + 5.*eta);
327 x = omega - sqrt((1.-3*eta/
r2)/(r3 * (1. + 2*eta*(sqrt(z)-1.))));
344 eta = rofomegain->
eta;
346 x =
r2*
r - 3.*
r2 + 5.* eta;
358 REAL8 r,
p,
q,
r2, r3, p2, q2, A,
B, dA, dB, hcap, Hcap, etahH;
374 A = 1. - 2./
r + 2.*eta/r3;
375 B = (1. - 6.*eta/
r2)/A;
376 dA = 2./
r2 - 6.*eta/(r3*
r);
377 dB = (-dA *
B + 12.*eta/r3)/A;
378 hcap = sqrt(A*(1. + p2/
B + q2/
r2));
379 Hcap = sqrt(1. + 2.*eta*(hcap - 1.)) / eta;
380 etahH = eta*hcap*Hcap;
382 dvalues->
data[0] = A*A*
p/((1. - 6.*eta/
r2) * etahH);
383 dvalues->
data[1] = omega = A *
q / (
r2 * etahH);
387 dvalues->
data[2] = -0.5 * (dA * hcap * hcap/A - p2 * A * dB/(
B*
B)
388 - 2. * A * q2/r3) / etahH;
406 REAL8 phase,
u,
u2,
u3,
a4, a4p4eta, a4peta2, NA, DA, A, dA;
413 a4p4eta =
a4 + 4. * eta;
414 a4peta2 =
a4 + eta * eta;
415 NA = 2.*(4.-eta) + (
a4 - 16. + 8. * eta) *
u;
416 DA = 2.*(4.-eta) + a4p4eta *
u + 2. * a4p4eta *
u2 + 4.*a4peta2 *
u3;
418 dA = ( (
a4 - 16. + 8. * eta) * DA - NA * (a4p4eta + 4. * a4p4eta *
u
419 + 12. * a4peta2 *
u2))/(DA*DA);
421 phase = sqrt(-dA/(2.*
u*A +
u2 * dA));
434 REAL8 onebyD, AbyD, Heff, HReal, etahH;
435 REAL8 omegaS, eta,
a4, a4p4eta, a4peta2, z3,
r, vr,
q;
453 z3 = 2. * (4. - 3. * eta) * eta;
455 a4p4eta =
a4 + 4. * eta;
456 a4peta2 =
a4 + eta * eta;
459 NA = 2.*(4.-eta) + (
a4 - 16. + 8. * eta) *
u;
460 DA = 2.*(4.-eta) + a4p4eta *
u + 2. * a4p4eta *
u2 + 4.*a4peta2 *
u3;
462 onebyD = 1. + 6.*eta*
u2 + 2. * ( 26. - 3. * eta) * eta *
u3;
465 Heff = sqrt(A*(1. + AbyD * p2 +
q*
q *
u2 + z3 * p4 *
u2));
466 HReal = sqrt(1. + 2.*eta*(Heff - 1.)) / eta;
467 etahH = eta*Heff*HReal;
469 pr = -vr + A*(AbyD*
p + 2. * z3 *
u2 * p3)/etahH;
479 REAL8 x,
u,
u2,
u3,
a4, a4p4eta, a4peta2, eta, NA, DA, A, dA;
493 a4p4eta =
a4 + 4. * eta;
494 a4peta2 =
a4 + eta * eta;
495 NA = 2.*(4.-eta) + (
a4 - 16. + 8. * eta) *
u;
496 DA = 2.*(4.-eta) + a4p4eta *
u + 2. * a4p4eta *
u2 + 4.*a4peta2 *
u3;
498 dA = ( (
a4 - 16. + 8. * eta) * DA - NA
499 * (a4p4eta + 4. * a4p4eta *
u + 12. * a4peta2 *
u2))/(DA*DA);
500 x = sqrt ( -
u3 * 0.5 * dA /(1. + 2.*eta * (A/sqrt(A+0.5 *
u*dA)-1.)));
515 omega1 = pr3in->
omega;
517 x = -omega1 + omega2;
528 REAL8 x, eta,
u,
u2,
u3,
a4, a4p4eta,a4peta2, NA, DA, A, dA;
531 eta = rofomegain->
eta;
538 a4p4eta =
a4 + 4. * eta;
539 a4peta2 =
a4 + eta * eta;
540 NA = 2.*(4.-eta) + (
a4 - 16. + 8. * eta) *
u;
541 DA = 2.*(4.-eta) + a4p4eta *
u + 2. * a4p4eta *
u2 + 4.*a4peta2 *
u3;
543 dA = ( (
a4 - 16. + 8. * eta) * DA - NA * (a4p4eta + 4.
544 * a4p4eta *
u + 12. * a4peta2 *
u2))/(DA*DA);
557 REAL8 r,
p,
q,
u,
u2,
u3,
u4, p2, p3, p4, q2, Apot, DA, NA;
558 REAL8 dA, onebyD, DonebyD, AbyD, Heff, HReal, etahH;
559 REAL8 omega, v, eta,
a4, a4p4eta, a4peta2, z2, z30, zeta2;
560 REAL8 n1,
c1, d1, d2, d3, oneby4meta;
561 REAL8 flexNonAdiab = 0;
562 REAL8 flexNonCirc = 0;
582 z30 = 2.L * (4.L - 3.L * eta) * eta;
583 z2 = 0.75L * z30 * zeta2,
586 a4p4eta =
a4 + 4. * eta;
587 a4peta2 =
a4 + eta * eta;
590 oneby4meta = 1./(4.-eta);
591 n1 = 0.5 * (
a4 - 16. + 8.*eta) * oneby4meta;
592 d1 = 0.5 * a4p4eta * oneby4meta;
593 d2 = a4p4eta * oneby4meta;
594 d3 = 2. * a4peta2 * oneby4meta;
596 DA = 1 + d1*
u + d2*
u2 + d3*
u3;
599 onebyD = 1. + 6.*eta*
u2 + (2. * ( 26. - 3. * eta) * eta - z2)*
u3;
600 AbyD = Apot * onebyD;
601 Heff = sqrt(Apot*(1. + AbyD * p2 +
q*
q *
u2 + z30 * (p4 + zeta2*(-0.25*p4
602 + 0.75 * p2 * q2 *
u2 )) *
u2));
603 HReal = sqrt(1. + 2.*eta*(Heff - 1.)) / eta;
605 dA = -
u2/(DA*DA) * (n1*DA - NA * (d1 + 2.*d2*
u + 3.*d3*
u2));
607 DonebyD = -12.*eta*
u3 - (6.*(26. - 3.*eta)*eta - z2)*
u4;
608 etahH = eta*Heff*HReal;
610 dvalues->
data[0] = Apot*(AbyD*
p + z30 *
u2 *(2.* p3
611 + zeta2*(-0.5*p3 + 0.75*
p*q2*
u2)))/etahH;
612 dvalues->
data[1] = omega = Apot *
q *
u2 * (1. + 0.75*z30*zeta2*p2*
u2)/ etahH;
615 dvalues->
data[2] = -0.5 * Apot * (dA*Heff*Heff/(Apot*Apot) - 2.*q2*
u3
616 + (dA * onebyD + Apot * DonebyD) * p2
617 + z30 *
u3 *(-2.* p4+zeta2*(0.5*p4 - 3.0*p2*q2*
u2))) / etahH;
619 c1 = 1.+(
u2 - 2.*
u3*Apot/dA) * q2;
620 dvalues->
data[3] = -(1. - flexNonAdiab*
c1) * (1. + flexNonCirc*p2/(q2*
u2))
629 REAL8 vr, A, dA, d2A, NA, DA, dDA, dNA, d2DA, DA2;
631 REAL8 eta,
a4, a4p4eta, a4peta2, FDIS;
647 a4p4eta =
a4 + 4. * eta;
648 a4peta2 =
a4 + eta * eta;
649 NA = 2.*(4.-eta) + (
a4 - 16. + 8. * eta) *
u;
650 DA = 2.*(4.-eta) + a4p4eta *
u + 2. * a4p4eta *
u2 + 4.*a4peta2 *
u3;
653 dNA = (
a4 - 16. + 8. * eta);
654 dDA = (a4p4eta + 4. * a4p4eta *
u + 12. * a4peta2 *
u2);
655 d2DA = 4. * a4p4eta + 24. * a4peta2 *
u;
657 dA = (dNA * DA - NA * dDA)/ DA2;
658 d2A = (-NA * DA * d2DA - 2. * dNA * DA * dDA + 2. * NA * dDA * dDA)/(DA2*DA);
659 v = cbrt(pr3in->
omega);
660 FDIS = -pr3in->in3copy.
flux(v, pr3in->in3copy.
coeffs)/(eta* pr3in->
omega);
662 x1Bit = 2.*
u * A +
u2 * dA;
663 x1 = -1./
u2 * sqrt (-dA * x1Bit*x1Bit*x1Bit )
664 / (2.*
u * dA * dA + A*dA -
u * A * d2A);
680 REAL8 phase,
u,
u2,
u3,
u4,
a4, a5, eta2, NA, DA, A, dA;
689 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
690 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
691 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
692 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
694 dA = ( (32. - 24.*eta - 4.*
a4 - a5*eta) * DA - NA *
695 ( -(2.*
a4 + a5*eta + 8.*eta) - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)*
u
696 - 3.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u2
697 + 4.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u3))/(DA*DA);
698 phase = sqrt(-dA/(2.*
u*A +
u2 * dA));
710 REAL8 pr,
u,
u2,
u3,
u4, p2, p3, p4, A, DA, NA;
711 REAL8 onebyD, AbyD, Heff, HReal, etahH;
731 z3 = 2. * (4. - 3. * eta) * eta;
735 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
736 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
737 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
738 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
740 onebyD = 1. + 6.*eta*
u2 + 2. * ( 26. - 3. * eta) * eta *
u3 + 36.*eta2*
u4;
743 Heff = sqrt(A*(1. + AbyD * p2 +
q*
q *
u2 + z3 * p4 *
u2));
744 HReal = sqrt(1. + 2.*eta*(Heff - 1.)) / eta;
745 etahH = eta*Heff*HReal;
747 pr = -vr + A*(AbyD*
p + 2. * z3 *
u2 * p3)/etahH;
760 REAL8 x,
u,
u2,
u3,
u4,
a4, a5, eta, eta2, NA, DA, A, dA;
774 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
775 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
776 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
777 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
779 dA = ( (32. - 24.*eta - 4.*
a4 - a5*eta) * DA - NA *
780 ( -(2.*
a4 + a5*eta + 8.*eta) - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)*
u
781 - 3.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u2
782 + 4.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u3))/(DA*DA);
784 x = sqrt ( -
u3 * 0.5 * dA /(1. + 2.*eta * (A/sqrt(A+0.5 *
u*dA)-1.)));
800 omega1 = pr3in->
omega;
802 x = -omega1 + omega2;
815 REAL8 x, eta, eta2,
u,
u2,
u3,
u4,
a4, a5, NA, DA, A, dA;
818 eta = rofomegain->
eta;
828 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
829 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
830 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
831 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
833 dA = ( (32. - 24.*eta - 4.*
a4 - a5*eta) * DA - NA *
834 ( -(2.*
a4 + a5*eta + 8.*eta) - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)*
u
835 - 3.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u2
836 + 4.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u3))/(DA*DA);
850 REAL8 r,
p,
q,
u,
u2,
u3,
u4,
u5, p2, p3, p4, q2, Apot, DA, NA;
851 REAL8 dA, onebyD, DonebyD, AbyD, Heff, HReal, etahH;
852 REAL8 omega, v, eta, eta2,
a4, z2, z30, z3, zeta2;
854 double UNUSED dr, UNUSED ds, UNUSED dp, UNUSED dq;
875 z30 = 2.L * (4.L - 3.L * eta) * eta;
876 z2 = 0.75L * z30 * zeta2,
877 z3 = z30 * (1.L - zeta2);
883 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
884 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
885 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
886 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
889 onebyD = 1. + 6.*eta*
u2 + (2.*eta * ( 26. - 3.*eta ) - z2)*
u3 + 36.*eta2*
u4;
890 AbyD = Apot * onebyD;
891 Heff = sqrt(Apot*(1. + AbyD * p2 +
q*
q *
u2 + z3 * p4 *
u2));
892 HReal = sqrt(1. + 2.*eta*(Heff - 1.)) / eta;
893 dA = -
u2 * ( (32. - 24.*eta - 4.*
a4 - a5*eta) * DA - NA *
894 ( -(2.*
a4 + a5*eta + 8.*eta) - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)*
u
895 - 3.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u2
896 + 4.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u3))/(DA*DA);
898 DonebyD = -12.*eta*
u3 - (6.*eta*(26. - 3.*eta) - z2)*
u4 - 144.*eta2*
u5;
899 etahH = eta*Heff*HReal;
901 dr = dvalues->
data[0] = Apot*(AbyD*
p + z30 *
u2 *(2.* p3
902 + zeta2*(-0.5*p3 + 0.75*
p*q2*
u2)))/etahH;
903 ds = dvalues->
data[1] = omega = Apot *
q *
u2 * (1. + 0.75*z30*zeta2*p2*
u2)/ etahH;
906 dp = dvalues->
data[2] = -0.5 * Apot * (dA*Heff*Heff/(Apot*Apot) - 2.*q2*
u3
907 + (dA * onebyD + Apot * DonebyD) * p2
908 + z30 *
u3 *(-2.* p4+zeta2*(0.5*p4 - 3.0*p2*q2*
u2))) / etahH;
919 REAL8 vr, A, dA, d2A, NA, DA, DA2, dDA, dNA, d2DA;
940 NA = (32. - 24.*eta - 4.*
a4 - a5*eta)*
u + (
a4 - 16. + 8.*eta);
941 DA =
a4 - 16. + 8.*eta - (2.*
a4 + a5*eta + 8.*eta)*
u - (4.*
a4 + 2.*a5*eta + 16.*eta)*
u2
942 - (8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u3
943 + (-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u4;
946 dNA = (32. - 24.*eta - 4.*
a4 - a5*eta);
947 dDA = - (2.*
a4 + a5*eta + 8.*eta) - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)*
u
948 - 3.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u2
949 + 4.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u3;
950 d2DA = - 2.*(4.*
a4 + 2.*a5*eta + 16.*eta)
951 - 6.*(8.*
a4 + 4.*a5*eta + 2.*
a4*eta + 16.*eta2)*
u
952 + 12.*(-
a4*
a4 - 8.*a5*eta - 8.*
a4*eta + 2.*a5*eta2 - 16.*eta2)*
u2;
954 dA = (dNA * DA - NA * dDA)/ DA2;
955 d2A = (-NA * DA * d2DA - 2. * dNA * DA * dDA + 2. * NA * dDA * dDA)/(DA2 * DA);
957 v = cbrt(pr3in->
omega);
958 FDIS = -pr3in->in3copy.
flux(v, pr3in->in3copy.
coeffs)/(eta* pr3in->
omega);
960 x1Bit = 2.*
u * A +
u2 * dA;
961 x1 = -1./
u2 * sqrt (-dA * x1Bit * x1Bit * x1Bit )
962 / (2.*
u * dA * dA + A*dA -
u * A * d2A);
984 if ( !signalvec->
data )
997 if (
params->fLower <= 0. )
1002 if (
params->tSampling <= 0. )
1007 if (
params->totalMass <= 0. )
1055 if ( !signalvec1->
data )
1059 if ( !signalvec2->
data )
1072 if (
params->fLower <= 0. )
1077 if (
params->tSampling <= 0. )
1082 if (
params->totalMass <= 0. )
1150 XLALPrintError(
"Pointer for waveform->a exists. Was expecting NULL.\n" );
1155 XLALPrintError(
"Pointer for waveform->h exists. Was expecting NULL.\n" );
1160 XLALPrintError(
"Pointer for waveform->f exists. Was expecting NULL.\n" );
1163 if ( waveform->
phi )
1165 XLALPrintError(
"Pointer for waveform->phi exists. Was expecting NULL.\n" );
1168 if ( waveform->
shift )
1170 XLALPrintError(
"Pointer for waveform->shift exists. Was expecting NULL.\n" );
1183 if (paramsInit.
nbins==0)
1195 if ( !ff || !
a || !phi )
1205 memset(
a->data, 0, 2 * paramsInit.
nbins *
sizeof(
REAL4));
1239 if (phi->
data[
i] != 0.0)
break;
1255 s = 0.5 * phi->
data[count - 1];
1261 XLALPrintInfo(
"final coalescence phase with respect to actual data =%f\n",
1262 (ff->
data[count]-ff->
data[count-1])/2/3.14159);
1268 XLALPrintWarning(
"The waveform has only %f cycles; we don't keep waveform with less than 2 cycles.\n",
1273 phiC = phi->
data[count-1] ;
1275 for (
i=0;
i<count;
i++)
1297 if ( !waveform->
a->
data )
1312 snprintf( waveform->
a->
name,
1317 if ( !(waveform->
f) )
1334 if ( !(waveform->
phi) )
1356 waveform->
psi = ppnParams->
psi;
1359 ppnParams->
tc = (double)(count-1) /
params->tSampling ;
1360 ppnParams->
length = count;
1375 waveform->
phi = NULL;
1390 if ( !(waveform->
h->
data) )
1395 waveform->
phi = NULL;
1411 snprintf( waveform->
h->
name,
1446 UINT4 count, nn=4, length = 0, hiSRndx=0, ndx=0, higherSR=0;
1451 REAL8 v2, eta,
m, rn,
r, rOld,
s,
p,
q,
dt, t, v, omega, f, ampl0;
1454 REAL8 rpr1=0, rpr2=0, spr1=0, spr2=0, ppr1=0, ppr2=0, qpr1=0, qpr2=0;
1456 void *funcParams1, *funcParams2, *funcParams3;
1458 REAL8Vector *values, *dvalues, *newvalues, *yt, *dym, *dyt;
1471 static const REAL8 xacc = 1.0e-12;
1473 REAL8 (*lightRingRadiusFunc)(
REAL8,
void *) = NULL;
1474 static const REAL8 lightRingMin = 4.;
1475 static const REAL8 lightRingMax = 1.;
1478 static const REAL8 rInitMin = 3.;
1479 static const REAL8 rInitMax = 1000.;
1482 static const REAL8 prInitMin = -10.;
1483 static const REAL8 prInitMax = 5.;
1490 REAL8 sInit, s0 = 0.0;
1499 REAL8 y_1, y_2, z1, z2;
1503 UINT4 resampFac = 8;
1510 ak = paramsInit->
ak;
1511 func = paramsInit->
func;
1516 XLALPrintError(
"Order must be LAL_PNORDER_PSEUDO_FOUR for approximant EOBNR.\n" );
1521 XLALPrintError(
"Order must be LAL_PNORDER_TWO or greater for approximant EOB.\n" );
1526 if (signalvec1) length = signalvec1->
length;
else if (ff) length = ff->
length;
1535 if ( !values || !dvalues || !newvalues || !yt || !dym || !dyt )
1562 ampl0 = 2.0 * sqrt(
LAL_PI / 5.0) *
params->signalAmplitude;
1592 "Beware of aliasing! Consider increasing the sample rate.\n" );
1649 rofomegain.
eta = eta;
1650 rofomegain.
omega = omega;
1652 pr3in.omegaS =
params->OmegaS;
1653 pr3in.zeta2 =
params->Zeta2;
1659 pr3in.
omega = omega;
1664 funcParams3 = (
void *) &in3;
1666 funcParams1 = (
void *) &rofomegain;
1674 funcParams2 = (
void *) &rofomegain;
1680 funcParams2 = (
void *) &pr3in;
1685 funcParams2 = (
void *) &pr3in;
1698 lightRingMax, xacc, funcParams1);
1728 "too small (below 6 no waveform is generated)\n",
r );
1742 r = (
r<rmin) ? rmin :
r;
1744 pr3in.in3copy = in3;
1755 pr3in.
omega = omega;
1763 pr3in.
omega = omega;
1768 funcParams2 = (
void *) &pr3in;
1786 pr3in.
omega = omega;
1791 funcParams2 = (
void *) &pr3in;
1818 values->
data[0] =
r;
1819 values->
data[1] =
s;
1820 values->
data[2] =
p;
1821 values->
data[3] =
q;
1823 sprintf(message,
"In EOB Initial values of r=%10.5e p=%10.5e q=%10.5e\n",
r,
p,
q);
1841 if ( !sig1 || !sig2 || !ampl || !freq || !phse )
1881 if (
a || signalvec2)
1884 count =
params->nStartPad;
1887 in4.
function(values, dvalues, funcParams3);
1888 omega = dvalues->
data[1];
1894 omegamatch = -0.01 + 0.133 + 0.183 *
params->eta + 0.161 *
params->eta *
params->eta;
1896 while (
r > rn &&
r < rOld)
1912 XLALPrintError(
"Waveform evolution has run off the end of the vector" );
1918 fCurrent = omega / (
LAL_PI*
m);
1919 if (!writeToWaveform)
1922 if (
r > rmin || fCurrent > f || fabs(fCurrent - f) < 1.0e-5)
1924 writeToWaveform = 1;
1931 if (writeToWaveform)
1989 r = values->
data[0] = newvalues->
data[0];
1990 s = values->
data[1] = newvalues->
data[1];
1991 p = values->
data[2] = newvalues->
data[2];
1992 q = values->
data[3] = newvalues->
data[3];
1995 in4.
function(values, dvalues, funcParams3);
1996 omega = dvalues->
data[1];
2003 if (
params->approximant ==
EOBNR && (r < rn || omega > omegamatch ) && !higherSR)
2019 dt /= (double) resampFac;
2023 r = values->
data[0] = rpr2;
2024 s = values->
data[1] = spr2;
2025 p = values->
data[2] = ppr2;
2026 q = values->
data[3] = qpr2;
2034 in4.
function(values, dvalues, funcParams3);
2035 omega = dvalues->
data[1];
2039 if (writeToWaveform)
2042 t = (++count-
params->nStartPad) *
dt;
2057 if (signalvec1 && !signalvec2)
params->tC = t;
2089 params->tSampling *= resampFac;
2094 if ( count - hiSRndx < 7 )
2096 XLALPrintError(
" We do not have enough points at a higher SR.\n" );
2114 params->tSampling = tmpSamplingRate;
2116 for(j=hiSRndx; j<length; j+=resampFac)
2121 if (sig1->
data[count] == 0)
2173 y_1 = creal(MultSphHarmP) + creal(MultSphHarmM);
2174 y_2 = cimag(MultSphHarmM) - cimag(MultSphHarmP);
2175 z1 = - cimag(MultSphHarmM) - cimag(MultSphHarmP);
2176 z2 = creal(MultSphHarmM) - creal(MultSphHarmP);
2179 sprintf(message,
"MultSphHarm2,+2 re=%10.5e im=%10.5e\n", MultSphHarmP.re, MultSphHarmP.im);
2181 sprintf(message,
"MultSphHarm2,-2 re=%10.5e im=%10.5e\n", MultSphHarmP.re, MultSphHarmM.im);
2188 freq->
data[
i] /= unitHz;
2191 sig1->
data[
i] = (x1 * y_1) + (x2 * y_2);
2192 sig2->
data[
i] = (x1 * z1) + (x2 * z2);
2214 for(
i = 0;
i < length;
i++)
2222 if (signalvec1) memcpy(signalvec1->
data , sig1->
data, length * (
sizeof(
REAL4)));
2223 if (signalvec2) memcpy(signalvec2->
data , sig2->
data, length * (
sizeof(
REAL4)));
2224 if (ff) memcpy(ff->
data , freq->
data, length * (
sizeof(
REAL4)));
2225 if (
a) memcpy(
a->data , ampl->
data, 2*length*(
sizeof(
REAL4)));
2226 if (phi) memcpy(phi->
data , phse->
data, length * (
sizeof(
REAL8)));
2229 sprintf(message,
"fFinal=%10.5e count=%d\n",
params->fFinal, *countback);
REAL8 XLALInspiralPhasing1(REAL8 v, void *params)
void XLALRungeKutta4Free(rk4GSLIntegrator *integrator)
INT4 XLALInspiralAttachRingdownWave(REAL4Vector *Omega, REAL4Vector *signalvec1, REAL4Vector *signalvec2, InspiralTemplate *params)
int XLALInspiralSetup(expnCoeffs *ak, InspiralTemplate *params)
int XLALInspiralInit(InspiralTemplate *params, InspiralInit *paramsInit)
REAL8 XLALInspiralVelocity(TofVIn *params)
INT4 XLALGenerateQNMFreq(COMPLEX8Vector *modefreqs, InspiralTemplate *params, UINT4 l, UINT4 m, UINT4 nmodes)
int XLALInspiralChooseModel(expnFunc *func, expnCoeffs *ak, InspiralTemplate *params)
rk4GSLIntegrator * XLALRungeKutta4Init(INT4 n, rk4In *input)
int XLALRungeKutta4(REAL8Vector *yout, rk4GSLIntegrator *integrator, void *params)
void XLALDestroyREAL4VectorSequence(REAL4VectorSequence *vecseq)
REAL4VectorSequence * XLALCreateREAL4VectorSequence(UINT4 length, UINT4 veclen)
REAL8 XLALDBisectionFindRoot(REAL8(*y)(REAL8, void *), REAL8 xmin, REAL8 xmax, REAL8 xacc, void *params)
#define GENERATEPPNINSPIRALH_EFSTOP
Reached requested termination frequency.
int LALInfo(LALStatus *status, const char *info)
LAL_PNORDER_TWO_POINT_FIVE
LAL_PNORDER_THREE_POINT_FIVE
INT4 XLALSphHarm(COMPLEX16 *out, UINT4 L, INT4 M, REAL4 theta, REAL4 phi)
REAL4TimeSeries * XLALCreateREAL4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
void XLALDestroyREAL4TimeSeries(REAL4TimeSeries *series)
REAL8TimeSeries * XLALCreateREAL8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
const LALUnit lalStrainUnit
const LALUnit lalHertzUnit
const LALUnit lalDimensionlessUnit
REAL4Vector * XLALCreateREAL4Vector(UINT4 length)
void XLALDestroyREAL4Vector(REAL4Vector *vector)
COMPLEX8Vector * XLALCreateCOMPLEX8Vector(UINT4 length)
REAL8Vector * XLALCreateREAL8Vector(UINT4 length)
void XLALDestroyREAL8Vector(REAL8Vector *vector)
void XLALDestroyCOMPLEX8Vector(COMPLEX8Vector *vector)
int int int XLALPrintInfo(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int int XLALPrintWarning(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_IS_REAL8_FAIL_NAN(val)
REAL4TimeVectorSeries * a
REAL4TimeVectorSeries * h
Structure used as an input to compute the derivatives needed in solving the phasing formula when the ...
Structures used to compute the phase of the signal from the ‘beginning’, when the veolcity parameter ...
The inspiral waveform parameter structure containing information about the waveform to be generated.
This structure stores the parameters for constructing a restricted post-Newtonian waveform.
const CHAR * termDescription
The termination code description (above)
INT4 termCode
The termination condition (above) that stopped computation of the waveform.
REAL4 dfdt
The maximum value of encountered over any timestep used in generating the waveform.
REAL4 phi
The phase at coalescence (or arbitrary reference phase for a post -Newtonian approximation),...
REAL4 psi
polarization angle (radians)
REAL4 fStart
The actual starting frequency of the waveform, in Hz (normally close but not identical to fStartIn)
SkyPosition position
location of source on sky
UINT4 length
The length of the generated waveform.
REAL4 fStop
The frequency at the termination of the waveform, in Hz.
REAL8 tc
The time from the start of the waveform to coalescence (in the point-mass approximation),...
REAL4 fStartIn
The requested starting frequency of the waveform, in Hz.
REAL8 deltaT
The requested sampling interval of the waveform, in s.
REAL4VectorSequence * data
expnCoeffsdEnergyFlux * coeffs
This structure contains various post-Newtonian and P-approximant expansion coefficients; the meanings...
Structure to hold the pointers to the generic functions defined above.
Structure containing steps and controls for the GSL Runge-Kutta solver.
Structure used as an input to Runge-Kutta solver.