98#include <lal/LALAdaptiveRungeKuttaIntegrator.h>
100#include <lal/Units.h>
101#include <lal/LALInspiral.h>
102#include <lal/SeqFactories.h>
103#include <lal/NRWaveInject.h>
104#include <lal/RealFFT.h>
107#define LALPSIRDPN_TEST_ENERGY 1025
108#define LALPSIRDPN_TEST_OMEGADOT 1026
109#define LALPSIRDPN_TEST_OMEGANAN 1028
110#define LALPSIRDPN_TEST_OMEGAMATCH 1029
111#define LALPSIRDPN_TEST_OMEGANONPOS 1031
112#define LALPSIRDPN_TEST_OMEGACUT 1032
114#define sqrtOnePointFive 1.22474
115#define sqrtPoint15 0.387298
116#define sqrtFiveOver2 1.1183
119#define UNUSED(expr) do { (void)(expr); } while (0)
123 const REAL8 omM = 0.0555;
124 const REAL8 omMsz12 = 9.97e-4;
125 const REAL8 omMs1d2 = -2.032e-3;
126 const REAL8 omMssq = 5.629e-3;
127 const REAL8 omMsz1d2 = 8.646e-3;
128 const REAL8 omMszsq = -5.909e-3;
129 const REAL8 omM3s1d2 = 1.801e-3;
130 const REAL8 omM3ssq = -1.4059e-2;
131 const REAL8 omM3sz1d2 = 1.5483e-2;
132 const REAL8 omM3szsq = 8.922e-3;
135 omMsz12 * (LNhS1 + LNhS2) +
137 omMssq * (S1S1 + S2S2) +
138 omMsz1d2 * (LNhS1 * LNhS2) +
139 omMszsq * (LNhS1 * LNhS1 + LNhS2 * LNhS2) +
140 omM3s1d2 * (LNhS1 + LNhS2) * (S1S2) +
141 omM3ssq * (LNhS1 + LNhS2) * (S1S1+S2S2) +
142 omM3sz1d2 * (LNhS1 + LNhS2) * (LNhS1*LNhS2) +
143 omM3szsq * (LNhS1 + LNhS2) * (LNhS1*LNhS1+LNhS2*LNhS2);
148 const double frac0 = 0.840;
149 const double fracsz12 = -2.145e-2;
150 const double fracs1d2 = -4.421e-2;
151 const double fracssq = -2.643e-2;
152 const double fracsz1d2 = -5.876e-2;
153 const double fracszsq = -2.215e-2;
156 fracsz12 * (LNhS1 + LNhS2) +
158 fracssq * (S1S1 + S2S2) +
159 fracsz1d2 * (LNhS1 * LNhS2) +
160 fracszsq * (LNhS1 * LNhS1 + LNhS2 * LNhS2);
163typedef struct LALPSpinInspiralRDstructparams {
210typedef struct LALPSpinInspiralPhenParsStruct {
232typedef struct LALSpinInspiralAngleStruct {
264 mparams->
m =
params->totalMass;
282#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
292#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
300 mparams->
wdotspin25S1LNh = -31319. / 1008. + 1159. / 24. * mparams->
eta + (-809. / 84. + 281. / 8. * mparams->
eta) * mparams->
m2m1;
301 mparams->
wdotspin25S2LNh = -31319. / 1008. + 1159. / 24. * mparams->
eta + (-809. / 84. + 281. / 8. * mparams->
eta) * mparams->
m1m2;
302 mparams->
S1dot25 = 0.5625 + 1.25 * mparams->
eta - mparams->
eta * mparams->
eta / 24. + mparams->
dm * (-0.5625 + 0.625 * mparams->
eta);
303 mparams->
S2dot25 = 0.5625 + 1.25 * mparams->
eta - mparams->
eta * mparams->
eta / 24. - mparams->
dm * (-0.5625 + 0.625 * mparams->
eta);
304#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
321#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
332 mparams->
S1dot15 = (4.0 + 3.0 * mparams->
m2m1) / 2.0 * mparams->
eta;
333 mparams->
S2dot15 = (4.0 + 3.0 * mparams->
m1m2) / 2.0 * mparams->
eta;
334#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
341#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
347#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
357 XLALPrintError(
"*** LALPhenSpinInspiralRD ERROR: PhenSpin approximant not available at pseudo4PN order\n");
361 XLALPrintError(
"*** LALPhenSpinInspiralRD ERROR: NUM_ORDER not a valid PN order\n");
365 XLALPrintError(
"*** LALPhenSpinInspiralRD ERROR: Impossible to create waveform with %d order\n",
params->order);
369 switch (
params->interaction) {
380#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
389#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
403#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
415#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
424#if __GNUC__ >= 7 && !defined __INTEL_COMPILER
462 denergy = dvalues[11];
464 REAL8 LNhS1=(values[2]*values[5]+values[3]*values[6]+values[4]*values[7])/
params->m1msq;
465 REAL8 LNhS2=(values[2]*values[8]+values[3]*values[9]+values[4]*values[10])/
params->m2msq;
466 REAL8 S1sq=(values[5]*values[5]+values[6]*values[6]+values[7]*values[7])/
params->m1msq/
params->m1msq;
467 REAL8 S2sq=(values[8]*values[8]+values[9]*values[9]+values[10]*values[10])/
params->m2msq/
params->m2msq;
468 REAL8 S1S2=(values[5]*values[8]+values[6]*values[9]+values[7]*values[10])/
params->m1msq/
params->m2msq;
477 else if (omega < 0.0) {
478 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: Omega has become -ve, this should lead to nan's \n");
481 else if (dvalues[1] < 0.0) {
485 else if (isnan(omega)) {
489 else if ((
params->inspiralOnly==1)&&(omega>
params->OmCutoff)) {
492 else if ((
params->inspiralOnly!=1)&&(omega>omegaMatch)) {
496 returnint= GSL_SUCCESS;
508 REAL8 LNhx, LNhy, LNhz;
513 REAL8 dLNhx, dLNhy, dLNhz;
514 REAL8 dS1x, dS1y, dS1z;
515 REAL8 dS2x, dS2y, dS2z;
516 REAL8 energy,energyold;
519 REAL8 S1S2, S1S1, S2S2;
521 REAL8 v, v2, v3, v4, v5, v6, v7;
522 REAL8 tmpx, tmpy, tmpz, cross1x, cross1y, cross1z, cross2x, cross2y, cross2z, LNhxy;
543 energyold = values[11];
555 domega =
params->wdotorb[0]
561 + v * (
params->wdotorb[6] +
params->wdotorblog * log(omega)
562 + v *
params->wdotorb[7]))))));
564 energy = (1. + v2 * (
params->epnorb[1] +
566 v2 *
params->epnorb[3])));
570 LNhS1 = (LNhx * S1x + LNhy * S1y + LNhz * S1z);
571 LNhS2 = (LNhx * S2x + LNhy * S2y + LNhz * S2z);
574 domega += v3 * (
params->wdotspin15S1LNh * LNhS1 +
params->wdotspin15S2LNh * LNhS2);
576 energy += v3 * (
params->epnspin15S1dotLNh * LNhS1 +
params->epnspin15S2dotLNh * LNhS2);
579 S1S1 = (S1x * S1x + S1y * S1y + S1z * S1z);
580 S2S2 = (S2x * S2x + S2y * S2y + S2z * S2z);
581 S1S2 = (S1x * S2x + S1y * S2y + S1z * S2z);
582 domega +=
params->wdotspin20S1S2 * v4 * (247.0 * S1S2 - 721.0 * LNhS1 * LNhS2);
583 domega +=
params->wdotspin20S1S1 * v4 * (719. * (LNhS1 * LNhS1 + LNhS2 * LNhS2) - 233. * (S1S1 + S2S2));
585 energy += v4 * (
params->epnspin20S1S2 * S1S2 +
params->epnspin20S1S2dotLNh * LNhS1 * LNhS2);
586 energy += v4 * (
params->epnspin20S1S1 * S1S1 +
params->epnspin20S2S2 * S2S2 +
params->epnspin20S1S1dotLNh * LNhS1 * LNhS1 +
params->epnspin20S2S2 * LNhS2 * LNhS2);
589 domega += v5 * (
params->wdotspin25S1LNh * LNhS1 +
params->wdotspin25S2LNh * LNhS2);
590 energy += v5 * (
params->epnspin25S1dotLNh * LNhS1 +
params->epnspin25S2dotLNh * LNhS2);
592 domega += v6 * (
params->wdotspin30S1LNh * LNhS1 +
params->wdotspin30S2LNh * LNhS2);
595 domega *= 96. / 5. *
params->eta * v5 * omega* omega;
597 energy *=
params->epnorb[0] * v2;
603 cross1x = (LNhy * S1z - LNhz * S1y);
604 cross1y = (LNhz * S1x - LNhx * S1z);
605 cross1z = (LNhx * S1y - LNhy * S1x);
607 dS1x =
params->S1dot15 * v5 * cross1x;
608 dS1y =
params->S1dot15 * v5 * cross1y;
609 dS1z =
params->S1dot15 * v5 * cross1z;
613 tmpx = S1z * S2y - S1y * S2z;
614 tmpy = S1x * S2z - S1z * S2x;
615 tmpz = S1y * S2x - S1x * S2y;
618 dS1x +=
params->Sdot20 * v6 * (tmpx - 3. * LNhS2 * cross1x);
619 dS1y +=
params->Sdot20 * v6 * (tmpy - 3. * LNhS2 * cross1y);
620 dS1z +=
params->Sdot20 * v6 * (tmpz - 3. * LNhS2 * cross1z);
622 dS1x -= 3. *
params->Sdot20S * v6 * LNhS1 * cross1x * (1. +
params->m2m1) *
params->m2m;
623 dS1y -= 3. *
params->Sdot20S * v6 * LNhS1 * cross1y * (1. +
params->m2m1) *
params->m2m;
624 dS1z -= 3. *
params->Sdot20S * v6 * LNhS1 * cross1z * (1. +
params->m2m1) *
params->m2m;
628 dS1x +=
params->S1dot25 * v7 * cross1x;
629 dS1y +=
params->S1dot25 * v7 * cross1y;
630 dS1z +=
params->S1dot25 * v7 * cross1z;
633 cross2x = (LNhy * S2z - LNhz * S2y);
634 cross2y = (LNhz * S2x - LNhx * S2z);
635 cross2z = (LNhx * S2y - LNhy * S2x);
637 dS2x =
params->S2dot15 * v5 * cross2x;
638 dS2y =
params->S2dot15 * v5 * cross2y;
639 dS2z =
params->S2dot15 * v5 * cross2z;
642 dS2x +=
params->Sdot20 * v6 * (-tmpx - 3.0 * LNhS1 * cross2x);
643 dS2y +=
params->Sdot20 * v6 * (-tmpy - 3.0 * LNhS1 * cross2y);
644 dS2z +=
params->Sdot20 * v6 * (-tmpz - 3.0 * LNhS1 * cross2z);
646 dS2x -= 3. *
params->Sdot20S * v6 * LNhS2 * cross2x * (1. +
params->m1m2) *
params->m1m;
647 dS2y -= 3. *
params->Sdot20S * v6 * LNhS2 * cross2y * (1. +
params->m1m2) *
params->m1m;
648 dS2z -= 3. *
params->Sdot20S * v6 * LNhS2 * cross2z * (1. +
params->m1m2) *
params->m1m;
651 dS2x +=
params->S2dot25 * v7 * cross2x;
652 dS2y +=
params->S2dot25 * v7 * cross2y;
653 dS2z +=
params->S2dot25 * v7 * cross2z;
655 dLNhx = -(dS1x + dS2x) * v /
params->eta;
656 dLNhy = -(dS1y + dS2y) * v /
params->eta;
657 dLNhz = -(dS1z + dS2z) * v /
params->eta;
660 LNhxy = LNhx * LNhx + LNhy * LNhy;
663 alphadotcosi = LNhz * (LNhx * dLNhy - LNhy * dLNhx) / LNhxy;
672 dvalues[0] = omega - alphadotcosi;
732 memset(
s->data, 0,
s->length *
sizeof(
REAL8));
740 for (
i=0;
i<
s->length;
i++) {
828 if (paramsInit.
nbins == 0) {
832 nbins = paramsInit.
nbins;
840 memset(f->
data, 0, nbins *
sizeof(
REAL8));
841 memset(h->
data, 0, 2 * nbins *
sizeof(
REAL8));
842 memset(phi->
data, 0, nbins *
sizeof(
REAL8));
851 if (phi->
data[
i] != 0.0)
903 waveform->
psi = ppnParams->
psi;
911 ppnParams->
length = count;
934 REAL4FFTPlan *forwPlan = NULL;
953 if (paramsInit.
nbins == 0) {
956 nbins = paramsInit.
nbins;
957 if (nbins < length) nbins = length;
961 memset(signalvec->
data, 0, length *
sizeof(
REAL4));
962 memset(tsignalvec->
data, 0, nbins *
sizeof(
REAL8));
963 memset(fsignalvec->
data, 0, nbins *
sizeof(
REAL4));
971 for (idx=0;idx<nbins;idx++) tsigR4->
data[idx]=(
REAL4) tsignalvec->
data[idx];
976 if (forwPlan == NULL) {
986 for (idx = 0; idx < nbins; idx++) fsignalvec->
data[idx] /=
params->tSampling;
988 if (nbins > length) {
998 for (idx=0; idx< length/2; idx++) freq->
data[idx]=((
REAL4) idx) *dF;
1000 for (idx = 0; idx < nbins/2; idx++) {
1003 freqSup->
data[idx]=((
REAL8) idx) *dFsup;
1006 gsl_interp_accel* acc;
1007 gsl_spline* spline_real;
1008 gsl_spline* spline_imag;
1009 XLAL_CALLGSL( spline_imag = (gsl_spline*) gsl_spline_alloc(gsl_interp_cspline, nbins/2));
1010 XLAL_CALLGSL( spline_real = (gsl_spline*) gsl_spline_alloc(gsl_interp_cspline, nbins/2));
1011 XLAL_CALLGSL( acc = (gsl_interp_accel*) gsl_interp_accel_alloc());
1015 for (idx=0;idx<length/2;idx++){
1016 signalvec->
data[idx] = gsl_spline_eval ( spline_real , freq->
data[idx] , acc);
1017 signalvec->
data[length-idx] = gsl_spline_eval ( spline_imag , freq->
data[idx] , acc);
1019 signalvec->
data[0] = 0.;
1020 signalvec->
data[length / 2] = 0.;
1026 gsl_spline_free(spline_real);
1027 gsl_spline_free(spline_imag);
1028 gsl_interp_accel_free(acc);
1032 for (idx=0; idx<length; idx++)
1033 signalvec->
data[idx]=fsignalvec->
data[idx];
1064 REAL8 omega = v*v*v;
1065 const REAL8 omegaC = 0.05;
1066 const REAL8 Afac = .5;
1067 REAL8 damp = omega > omegaC ? 1. : exp(-Afac*(1.-omegaC/omega)*(1.-omegaC/omega));
1069 h2P2->
data[2 * j] = amp * ( ( 1. - damp * v2 / 42. * (107. - 55. * eta) )*
1071 v * dm / 3. * an->
si *
1074 h2M2->
data[2 * j] = amp * ( ( 1. - damp * v2 / 42. * (107. - 55. * eta) )*
1076 v * dm / 3. * an->
si *
1079 h2P2->
data[2 * j + 1] = amp * ( (1. - damp * v2 / 42. * (107. - 55. * eta) )*
1081 v * dm / 3. * an->
si *
1084 h2M2->
data[2 * j + 1] = amp * ( (1. - damp * v2 / 42. * (107. - 55. * eta) )*
1086 v * dm / 3. * an->
si *
1089 h2P1->
data[2 * j] = amp * (an->
si * (1. - damp * v2 / 42. * (107. - 55. * eta) ) *
1093 cos(Psi -
alpha) * an->
s2i2 * (1. + 2. * an->
ci) ) );
1095 h2M1->
data[2 * j] = amp * (an->
si * (1. - damp * v2 / 42. * (107. - 55. * eta)) *
1099 cos(Psi -
alpha) * an->
s2i2 * (1. + 2. * an->
ci) ) );
1101 h2P1->
data[2 * j + 1] = amp * (an->
si * (1. - damp * v2 / 42. * (107. - 55. * eta) ) *
1105 sin(Psi -
alpha) * an->
s2i2 * (1. + 2. * an->
ci) ) );
1107 h2M1->
data[2 * j + 1] = amp * (an->
si * (1. - damp * v2 / 42. * (107. - 55. * eta)) *
1110 (sin(Psi +
alpha) * (an->
ci + an->
cdi) / 2. -
1111 sin(Psi -
alpha) * an->
s2i2 * (1. + 2. * an->
ci) ) );
1113 h20->
data[2 * j] = amp20 * ( an->
s2i * (1.- damp * v2/42. * (107. - 55.*eta) ) * cos(2. * Psi) );
1115 h20->
data[2 * j + 1] = amp20 * ( v * dm / 3. * an->
sdi * sin(Psi) );
1144 h3P3->
data[2 * j] = amp * ( v * dm *
1145 (-9. * cos(3. * (Psi -
alpha)) * an->
s6i2 -
1148 9. * cos(3. * (Psi +
alpha)) * an->
c6i2) +
1149 v2 * 4. * an->
si * (1. - 3. * eta) *
1150 (-cos(2. * Psi - 3. *
alpha) * an->
s4i2 +
1151 cos(2. * Psi + 3. *
alpha) * an->
c4i2 ) );
1153 h3M3->
data[2 * j] = amp * (-v * dm *
1154 (-9. * cos(3. * (Psi -
alpha)) * an->
s6i2 -
1157 9. * cos(3. * (Psi +
alpha)) * an->
c6i2) +
1158 v2 * 4. * an->
si * (1. - 3. * eta) *
1159 (-cos(2. * Psi - 3. *
alpha) * an->
s4i2 +
1160 cos(2. * Psi + 3. *
alpha) * an->
c4i2 ) );
1162 h3P3->
data[2 * j + 1] = amp * ( v * dm *
1163 (-9. * sin(3. * (Psi -
alpha)) * an->
s6i2 -
1166 9. * sin(3. * (Psi +
alpha)) * an->
c6i2) +
1167 v2 * 4. * an->
si * (1. - 3. * eta) *
1169 -sin(2. * Psi + 3. *
alpha) * an->
c4i2 ) );
1171 h3M3->
data[2 * j + 1] = amp * ( v * dm *
1172 (-9. * sin(3. * (Psi -
alpha)) * an->
s6i2 -
1175 9. * sin(3. * (Psi +
alpha)) * an->
c6i2) -
1176 v2 * 4. * an->
si * (1. - 3. * eta) *
1177 ( - sin(2. * Psi - 3. *
alpha) * an->
s4i2
1178 - sin(2. * Psi + 3. *
alpha) * an->
c4i2 ) );
1180 h3P2->
data[2 * j] = amp32 * ( v * dm / 3. *
1181 ( 27. * cos(3. * Psi - 2. *
alpha) * an->
si*an->
s4i2 +
1182 27. * cos(3. * Psi + 2. *
alpha) * an->
si*an->
c4i2 +
1186 ( - 8.*an->
c4i2*(3.*an->
ci-2.)*cos(2.*(Psi+
alpha)) +
1187 8.*an->
s4i2*(3.*an->
ci+2.)*cos(2.*(Psi-
alpha)) ) );
1189 h3M2->
data[2 * j] = amp32 * ( v * dm / 3. *
1190 ( 27. * cos(3. * Psi - 2. *
alpha) * an->
si*an->
s4i2 +
1191 27. * cos(3. * Psi + 2. *
alpha) * an->
si*an->
c4i2 +
1195 ( 8.*an->
c4i2*(3.*an->
ci-2.)*cos(2.*(Psi+
alpha)) -
1196 8.*an->
s4i2*(3.*an->
ci+2.)*cos(2.*(Psi-
alpha)) ) );
1198 h3P2->
data[2 * j + 1 ] = amp32 * ( v * dm / 3. *
1199 ( 27. * sin(3. * Psi - 2. *
alpha) * an->
si*an->
s4i2 -
1200 27. * cos(3. * Psi + 2. *
alpha) * an->
si*an->
c4i2 -
1204 ( 8.*an->
c4i2*(3.*an->
ci-2.)*sin(2.*(Psi+
alpha)) +
1205 8.*an->
s4i2*(3.*an->
ci+2.)*sin(2.*(Psi-
alpha)) ) );
1207 h3M2->
data[2 * j + 1 ] = amp32 * ( -v * dm / 3. *
1208 ( 27. * sin(3. * Psi - 2. *
alpha) * an->
si*an->
s4i2 -
1209 27. * cos(3. * Psi + 2. *
alpha) * an->
si*an->
c4i2 -
1213 ( 8.*an->
c4i2*(3.*an->
ci-2.)*sin(2.*(Psi+
alpha)) +
1214 8.*an->
s4i2*(3.*an->
ci+2.)*sin(2.*(Psi-
alpha)) ) );
1216 h3P1->
data[2 * j] = amp31 * ( v * dm / 6. *
1225 h3M1->
data[2 * j] = amp31 * (-v * dm / 6. *
1234 h3P1->
data[2 * j + 1] = amp31 * ( v * dm / 6. *
1243 h3M1->
data[2 * j + 1] = amp31 * ( v * dm / 6. *
1252 h30->
data[2 * j] = 0.;
1254 h30->
data[2 * j + 1] = amp30 * ( v * dm *
1255 ( cos(Psi) * an->
si*(cos(2.*Psi)*(45.*an->
s2i)-(25.*an->
cdi-21.) ) )
1257 (80. * an->
s2i*an->
c2i*sin(2.*Psi) ) );
1286 REAL8 amp43 = - amp44 * sqrt(2.);
1287 REAL8 amp42 = amp44 * sqrt(7.)/2.;
1288 REAL8 amp41 = amp44 * sqrt(3.5)/4.;
1289 REAL8 amp40 = amp44 * sqrt(17.5)/16.;
1291 h4P4->
data[2 * j] = amp44 * (1. - 3.*eta) *
1295 h4M4->
data[2 * j] = amp44 * (1. - 3.*eta) *
1299 h4P4->
data[2 * j + 1] = amp44 * (1. - 3.*eta) *
1303 h4M4->
data[2 * j + 1] = - amp44 * (1. - 3.*eta) *
1307 h4P3->
data[2 * j] = amp43 * (1. - 3.*eta) * an->
si *
1311 h4M3->
data[2 * j] = - amp43 * (1. - 3.*eta) * an->
si *
1315 h4P3->
data[2 * j + 1] = amp43 * (1. - 3.*eta) * an->
si *
1319 h4M3->
data[2 * j + 1] = amp43 * (1. - 3.*eta) * an->
si *
1323 h4P2->
data[2 * j] = amp42 * (1. - 3.*eta) *
1327 h4M2->
data[2 * j] = amp42 * (1. - 3.*eta) *
1331 h4P2->
data[2 * j + 1] = amp42 * (1. - 3.*eta) *
1335 h4M2->
data[2 * j + 1] = -amp42 * (1. - 3.*eta) *
1339 h4P1->
data[2 * j] = amp41 * (1. - 3.*eta) *
1344 h4M1->
data[2 * j] = -amp41 * (1. - 3.*eta) *
1349 h4P1->
data[2 * j + 1] = amp41 * (1. - 3.*eta) *
1354 h4M1->
data[2 * j + 1] = amp41 * (1. - 3.*eta) *
1359 h40->
data[2 * j] = amp40 * (1.-3.*eta) * an->
s2i * (8.*an->
s2i*cos(4.*Psi) +
1360 cos(2.*Psi)*(an->
cdi+5./7.) );
1361 h40->
data[2 * j +1] = 0.;
1368 const REAL8 yinit[],
1409 REAL8 LNhx,LNhy,LNhz;
1414 REAL8 energywrite = 0.;
1421 REAL8 dLNhx,dLNhy,dLNhz;
1431 REAL8 Phiwrite = 0.;
1432 REAL8 alphawrite = 0.;
1433 REAL8 omegawrite = 0.;
1435 REAL8 amp22,amp33,amp44;
1438 UINT4 subsampling=1;
1446 REAL8Vector dummy, values, dvalues, newvalues, yt, dym, dyt;
1464 newvalues.
data = &dummy.
data[2 * neqs];
1477 for (j=0;j<neqs;j++) values.
data[j]=yinit[j];
1479 omega = values.
data[1];
1481 Phi = values.
data[0];
1485 trigAngle.
ci = LNhz = values.
data[4];
1493 while ( (
OmMatch(LNhS1,LNhS1,S1S1,S1S2,S2S2) * 16. / unitHz) > (
REAL4) (subsampling) /
dt ) {
1500 in4.
dydx = &dvalues;
1520 tm = timewrite = 0.;
1524 omega = values.
data[1];
1526 Phi = values.
data[0];
1540 if (count%subsampling==0) {
1544 if (write >= mparams->
length) {
1550 amp22 = amp22ini * v2;
1551 amp33 = -amp22 / 4. * sqrt(5. / 42.);
1552 amp44 = amp22 * v2 * 2.*sqrt(5./7.)/9.;
1557 energywrite = energy;
1564 trigAngle.
ci = LNhz;
1565 trigAngle.
cdi = 2. * trigAngle.
ci * trigAngle.
ci - 1.;
1566 trigAngle.
c2i = trigAngle.
ci * trigAngle.
ci;
1567 trigAngle.
s2i = 1. - trigAngle.
ci * trigAngle.
ci;
1568 trigAngle.
si = sqrt(trigAngle.
s2i);
1569 trigAngle.
sdi = 2. * trigAngle.
ci * trigAngle.
si;
1570 trigAngle.
c2i2 = (1. + trigAngle.
ci) / 2.;
1571 trigAngle.
s2i2 = (1. - trigAngle.
ci) / 2.;
1572 trigAngle.
ci2 = sqrt(trigAngle.
c2i2);
1573 trigAngle.
si2 = sqrt(trigAngle.
s2i2);
1585 XLALSpinInspiralFillH2Modes(h2P2,h2M2,h2P1,h2M1,h20,write,amp22,v,mparams->
eta,dm,Phiwrite,alphawrite,&trigAngle);
1587 XLALSpinInspiralFillH3Modes(h3P3,h3M3,h3P2,h3M2,h3P1,h3M1,h30,write,amp33,v,mparams->
eta,dm,Phiwrite,alphawrite,&trigAngle);
1589 XLALSpinInspiralFillH4Modes(h4P4,h4M4,h4P3,h4M3,h4P2,h4M2,h4P1,h4M1,h40,write,amp44,v,mparams->
eta,dm,Phiwrite,alphawrite,&trigAngle);
1591 freq->
data[write]=omega;
1592 phase->
data[write]=Phi;
1596 timewrite+=mparams->
dt;
1600 in4.
x = tm / mparams->
m;
1606 Phi = values.
data[0] = newvalues.
data[0];
1607 omega = values.
data[1] = newvalues.
data[1];
1609 LNhx = values.
data[2] = newvalues.
data[2];
1610 LNhy = values.
data[3] = newvalues.
data[3];
1611 LNhz = values.
data[4] = newvalues.
data[4];
1613 S1x = values.
data[5] = newvalues.
data[5];
1614 S1y = values.
data[6] = newvalues.
data[6];
1615 S1z = values.
data[7] = newvalues.
data[7];
1617 S2x = values.
data[8] = newvalues.
data[8];
1618 S2y = values.
data[9] = newvalues.
data[9];
1619 S2z = values.
data[10] = newvalues.
data[10];
1621 energy = values.
data[11] = newvalues.
data[11];
1624 LNhxy = sqrt(LNhx * LNhx + LNhy * LNhy);
1626 alpha = atan2(LNhy, LNhx);
1641 LNhS1 = (S1x * LNhx + S1y * LNhy + S1z * LNhz) / mparams->m1msq;
1642 LNhS2 = (S2x * LNhx + S2y * LNhy + S2z * LNhz) / mparams->m2msq;
1643 S1S1 = (S1x * S1x + S1y * S1y + S1z * S1z)/mparams->m1msq/mparams->m1msq;
1644 S2S2 = (S2x * S2x + S2y * S2y + S2z * S2z)/mparams->m2msq/mparams->m2msq;
1645 S1S2 = (S1x * S2x + S1y * S2y + S1z * S2z)/mparams->m1msq/mparams->m2msq;
1649 dLNhx = dvalues.
data[2];
1650 dLNhy = dvalues.
data[3];
1651 dLNhz = dvalues.
data[4];
1653 diota->
data[Npoints-1] = -dLNhz / LNhxy;
1654 dalpha->
data[Npoints-1] = (LNhx * dLNhy - LNhy * dLNhx) / LNhxy;
1656 diota->
data[Npoints-1] = 0.;
1657 dalpha->
data[Npoints-1] = 0.;
1663 for (j=0;j<Npoints-1;j++) {
1664 domega->
data[j] = domega->
data[j+1];
1666 dalpha->
data[j] = dalpha->
data[j+1];
1668 domega->
data[Npoints-1] = dvalues.
data[1];
1677 }
while (intreturn==GSL_SUCCESS);
1682 if (count<Npoints) {
1683 XLALPrintError(
"*** LALPSpinInspiralRD WARNING: inspiral integration vey short: %12.f sec\n",tm);
1692 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: error generating derivatives\n");
1699 phenPars->
endtime = timewrite-mparams->
dt;
1701 phenPars->
Psi = Phiwrite;
1702 phenPars->
alpha = alphawrite;
1703 phenPars->
energy = energywrite;
1704 phenPars->
omega = omegawrite;
1705 phenPars->
domega = domega->
data[Npoints-1-modcount]/Mass;
1706 phenPars->
ddomega = ddomega->
data[Npoints-1-modcount]/Mass;
1707 phenPars->
diota = diota->
data[Npoints-1-modcount];
1708 phenPars->
ddiota = ddiota->
data[Npoints-1-modcount];
1709 phenPars->
dalpha = dalpha->
data[Npoints-1-modcount] ;
1710 phenPars->
ddalpha = ddalpha->
data[Npoints-1-modcount];
1711 phenPars->
ci = trigAngle.
ci;
1713 phenPars->
LNhS1 = LNhS1w;
1714 phenPars->
LNhS2 = LNhS2w;
1715 phenPars->
S1S2 = S1S2w;
1716 phenPars->
S1S1 = S1S1w;
1717 phenPars->
S2S2 = S2S2w;
1731 const REAL8 yinit[],
1804 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: Cannot allocate adaptive integrator.\n");
1819 for (j=0; j<neqs; j++) yin[j]=yinit[j];
1821 REAL8 S1x0=yinit[5];
1822 REAL8 S1y0=yinit[6];
1823 REAL8 S1z0=yinit[7];
1824 REAL8 S2x0=yinit[8];
1825 REAL8 S2y0=yinit[9];
1826 REAL8 S2z0=yinit[10];
1840 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: integration failed with errorcode %d, integration length %d\n",intreturn,intlen);
1846 if ( intlen >= mparams->
length ) {
1847 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: no space to write in waveforms: %d vs. %d\n",intlen,mparams->
length);
1852 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: incorrect integration with length %d\n",intlen);
1876 LNhS1=(LNhx[j]*S1x[j]+LNhy[j]*S1y[j]+LNhz[j]*S1z[j])/mparams->
m1msq;
1877 LNhS2=(LNhx[j]*S2x[j]+LNhy[j]*S2y[j]+LNhz[j]*S2z[j])/mparams->
m2msq;
1878 S1S1=(S1x[j]*S1x[j]+S1y[j]*S1y[j]+S1z[j]*S1z[j])/mparams->
m1msq/mparams->
m1msq;
1879 S1S2=(S1x[j]*S2x[j]+S1y[j]*S2y[j]+S1z[j]*S2z[j])/mparams->
m1msq/mparams->
m2msq;
1880 S2S2=(S2x[j]*S2x[j]+S2y[j]*S2y[j]+S2z[j]*S2z[j])/mparams->
m2msq/mparams->
m2msq;
1881 omegaMatch=
OmMatch(LNhS1,LNhS2,S1S1,S1S2,S2S2);
1882 if (omegaMatch>omega[j]) {
1883 if (omega[j-1]<omega[j]) jMatch=j;
1888 }
while ((j>0)&&(jMatch==0));
1890 if (omegaMatch<omega[jMatch]) {
1891 XLALPrintError(
"*** LALPSpinInspiralRD ERROR ***: Impossible to attach phenom. part\n");
1897 if (Npoints > intlen) Npoints = intlen;
1899 if ( (omega[jMatch+1]>omega[jMatch]) && ((jMatch+1)<intlen) )
1924 for (k=0;k<Npoints;k++) {
1926 omega_s->
data[k] = omega[j];
1927 LNhx_s->
data[k] = LNhx[j];
1928 LNhy_s->
data[k] = LNhy[j];
1929 LNhz_s->
data[k] = LNhz[j];
1937 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: error generating first derivatives: #points %d\n",Npoints);
1941 XLALPrintError(
" omM %12.5f om[%d] %12.5f\n",omegaMatch,jMatch,*omega);
1945 for (k=0;k<Npoints;k++) {
1946 LNhxy = sqrt(LNhx_s->
data[k] * LNhx_s->
data[k] + LNhy_s->
data[k] * LNhy_s->
data[k]);
1948 diota->
data[k] = -dLNhz->
data[k] / LNhxy;
1949 dalpha->
data[k] = (LNhx_s->
data[k] * dLNhy->
data[k] - LNhy_s->
data[k] * dLNhx->
data[k]) / LNhxy;
1951 diota->
data[k] = 0.;
1952 dalpha->
data[k] = 0.;
1960 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: error generating second derivatives\n");
1964 XLALPrintError(
" omM %12.5f om[%d] %12.5f\n",omegaMatch,jMatch,*omega);
1968 if (ddomega->
data[kMatch]<0.) {
1969 XLALPrintWarning(
"*** LALPSpinInspiralRD WARNING: the attach of the phenom. phase has been shifted back: m1 %12.6f m2 %12.6f\n",mparams->
m1m*mparams->
m,mparams->
m2m*mparams->
m);
1970 XLALPrintWarning(
" Integration returned %d\n 1025: Energy increases\n 1026: Omegadot -ve\n 1028: Omega NAN\n 1029: Omega > Omegamatch\n 1031: Omega -ve\n 1032: Omega > OmegaCut %12.6e\n",intreturn,mparams->
OmCutoff);
1971 while ((kMatch>0)&&(ddomega->
data[kMatch]<0.)) {
1978 phenPars->
energy = energy[jMatch];
1979 phenPars->
omega = omega_s->
data[kMatch];
1987 phenPars->
Psi = Phi[jMatch];
1989 phenPars->
ci = LNhz[jMatch];
1990 phenPars->
LNhS1 = LNhS1;
1991 phenPars->
LNhS2 = LNhS2;
1992 phenPars->
S1S2 = S1S2;
1993 phenPars->
S1S1 = S1S1;
1994 phenPars->
S2S2 = S2S2;
2015 phenPars->
omega = 0.;
2018 phenPars->
diota = 0.;
2026 phenPars->
LNhS1 = 0.;
2027 phenPars->
LNhS2 = 0.;
2028 phenPars->
S1S2 = 0.;
2029 phenPars->
S1S1 = 0.;
2030 phenPars->
S2S2 = 0.;
2037 if ((LNhy[0]*LNhy[0]+LNhx[0]*LNhx[0])>0.)
2038 alpha=atan2(LNhy[0],LNhx[0]);
2040 if ((S1x[0]*S1x[0]+S1y[0]*S1y[0]+S2x[0]*S2x[0]+S2y[0]*S2y[0])>0.) {
2041 c1=0.75+mparams->
eta/2-0.75*mparams->
dm;
2042 c2=0.75+mparams->
eta/2+0.75*mparams->
dm;
2049 for (j=0;j<=jMatch;j++) {
2051 freq->
data[j]=omega[j];
2061 amp22 = amp22ini * v2;
2062 amp33 = -amp22 / 4. * sqrt(5./42.);
2063 amp44 = amp22 * sqrt(5./7.) * 2./9.* v2;
2065 Psi = phase->
data[j] = Phi[j];
2067 trigAngle.
ci = (LNhz[j]);
2068 trigAngle.
cdi = 2. * trigAngle.
ci * trigAngle.
ci - 1.;
2069 trigAngle.
c2i = trigAngle.
ci * trigAngle.
ci;
2070 trigAngle.
s2i = 1. - trigAngle.
ci * trigAngle.
ci;
2071 trigAngle.
si = sqrt(trigAngle.
s2i);
2072 trigAngle.
sdi = 2. * trigAngle.
ci * trigAngle.
si;
2073 trigAngle.
c2i2 = (1. + trigAngle.
ci) / 2.;
2074 trigAngle.
s2i2 = (1. - trigAngle.
ci) / 2.;
2075 trigAngle.
ci2 = sqrt(trigAngle.
c2i2);
2076 trigAngle.
si2 = sqrt(trigAngle.
s2i2);
2090 if ((LNhy[j]*LNhy[j]+LNhx[j]*LNhx[j])>0.) {
2091 alpha = atan2(LNhy[j], LNhx[j]);
2093 else alpha = alphaold;
2095 errcode =
XLALSpinInspiralFillH2Modes(h2P2,h2M2,h2P1,h2M1,h20,j,amp22,v,mparams->
eta,mparams->
dm,Psi,
alpha,&trigAngle);
2108 errcode +=
XLALSpinInspiralFillH3Modes(h3P3,h3M3,h3P2,h3M2,h3P1,h3M1,h30,j,amp33,v,mparams->
eta,mparams->
dm,Psi,
alpha,&trigAngle);
2110 errcode +=
XLALSpinInspiralFillH4Modes(h4P4,h4M4,h4P3,h4M3,h4P2,h4M2,h4P1,h4M1,h40,j,amp44,v,mparams->
eta,mparams->
dm,Psi,
alpha,&trigAngle);
2137 const INT4 neqs = 11+1;
2138 UINT4 origcount,apcount;
2149 REAL8 initomega,initphi;
2151 REAL8 LNhmag,initJmag;
2152 REAL8 initS1[3],initS2[3],initLNh[3],initJ[3];
2153 REAL8 iS1[3],iS2[3];
2155 REAL8 ry[3][3],rz[3][3];
2194 REAL8 amp22ini,amp22,amp33,amp44;
2201 REAL8 dalpha0,dalpha1;
2204 REAL8 S1S1,S1S2,S2S2;
2209 REAL8 x0, x1, x2, x3;
2212 const UINT4 nmodes=2;
2217 REAL8 finalMass,finalSpin;
2220 REAL8 frOmRD,omegaRD;
2226 if ((
params->fCutoff<=0.)&&(
params->inspiralOnly==1)) {
2227 XLALPrintError(
"*** LALPSIRD ERROR ***: fCutoff %12.6e, with inspiral flag on it is mandatory to specify a positive cutoff frequency\n",
params->fCutoff);
2234 if ((signalvec2)||(hh))
2244 initphi =
params->startPhase/2.;
2245 initomega =
params->fLower*unitHz;
2255 omegaMatch =
OmMatch(LNhS1,LNhS2,S1S1,S1S2,S2S2);
2257 if ( initomega > omegaMatch ) {
2264 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: Initial frequency too high: %11.5e for omM ~ %11.5e and m:(%8.3f, %8.3f)\n",
params->fLower,omegaMatch/unitHz,
params->mass1,
params->mass2);
2299 for (
i = 0;
i < 3;
i++) {
2304 switch (
params->axisChoice) {
2319 initJ[j] = iS1[j] + iS2[j];
2320 initS1[j] = initS2[j]=0.;
2324 initJmag = sqrt(initJ[0] * initJ[0] + initJ[1] * initJ[1] + initJ[2] * initJ[2]);
2326 phiJ = atan2(initJ[1], initJ[0]);
2329 thetaJ = acos(initJ[2]/initJmag);
2330 rz[0][0] = -cos(phiJ);
2331 rz[0][1] = -sin(phiJ);
2333 rz[1][0] = sin(phiJ);
2334 rz[1][1] = -cos(phiJ);
2339 ry[0][0] = cos(thetaJ);
2341 ry[0][2] = sin(thetaJ);
2345 ry[2][0] = -sin(thetaJ);
2347 ry[2][2] = cos(thetaJ);
2348 for (j = 0; j < 3; j++) {
2349 for (k = 0; k < 3; k++) {
2350 initLNh[j] += ry[j][k] * rz[k][2];
2351 for (
l = 0;
l < 3;
l++) {
2352 initS1[j] += ry[j][k] * rz[k][
l] * iS1[
l];
2353 initS2[j] += ry[j][k] * rz[k][
l] * iS2[
l];
2374 for (j = 0; j < 3; j++) {
2380 length = signalvec1->
length;
2418 if (!h2P2 || !h2M2 || !h2P1 || !h2M1 || !h20 || !sigp || !sigc || !fap || !phap || !hap || !h3P3 || !h3M3 || !h3P2 || !h3M2 || !h3P1 || !h3M1 || !h30 || !h4P4 || !h4M4 || !h4P3 || !h4M3 || !h4P2 || !h4M2 || !h4P1 || !h4M1 || !h40 ) {
2508 amp22ini = 2. * sqrt(
LAL_PI / 5.0) *
params->signalAmplitude;
2512 yinit[1] = initomega;
2513 yinit[2] = initLNh[0];
2514 yinit[3] = initLNh[1];
2515 yinit[4] = initLNh[2];
2517 yinit[5] = initS1[0];
2518 yinit[6] = initS1[1];
2519 yinit[7] = initS1[2];
2521 yinit[8] = initS2[0];
2522 yinit[9] = initS2[1];
2523 yinit[10]= initS2[2];
2529 phenPars.
omega = 0.;
2532 phenPars.
diota = 0.;
2539 phenPars.
alpha = 0.;
2541 phenPars.
LNhS1 = 0.;
2542 phenPars.
LNhS2 = 0.;
2547 if (
params->fixedStep == 1) {
2548 if (
XLALSpinInspiralEngine(neqs,yinit,amp22ini,&mparams,h2P2,h2M2,h2P1,h2M1,h20,h3P3,h3M3,h3P2,h3M2,h3P1,h3M1,h30,h4P4,h4M4,h4P3,h4M3,h4P2,h4M2,h4P1,h4M1,h40,fap,phap,&phenPars) ==
XLAL_FAILURE) {
2578 if (
XLALSpinInspiralAdaptiveEngine(neqs,yinit,amp22ini,&mparams,h2P2,h2M2,h2P1,h2M1,h20,h3P3,h3M3,h3P2,h3M2,h3P1,h3M1,h30,h4P4,h4M4,h4P3,h4M3,h4P2,h4M2,h4P1,h4M1,h40,fap,phap,&phenPars) ==
XLAL_FAILURE) {
2615 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: integration terminated with code %d.\n",intreturn);
2616 XLALPrintWarning(
" 1025: Energy increases\n 1026: Omegadot -ve\n 1028: Omega NAN\n 1029: Omega > Omegamatch\n 1031: Omega -ve\n 1032: Omega > OmegaCut %12.6e\n",mparams.
OmCutoff);
2629 om1 = phenPars.
domega * tAs * (1. -
t0 / tAs) * (1. -
t0 / tAs);
2630 om0 = phenPars.
omega - om1 / (1. -
t0 / tAs);
2631 om = phenPars.
omega;
2636 dalpha1 = phenPars.
ddalpha * tAs * (1. -
t0 / tAs) * (1. -
t0 / tAs);
2637 dalpha0 = phenPars.
dalpha - dalpha1 / (1. -
t0 / tAs);
2641 if ((tAs <
t0) || (om1 < 0.)) {
2642 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: Could not attach phen part for:\n");
2676 trigAngle.
ci = phenPars.
ci;
2677 trigAngle.
cdi = 2. * trigAngle.
ci * trigAngle.
ci - 1.;
2678 trigAngle.
c2i = trigAngle.
ci * trigAngle.
ci;
2679 trigAngle.
s2i = 1. - trigAngle.
ci * trigAngle.
ci;
2680 trigAngle.
si = sqrt(trigAngle.
s2i);
2681 trigAngle.
sdi = 2. * trigAngle.
ci * trigAngle.
si;
2682 trigAngle.
c2i2 = (1. + trigAngle.
ci) / 2.;
2683 trigAngle.
s2i2 = (1. - trigAngle.
ci) / 2.;
2684 trigAngle.
ci2 = sqrt(trigAngle.
c2i2);
2685 trigAngle.
si2 = sqrt(trigAngle.
s2i2);
2698 Psi0 = Psi + tAs * (om1/mass -dalpha1*trigAngle.
ci) * log(1. -
t0 / tAs);
2699 alpha0 = phenPars.
alpha + tAs * dalpha1 * log(1. -
t0 / tAs);
2701 energy = phenPars.
energy;
2708 XLALPrintError(
"**** LALPhenSpinInspiralRD ERROR ****: impossible to generate RingDown frequency\n");
2710 XLALPrintError(
" S1 (%8.4f %8.4f %8.4f)\n", initS1[0],initS1[1], initS1[2]);
2711 XLALPrintError(
" S2 (%8.4f %8.4f %8.4f)\n", initS2[0],initS2[1], initS2[2]);
2742 omegaRD = crealf(modefreqs->
data[0]) * unitHz /
LAL_PI / 2.;
2747 amp22 = amp22ini*v2;
2752 if (count >= length) {
2753 XLALPrintError(
"**** LALPhenSpinInspiralRD ERROR ****: phen. part exceeds array length");
2755 XLALPrintError(
" S1 (%8.4f %8.4f %8.4f)\n", initS1[0],initS1[1], initS1[2]);
2756 XLALPrintError(
" S2 (%8.4f %8.4f %8.4f)\n", initS2[0],initS2[1], initS2[2]);
2790 om = om1 / (1. - tim / tAs) + om0;
2791 fap->
data[count] = om;
2792 Psi = Psi0 + (- tAs * (om1/mass-dalpha1*trigAngle.
ci) * log(1. - tim / tAs) + (om0/mass-dalpha0*trigAngle.
ci) * (tim -
t0) );
2794 alpha = alpha0 + ( dalpha0 * (tim -
t0) - dalpha1 * tAs * log(1. - tim / tAs) );
2798 amp22 *= v2 / v2old;
2800 amp33 = -amp22 / 4. * sqrt(5. / 42.);
2801 amp44 = amp22 * sqrt(5./7.) * 2./9. * v2;
2803 errcode=
XLALSpinInspiralFillH2Modes(h2P2,h2M2,h2P1,h2M1,h20,count,amp22,v,mparams.
eta,mparams.
dm,Psi,
alpha,&trigAngle);
2805 errcode +=
XLALSpinInspiralFillH3Modes(h3P3,h3M3,h3P2,h3M2,h3P1,h3M1,h30,count,amp33,v,mparams.
eta,mparams.
dm,Psi,
alpha,&trigAngle);
2807 errcode +=
XLALSpinInspiralFillH4Modes(h4P4,h4M4,h4P3,h4M3,h4P2,h4M2,h4P1,h4M1,h40,count,amp44,v,mparams.
eta,mparams.
dm,Psi,
alpha,&trigAngle);
2812 fap->
data[count] = om;
2813 phap->
data[count] = Psi;
2815 }
while ( (om < frOmRD) && (tim < tAs) );
2827 apcount = origcount;
2829 for (
i = 2 * apcount;
i < 2 * length;
i++) h2P2->
data[
i] = 0.;
2830 if (apcount > count) count = apcount;
2832 apcount = origcount;
2834 for (
i = 2 * apcount;
i < 2 * length;
i++) h2M2->
data[
i] = 0.;
2835 if (apcount > count) count = apcount;
2837 apcount = origcount;
2839 for (
i = 2 * apcount;
i < 2 * length;
i++) h2P1->
data[
i] = 0.;
2840 if (apcount > count) count = apcount;
2842 apcount = origcount;
2844 for (
i = 2 * apcount;
i < 2 * length;
i++) h2M1->
data[
i] = 0.;
2845 if (apcount > count) count = apcount;
2847 apcount = origcount;
2849 for (
i = 2 * apcount;
i < 2 * length;
i++) h20->
data[
i] = 0.;
2850 if (apcount > count) count = apcount;
2852 apcount = origcount;
2854 for (
i = 2 * apcount;
i < 2 * length;
i++) h3P3->
data[
i] = 0.;
2855 if (apcount > count) count = apcount;
2857 apcount = origcount;
2859 for (
i = 2 * apcount;
i < 2 * length;
i++) h3M3->
data[
i] = 0.;
2860 if (apcount > count) count = apcount;
2862 apcount = origcount;
2864 for (
i = 2 * apcount;
i < 2 * length;
i++) h3P2->
data[
i] = 0.;
2865 if (apcount > count) count = apcount;
2867 apcount = origcount;
2869 for (
i = 2 * apcount;
i < 2 * length;
i++) h3P2->
data[
i] = 0.;
2870 if (apcount > count) count = apcount;
2872 apcount = origcount;
2874 for (
i = 2 * apcount;
i < 2 * length;
i++) h3P1->
data[
i] = 0.;
2875 if (apcount > count) count = apcount;
2877 apcount = origcount;
2879 for (
i = 2 * apcount;
i < 2 * length;
i++) h3M1->
data[
i] = 0.;
2880 if (apcount > count) count = apcount;
2882 apcount = origcount;
2884 for (
i = 2 * apcount;
i < 2 * length;
i++) h30->
data[
i] = 0.;
2885 if (apcount > count) count = apcount;
2887 apcount = origcount;
2889 for (
i = 2 * apcount;
i < 2 * length;
i++) h4P4->
data[
i] = 0.;
2890 if (apcount > count) count = apcount;
2892 apcount = origcount;
2894 for (
i = 2 * apcount;
i < 2 * length;
i++) h4M4->
data[
i] = 0.;
2895 if (apcount > count) count = apcount;
2897 apcount = origcount;
2899 for (
i = 2 * apcount;
i < 2 * length;
i++) h4P3->
data[
i] = 0.;
2900 if (apcount > count) count = apcount;
2902 apcount = origcount;
2904 for (
i = 2 * apcount;
i < 2 * length;
i++) h4M3->
data[
i] = 0.;
2905 if (apcount > count) count = apcount;
2907 apcount = origcount;
2909 for (
i = 2 * apcount;
i < 2 * length;
i++) h4P4->
data[
i] = 0.;
2910 if (apcount > count) count = apcount;
2912 apcount = origcount;
2914 for (
i = 2 * apcount;
i < 2 * length;
i++) h4M4->
data[
i] = 0.;
2915 if (apcount > count) count = apcount;
2917 apcount = origcount;
2919 for (
i = 2 * apcount;
i < 2 * length;
i++) h4P3->
data[
i] = 0.;
2920 if (apcount > count) count = apcount;
2922 apcount = origcount;
2924 for (
i = 2 * apcount;
i < 2 * length;
i++) h4M3->
data[
i] = 0.;
2925 if (apcount > count) count = apcount;
2927 apcount = origcount;
2929 for (
i = 2 * apcount;
i < 2 * length;
i++) h40->
data[
i] = 0.;
2930 if (apcount > count) count = apcount;
2933 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: impossible to create RingDownWave\n");
2971 for (
i = 0;
i < length;
i++) {
2972 fap->
data[
i] /= unitHz;
2977 errcode =
XLALSphHarm(&MultSphHarmP, 2, 2, inc, 0.);
2978 errcode +=
XLALSphHarm(&MultSphHarmM, 2, -2, inc, 0.);
3004 XLALPrintError(
"**** LALPSpinInspiralRD ERROR ****: impossible to create Y22 or Y2-2\n");
3007 for (
i = 0;
i < length;
i++) {
3008 x0 = h2P2->
data[2 *
i];
3009 x1 = h2P2->
data[2 *
i + 1];
3010 x2 = h2M2->
data[2 *
i];
3011 x3 = h2M2->
data[2 *
i + 1];
3012 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3013 sigc->
data[
i] += - x0 * cimag(MultSphHarmP) - x1 * creal(MultSphHarmP) - x2 * cimag(MultSphHarmM) - x3 * creal(MultSphHarmM);
3016 errcode =
XLALSphHarm(&MultSphHarmP, 2, 1, inc, 0.);
3017 errcode +=
XLALSphHarm(&MultSphHarmM, 2, -1, inc, 0.);
3021 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y21\n");
3023 for (
i = 0;
i < length;
i++) {
3024 x0 = h2P1->
data[2 *
i];
3025 x1 = h2P1->
data[2 *
i + 1];
3026 x2 = h2M1->
data[2 *
i];
3027 x3 = h2M1->
data[2 *
i + 1];
3028 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3029 sigc->
data[
i] += - x0 * cimag(MultSphHarmP) - x1 * creal(MultSphHarmP) - x2 * cimag(MultSphHarmM) - x3 * creal(MultSphHarmM);
3033 errcode =
XLALSphHarm(&MultSphHarmP, 2, 0, inc, 0.);
3036 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y20\n");
3038 for (
i = 0;
i < length;
i++) {
3039 x0 = h20->
data[2 *
i];
3040 x1 = h20->
data[2 *
i + 1];
3041 sigp->
data[
i] += x1 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP);
3042 sigc->
data[
i] -= x1 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP);
3046 errcode =
XLALSphHarm(&MultSphHarmP, 3, 3, inc, 0.);
3047 errcode +=
XLALSphHarm(&MultSphHarmM, 3, -3, inc, 0.);
3052 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y33,Y3-3\n");
3054 for (
i = 0;
i < length;
i++) {
3055 x0 = h3P3->
data[2 *
i];
3056 x1 = h3P3->
data[2 *
i + 1];
3057 x2 = h3M3->
data[2 *
i];
3058 x3 = h3M3->
data[2 *
i + 1];
3059 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3060 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3064 errcode =
XLALSphHarm(&MultSphHarmP, 3, 2, inc, 0.);
3065 errcode +=
XLALSphHarm(&MultSphHarmM, 3, -2, inc, 0.);
3069 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y32,Y3-2\n");
3071 for (
i = 0;
i < length;
i++) {
3072 x0 = h3P2->
data[2 *
i];
3073 x1 = h3P2->
data[2 *
i + 1];
3074 x2 = h3M2->
data[2 *
i];
3075 x3 = h3M2->
data[2 *
i + 1];
3076 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3077 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3081 errcode =
XLALSphHarm(&MultSphHarmP, 3, 1, inc, 0.);
3082 errcode +=
XLALSphHarm(&MultSphHarmM, 3, -1, inc, 0.);
3086 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y31,Y3-1\n");
3088 for (
i = 0;
i < length;
i++) {
3089 x0 = h3P1->
data[2 *
i];
3090 x1 = h3P1->
data[2 *
i + 1];
3091 x2 = h3M1->
data[2 *
i];
3092 x3 = h3M1->
data[2 *
i + 1];
3093 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3094 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3098 errcode =
XLALSphHarm(&MultSphHarmP, 3, 0, inc, 0.);
3101 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y30\n");
3103 for (
i = 0;
i < length;
i++) {
3104 x0 = h30->
data[2 *
i];
3105 x1 = h30->
data[2 *
i + 1];
3106 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmM);
3107 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP);
3111 errcode =
XLALSphHarm(&MultSphHarmP, 4, 4, inc, 0.);
3112 errcode +=
XLALSphHarm(&MultSphHarmM, 4, -4, inc, 0.);
3116 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y44,Y4-4\n");
3118 for (
i = 0;
i < length;
i++) {
3119 x0 = h4P4->
data[2 *
i];
3120 x1 = h4P4->
data[2 *
i + 1];
3121 x2 = h4P4->
data[2 *
i];
3122 x3 = h4M4->
data[2 *
i + 1];
3123 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3124 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3128 errcode =
XLALSphHarm(&MultSphHarmP, 4, 3, inc, 0.);
3129 errcode +=
XLALSphHarm(&MultSphHarmM, 4, -3, inc, 0.);
3133 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y43,Y4-3\n");
3135 for (
i = 0;
i < length;
i++) {
3136 x0 = h4P3->
data[2 *
i];
3137 x1 = h4P3->
data[2 *
i + 1];
3138 x2 = h4M3->
data[2 *
i];
3139 x3 = h4M3->
data[2 *
i + 1];
3140 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3141 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3145 errcode =
XLALSphHarm(&MultSphHarmP, 4, 2, inc, 0.);
3146 errcode +=
XLALSphHarm(&MultSphHarmM, 4, -2, inc, 0.);
3150 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y42,Y4-2\n");
3152 for (
i = 0;
i < length;
i++) {
3153 x0 = h4P2->
data[2 *
i];
3154 x1 = h4P2->
data[2 *
i + 1];
3155 x2 = h4M2->
data[2 *
i];
3156 x3 = h4M2->
data[2 *
i + 1];
3157 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3158 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3162 errcode =
XLALSphHarm(&MultSphHarmP, 4, 1, inc, 0.);
3163 errcode +=
XLALSphHarm(&MultSphHarmM, 4, -1, inc, 0.);
3167 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y41,Y4-1\n");
3169 for (
i = 0;
i < length;
i++) {
3170 x0 = h4P1->
data[2 *
i];
3171 x1 = h4P1->
data[2 *
i + 1];
3172 x2 = h4M1->
data[2 *
i];
3173 x3 = h4M1->
data[2 *
i + 1];
3174 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP) + x2 * creal(MultSphHarmM) - x3 * cimag(MultSphHarmM);
3175 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP) + x2 * cimag(MultSphHarmM) + x3 * creal(MultSphHarmM);
3179 errcode =
XLALSphHarm(&MultSphHarmP, 4, 0, inc, 0.);
3182 XLALPrintWarning(
"** LALPSpinInspiralRD WARNING **: impossible to create Y40\n");
3184 for (
i = 0;
i < length;
i++) {
3185 x0 = h40->
data[2 *
i];
3186 x1 = h40->
data[2 *
i + 1];
3187 sigp->
data[
i] += x0 * creal(MultSphHarmP) - x1 * cimag(MultSphHarmP);
3188 sigc->
data[
i] -= x0 * cimag(MultSphHarmP) + x1 * creal(MultSphHarmP);
3200 for (
i = 0;
i < length;
i++) {
3209 memcpy(signalvec1->
data, sigp->
data, length * (
sizeof(
REAL8)));
3211 memcpy(signalvec2->
data, sigc->
data, length * (
sizeof(
REAL8)));
void XLALRungeKutta4Free(rk4GSLIntegrator *integrator)
INT4 XLALPSpinGenerateQNMFreq(COMPLEX8Vector *modefreqs, InspiralTemplate *params, UINT4 l, INT4 m, UINT4 nmodes, REAL8 finalMass, REAL8 finalSpin)
int XLALInspiralSetup(expnCoeffs *ak, InspiralTemplate *params)
int XLALInspiralInit(InspiralTemplate *params, InspiralInit *paramsInit)
INT4 XLALPSpinFinalMassSpin(REAL8 *finalMass, REAL8 *finalSpin, InspiralTemplate *params, REAL8 energy, REAL8 *LNhvec)
INT4 XLALGenerateWaveDerivative(REAL8Vector *dwave, REAL8Vector *wave, REAL8 dt)
INT4 XLALPSpinInspiralAttachRingdownWave(REAL8Vector *signalvec, InspiralTemplate *params, UINT4 *attpos, UINT4 nmodes, UINT4 l, INT4 m, REAL8 finalMass, REAL8 finalSpin)
int XLALInspiralChooseModel(expnFunc *func, expnCoeffs *ak, InspiralTemplate *params)
rk4GSLIntegrator * XLALRungeKutta4Init(INT4 n, rk4In *input)
int XLALRungeKutta4(REAL8Vector *yout, rk4GSLIntegrator *integrator, void *params)
#define XLAL_CALLGSL(statement)
void XLALDestroyREAL8Array(REAL8Array *)
REAL4VectorSequence * XLALCreateREAL4VectorSequence(UINT4 length, UINT4 veclen)
#define GENERATEPPNINSPIRALH_EFSTOP
Reached requested termination frequency.
void XLALAdaptiveRungeKuttaFree(LALAdaptiveRungeKuttaIntegrator *integrator)
LALAdaptiveRungeKuttaIntegrator * XLALAdaptiveRungeKutta4Init(int dim, int(*dydt)(double t, const double y[], double dydt[], void *params), int(*stop)(double t, const double y[], double dydt[], void *params), double eps_abs, double eps_rel)
int XLALAdaptiveRungeKutta4Hermite(LALAdaptiveRungeKuttaIntegrator *integrator, void *params, REAL8 *yinit, REAL8 tinit, REAL8 tend_in, REAL8 deltat, REAL8Array **yout)
@ LAL_INSPIRAL_INTERACTION_TIDAL_5PN
Leading-order tidal interaction.
@ LAL_INSPIRAL_INTERACTION_ALL
all spin and tidal interactions
@ LAL_INSPIRAL_INTERACTION_TIDAL_6PN
Next-to-leading-order tidal interaction.
@ LAL_INSPIRAL_INTERACTION_SPIN_ORBIT_25PN
Next-to-leading-order spin-orbit interaction.
@ LAL_INSPIRAL_INTERACTION_QUAD_MONO_2PN
Quadrupole-monopole interaction.
@ LAL_INSPIRAL_INTERACTION_SPIN_ORBIT_3PN
Spin-spin interaction.
@ LAL_INSPIRAL_INTERACTION_NONE
No spin, tidal or other interactions.
@ LAL_INSPIRAL_INTERACTION_SPIN_SPIN_2PN
Spin-spin interaction.
@ LAL_INSPIRAL_INTERACTION_SPIN_ORBIT_15PN
Leading order spin-orbit interaction.
@ LAL_INSPIRAL_INTERACTION_ALL_SPIN
all spin interactions, no tidal interactions
@ LAL_INSPIRAL_INTERACTION_SPIN_SPIN_SELF_2PN
Spin-spin-self interaction.
void * XLALMalloc(size_t n)
static int XLALSpinInspiralFillH4Modes(REAL8Vector *h4P4, REAL8Vector *h4M4, REAL8Vector *h4P3, REAL8Vector *h4M3, REAL8Vector *h4P2, REAL8Vector *h4M2, REAL8Vector *h4P1, REAL8Vector *h4M1, REAL8Vector *h40, INT4 j, REAL8 amp44, REAL8 v, REAL8 eta, REAL8 dm, REAL8 Psi, REAL8 alpha, LALSpinInspiralAngle *an)
#define LALPSIRDPN_TEST_OMEGANAN
#define LALPSIRDPN_TEST_OMEGACUT
#define LALPSIRDPN_TEST_OMEGANONPOS
static REAL8 fracRD(REAL8 LNhS1, REAL8 LNhS2, REAL8 S1S1, REAL8 S1S2, REAL8 S2S2)
static REAL8 OmMatch(REAL8 LNhS1, REAL8 LNhS2, REAL8 S1S1, REAL8 S1S2, REAL8 S2S2)
static int XLALSpinInspiralAdaptiveEngine(const UINT4 neqs, const REAL8 yinit[], REAL8 amp22ini, LALPSpinInspiralRDparams *mparams, REAL8Vector *h2P2, REAL8Vector *h2M2, REAL8Vector *h2P1, REAL8Vector *h2M1, REAL8Vector *h20, REAL8Vector *h3P3, REAL8Vector *h3M3, REAL8Vector *h3P2, REAL8Vector *h3M2, REAL8Vector *h3P1, REAL8Vector *h3M1, REAL8Vector *h30, REAL8Vector *h4P4, REAL8Vector *h4M4, REAL8Vector *h4P3, REAL8Vector *h4M3, REAL8Vector *h4P2, REAL8Vector *h4M2, REAL8Vector *h4P1, REAL8Vector *h4M1, REAL8Vector *h40, REAL8Vector *freq, REAL8Vector *phase, LALPSpinInspiralPhenPars *phenPars)
static int XLALPSpinInspiralRDEngine(REAL8Vector *signalvec1, REAL8Vector *signalvec2, REAL8Vector *hh, REAL8Vector *ff, REAL8Vector *phi, InspiralTemplate *params, InspiralInit *paramsInit)
Main function to produce waveforms.
static int XLALPSpinInspiralRDSetParams(LALPSpinInspiralRDparams *mparams, InspiralTemplate *params, InspiralInit *paramsInit)
static int XLALSpinInspiralEngine(UINT4 neqs, const REAL8 yinit[], REAL8 amp22ini, LALPSpinInspiralRDparams *mparams, REAL8Vector *h2P2, REAL8Vector *h2M2, REAL8Vector *h2P1, REAL8Vector *h2M1, REAL8Vector *h20, REAL8Vector *h3P3, REAL8Vector *h3M3, REAL8Vector *h3P2, REAL8Vector *h3M2, REAL8Vector *h3P1, REAL8Vector *h3M1, REAL8Vector *h30, REAL8Vector *h4P4, REAL8Vector *h4M4, REAL8Vector *h4P3, REAL8Vector *h4M3, REAL8Vector *h4P2, REAL8Vector *h4M2, REAL8Vector *h4P1, REAL8Vector *h4M1, REAL8Vector *h40, REAL8Vector *freq, REAL8Vector *phase, LALPSpinInspiralPhenPars *phenPars)
static int XLALSpinInspiralTest(double t, const double values[], double dvalues[], void *mparams)
static int XLALSpinInspiralFillH3Modes(REAL8Vector *h3P3, REAL8Vector *h3M3, REAL8Vector *h3P2, REAL8Vector *h3M2, REAL8Vector *h3P1, REAL8Vector *h3M1, REAL8Vector *h30, UINT4 j, REAL4 amp, REAL4 v, REAL4 eta, REAL4 dm, REAL8 Psi, REAL8 alpha, LALSpinInspiralAngle *an)
static void LALSpinInspiralDerivatives(REAL8Vector *values, REAL8Vector *dvalues, void *mparams)
static int XLALSpinInspiralDerivatives(double t, const double values[], double dvalues[], void *mparams)
Function to compute detivative of dynamical variables.
int XLALPSpinInspiralRDTemplates(REAL4Vector *signalvec1, REAL4Vector *signalvec2, InspiralTemplate *params)
Function to produce waveform templates.
#define LALPSIRDPN_TEST_ENERGY
#define LALPSIRDPN_TEST_OMEGAMATCH
#define LALPSIRDPN_TEST_OMEGADOT
static int XLALSpinInspiralFillH2Modes(REAL8Vector *h2P2, REAL8Vector *h2M2, REAL8Vector *h2P1, REAL8Vector *h2M1, REAL8Vector *h20, UINT4 j, REAL4 amp, REAL4 v, REAL4 eta, REAL4 dm, REAL8 Psi, REAL8 alpha, LALSpinInspiralAngle *an)
Function actually computing PSIRD waveforms.
int XLALPSpinInspiralRD(REAL4Vector *signalvec, InspiralTemplate *params)
int XLALPSpinInspiralRDFreqDom(REAL4Vector *signalvec, InspiralTemplate *params)
int XLALPSpinInspiralRDForInjection(CoherentGW *waveform, InspiralTemplate *params, PPNParamStruc *ppnParams)
Function Module to produce injection waveforms.
LAL_SIM_INSPIRAL_FRAME_AXIS_VIEW
LAL_SIM_INSPIRAL_FRAME_AXIS_TOTAL_J
LAL_SIM_INSPIRAL_FRAME_AXIS_ORBITAL_L
LAL_PNORDER_TWO_POINT_FIVE
LAL_PNORDER_THREE_POINT_FIVE
LAL_PNORDER_ONE_POINT_FIVE
REAL4FFTPlan * XLALCreateForwardREAL4FFTPlan(UINT4 size, int measurelvl)
void XLALDestroyREAL4FFTPlan(REAL4FFTPlan *plan)
int XLALREAL4VectorFFT(REAL4Vector *_LAL_RESTRICT_ output, const REAL4Vector *_LAL_RESTRICT_ input, const REAL4FFTPlan *plan)
INT4 XLALSphHarm(COMPLEX16 *out, UINT4 L, INT4 M, REAL4 theta, REAL4 phi)
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 XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int int XLALPrintWarning(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
REAL4TimeVectorSeries * a
REAL4TimeVectorSeries * h
The inspiral waveform parameter structure containing information about the waveform to be generated.
REAL8 epnspin20S1S2
Coeff. of the term in energy.
REAL8 epnspin20S2S2dotLNh
REAL8 epnspin20S2S2
Coeff. of the term in energy.
REAL8 wdotspin25S2LNh
Coeff. of the cntrb. to .
REAL8 wdotorblog
Log coefficient of the PN expansion of of .
REAL8 epnspin20S1S1
Coeff. of the term in energy.
REAL8 epnspin15S2dotLNh
Coeff. of the term in energy.
REAL8 epnspin15S1dotLNh
Coeff. of the term in energy.
REAL8 epnspin20S1S2dotLNh
Coeff. of the term in energy.
REAL8 epnorb[4]
Coefficients of the PN expansion of the energy.
REAL8 eta
symmetric mass ratio
REAL8 epnspin20S1S1dotLNh
REAL8 wdotorb[8]
Coefficients of the analytic PN expansion of .
REAL8 wdotspin20S1S1
Coeff. of the cntrb. to .
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 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
Structure containing steps and controls for the GSL Runge-Kutta solver.
Structure used as an input to Runge-Kutta solver.