24 #include <lal/FrequencySeries.h>
25 #include <lal/LALConstants.h>
26 #include <lal/LALDatatypes.h>
27 #include <lal/LALSimInspiral.h>
28 #include <lal/Units.h>
29 #include <lal/XLALError.h>
31 #define Pi_p2 9.8696044010893586188344909998761511
32 #define Pi_p2by3 2.1450293971110256000774441009412356
33 #define log4 1.3862943611198906188344642429163531
53 const REAL8 eta = m1 * m2 / (
m *
m);
55 const REAL8 chi_s = (s1z + s2z) / 2.;
56 const REAL8 chi_a = (s1z - s2z) / 2.;
64 return chi_s * (1. - 76. * eta / 113.) +
delta * chi_a;
117 const REAL8 eta = m1 * m2 / (
m *
m);
118 const REAL8 etap2 = eta * eta;
119 const REAL8 etap3 = etap2 * eta;
121 const REAL8 mSevenBySix = -7./6.;
122 const REAL8 vISCO = 1. / sqrt(6.);
123 const REAL8 fISCO = vISCO * vISCO * vISCO / piM;
125 REAL8 logv0 = log(v0);
128 REAL8 psiNewt, psi2, psi3, psi4, psi5, psi6, psi6L, psi7, psi3S, psi4S, psi5S;
129 REAL8 alpha2, alpha3, alpha4, alpha5, alpha6, alpha6L, alpha7, alpha3S, alpha4S, alpha5S;
130 REAL8 eta_fac = -113. + 76. * eta;
151 n = (size_t) (
f_max / deltaF + 1);
155 memset((*htilde)->data->data, 0, n *
sizeof(
COMPLEX16));
165 psi4S = 63845.*(-81. + 4.*eta)*chi*chi/(8. * eta_fac * eta_fac);
166 psi5S = -565.*(-146597. + 135856.*eta + 17136.*etap2)*chi/(2268.*eta_fac);
168 alpha3S = (113.*chi)/24.;
169 alpha4S = (12769.*chi*chi*(-81. + 4.*eta))/(32. * eta_fac * eta_fac);
170 alpha5S = (-113.*chi*(502429. - 591368.*eta + 1680*etap2))/(16128.*eta_fac);
173 psiNewt = 3./(128.*eta);
174 psi2 = 3715./756. + 55.*eta/9.;
175 psi3 = psi3S - 16.*
LAL_PI;
176 psi4 = 15293365./508032. + 27145.*eta/504. + 3085.*eta*eta/72. + psi4S;
177 psi5 = (38645.*
LAL_PI/756. - 65.*
LAL_PI*eta/9. + psi5S);
178 psi6 = 11583231236531./4694215680. - (640.*
Pi_p2)/3. - (6848.*
LAL_GAMMA)/21.
179 + (-5162.983708047263 + 2255.*
Pi_p2/12.)*eta
180 + (76055.*etap2)/1728. - (127825.*etap3)/1296.;
182 psi7 = (77096675.*
LAL_PI)/254016. + (378515.*
LAL_PI*eta)/1512.
183 - (74045.*
LAL_PI*eta*eta)/756.;
186 alpha2 = 1.1056547619047619 + (11*eta)/8.;
188 alpha4 = 0.8939214212884228 + (18913*eta)/16128. + (1379*etap2)/1152. + alpha4S;
189 alpha5 = (-4757*
LAL_PI)/1344. + (57*eta*
LAL_PI)/16. + alpha5S;
190 alpha6 = -58.601030974347324 + (3526813753*eta)/2.7869184e7 -
191 (1041557*etap2)/258048. + (67999*etap3)/82944. +
194 alpha7 = (-5111593*
LAL_PI)/2.709504e6 - (72221*eta*
LAL_PI)/24192. -
195 (1349*etap2*
LAL_PI)/24192.;
202 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
207 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
212 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
217 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
223 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
228 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
239 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
244 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
249 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
254 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
260 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
265 #if __GNUC__ >= 7 && !defined __INTEL_COMPILER
273 iStart = (size_t) ceil(fStart / deltaF);
274 data = (*htilde)->data->data;
275 for (
i = iStart;
i < n;
i++) {
277 const REAL8 f =
i * deltaF;
278 const REAL8 v3 = piM*f;
281 REAL8 v, v2, v4, v5, v6, v7, logv, Psi, amp;
283 v2 = v*v; v4 = v3*v; v5 = v4*v; v6 = v3*v3; v7 = v6*v;
287 Psi = psiNewt / v5 * (1.
288 + psi2 * v2 + psi3 * v3 + psi4 * v4
289 + psi5 * v5 * (1. + 3. * (logv - logv0))
290 + (psi6 + psi6L * (
log4 + logv)) * v6 + psi7 * v7);
292 amp = amp0 * pow(f, mSevenBySix) * (1.
293 + alpha2 * v2 + alpha3 * v3 + alpha4 * v4 + alpha5 * v5
298 - I * (amp * sin(Psi + shft * f - 2.*phic -
LAL_PI_4));
318 const REAL8 eta2 = eta*eta;
319 const REAL8 chi2 = chi*chi;
320 const REAL8 sigma0 = (-12769*(-81. + 4.*eta))/(16.*(-113. + 76.*eta)*(-113. + 76.*eta));
321 const REAL8 gamma0 = (565*(-146597. + 135856.*eta + 17136.*eta2))/(2268.*(-113. + 76.*eta));
335 if (O == -1) order = 7;
340 tk[2] = 2.9484126984126986 + (11*eta)/3.;
341 tk[3] = (-32*
LAL_PI)/5. + (226.*chi)/15.;
342 tk[4] = 6.020630590199042 - 2*sigma0*chi2 + (5429*eta)/504. + (617*eta2)/72.;
343 tk[5] = (3*gamma0*chi)/5. - (7729*
LAL_PI)/252. + (13*
LAL_PI*eta)/3.;
344 tk[6] = -428.291776175525 + (128*
Pi_p2)/3. + (6848*
LAL_GAMMA)/105. + (3147553127*eta)/3.048192e6 -
345 (451*
Pi_p2*eta)/12. - (15211*eta2)/1728. + (25565*eta2*eta)/1296. + (6848*log(4*v))/105.;
346 tk[7] = (-15419335*
LAL_PI)/127008. - (75703*
LAL_PI*eta)/756. + (14809*
LAL_PI*eta2)/378.;
349 for (k = 2; k <= order; k++) {
static double double delta
static double tau(const double a, const double b, const sysq *system)
Internal function that computes the spin-spin couplings.
COMPLEX16FrequencySeries * XLALCreateCOMPLEX16FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
int XLALSimInspiralTaylorF2ReducedSpin(COMPLEX16FrequencySeries **htilde, const REAL8 phic, const REAL8 deltaF, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const REAL8 fStart, const REAL8 fEnd, const REAL8 r, const INT4 phaseO, const INT4 ampO)
Driver routine to compute a non-precessing post-Newtonian inspiral waveform in the frequency domain,...
REAL8 XLALSimInspiralTaylorF2ReducedSpinChirpTime(const REAL8 fStart, const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi, const INT4 O)
Compute the chirp time of the "reduced-spin" templates.
REAL8 XLALSimInspiralTaylorF2ReducedSpinComputeChi(const REAL8 m1, const REAL8 m2, const REAL8 s1z, const REAL8 s2z)
Compute the dimensionless, aligned-spin parameter chi as used in the TaylorF2RedSpin waveform.
const LALUnit lalStrainUnit
const LALUnit lalSecondUnit
LALUnit * XLALUnitMultiply(LALUnit *output, const LALUnit *unit1, const LALUnit *unit2)
LIGOTimeGPS * XLALGPSAdd(LIGOTimeGPS *epoch, REAL8 dt)