5 #ifndef _LALSIMIMRSPINPRECEOBFACTORIZEDFLUX_C
6 #define _LALSIMIMRSPINPRECEOBFACTORIZEDFLUX_C
9 #include <lal/LALSimInspiral.h>
10 #include <lal/LALSimIMR.h>
38 const UINT4 SpinAlignedEOBversion
61 const UINT4 SpinAlignedEOBversion
66 double radius = sqrt(values->
data[0]*values->
data[0] + values->
data[1] *values->
data[1] + values->
data[2] *values->
data[2] );
71 for(
i =0;
i < 4;
i++)
72 if( isnan(polvalues->
data[
i]) ) {
73 XLAL_PRINT_INFO(
"XLALInspiralPrecSpinFactorizedFlux (from input)::polvalues %3.10f %3.10f %3.10f %3.10f\n", polvalues->
data[0], polvalues->
data[1], polvalues->
data[2], polvalues->
data[3]);
74 XLALPrintError(
"XLAL Error - %s: nan polvalues: %3.10f %3.10f %3.10f %3.10f \n", __func__, polvalues->
data[0], polvalues->
data[1], polvalues->
data[2], polvalues->
data[3] );
78 for(
i =0;
i < 12;
i++)
79 if( isnan(values->
data[
i]) ) {
80 XLAL_PRINT_INFO(
"XLALInspiralPrecSpinFactorizedFlux (from input)::values %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f\n", values->
data[0], values->
data[1], values->
data[2], values->
data[3], values->
data[4], values->
data[5], values->
data[6], values->
data[7], values->
data[8], values->
data[9], values->
data[10], values->
data[11]);
81 XLALPrintError(
"XLAL Error - %s: nan in input values: %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f \n", __func__, values->
data[0], values->
data[1], values->
data[2], values->
data[3], values->
data[4], values->
data[5], values->
data[6], values->
data[7], values->
data[8], values->
data[9], values->
data[10], values->
data[11] );
102 omegaSq = omega * omega;
109 for (
i = 0;
i < 11;
i++)
118 REAL8 rcrossp [3], rcrosspMag, s1dotL, s2dotL;
119 REAL8 chiS , chiA, tplspin;
121 rcrossp[0] = values->
data[1] * values->
data[5] - values->
data[2] * values->
data[4];
122 rcrossp[1] = values->
data[2] * values->
data[3] - values->
data[0] * values->
data[5];
123 rcrossp[2] = values->
data[0] * values->
data[4] - values->
data[1] * values->
data[3];
124 rcrosspMag = sqrt(rcrossp[0] * rcrossp[0] + rcrossp[1] * rcrossp[1] +
125 rcrossp[2] * rcrossp[2]);
127 rcrossp[0] /= rcrosspMag;
128 rcrossp[1] /= rcrosspMag;
129 rcrossp[2] /= rcrosspMag;
131 s1dotL = values->
data[6] * rcrossp[0] + values->
data[7] * rcrossp[1]
132 + values->
data[8] * rcrossp[2];
133 s2dotL = values->
data[9] * rcrossp[0] + values->
data[10] * rcrossp[1]
134 + values->
data[11] * rcrossp[2];
136 chiS = 0.5 * (s1dotL + s2dotL);
137 chiA = 0.5 * (s1dotL - s2dotL);
143 switch (SpinAlignedEOBversion) {
152 XLALPrintError(
"XLAL Error - %s: Unknown SEOBNR version!\nAt present only v1 and v2 are available.\n", __func__);
163 XLAL_PRINT_INFO(
"Re-calculating waveform coefficients in the Flux function with chiS, chiA = %e, %e!\n", chiS, chiA);
164 chiS = 0.3039435650957116;
165 chiA = -0.2959424290852973;
166 XLAL_PRINT_INFO(
"Changed them to the correct values = %e, %e!\n", chiS, chiA);
171 tplspin, chiS, chiA, SpinAlignedEOBversion) ==
XLAL_FAILURE) {
191 for (
l = 2;
l <= lMax;
l++) {
193 for (
m = 1;
m <=
l;
m++) {
204 if (
l == 2 &&
m == 2) {
223 XLAL_PRINT_INFO(
"\tl = %d, m = %d, NQC: a1 = %.16e, a2 = %.16e, a3 = %.16e, a3S = %.16e, a4 = %.16e, a5 = %.16e\n\tb1 = %.16e, b2 = %.16e, b3 = %.16e, b4 = %.16e\n",
224 2, 2, nqcCoeffs->
a1, nqcCoeffs->
a2, nqcCoeffs->
a3, nqcCoeffs->
a3S, nqcCoeffs->
a4, nqcCoeffs->
a5,
225 nqcCoeffs->
b1, nqcCoeffs->
b2, nqcCoeffs->
b3, nqcCoeffs->
b4);
228 XLAL_PRINT_INFO(
"\tl = %d, m = %d, hNQC = %.16e + i%.16e, |hNQC| = %.16e\n",
l,
m,
229 creal(hNQC), cimag(hNQC), sqrt(creal(hNQC) * creal(hNQC) + cimag(hLM) * cimag(hLM)));
231 if((
m *
m) * omegaSq * (creal(hLM) * creal(hLM) + cimag(hLM) * cimag(hLM)) > 5.) {
233 XLAL_PRINT_INFO(
"\tl = %d, m = %d, mag(hLM) = %.17e, mag(hNQC) = %.17e, omega = %.16e\n",
234 l,
m, sqrt(creal(hLM) * creal(hLM) + cimag(hLM) * cimag(hLM)),
235 sqrt(creal(hNQC) * creal(hNQC) + cimag(hNQC) * cimag(hNQC)), omega);
237 XLAL_PRINT_INFO(
"XLALInspiralPrecSpinFactorizedFlux (from input)::values %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f %3.10f\n", values->
data[0], values->
data[1], values->
data[2], values->
data[3], values->
data[4], values->
data[5], values->
data[6], values->
data[7], values->
data[8], values->
data[9], values->
data[10], values->
data[11]);
245 XLAL_PRINT_INFO(
"\tl = %d, m = %d, mag(hLM) = %.17e, omega = %.16e\n",
l,
m, sqrt(creal(hLM) * creal(hLM) + cimag(hLM) * cimag(hLM)), omega);
248 flux += (
REAL8) (
m *
m) * omegaSq * (creal(hLM) * creal(hLM) + cimag(hLM) * cimag(hLM));
251 if( (omegaSq > 1 || flux > 5) ) {
253 XLAL_PRINT_INFO(
"In XLALInspiralPrecSpinFactorizedFlux: omegaSq = %3.12f, FLUX = %3.12f, r = %3.12f\n",
254 omegaSq, flux,radius);
static UNUSED int XLALSimIMREOBNonQCCorrection(COMPLEX16 *restrict nqc, REAL8Vector *restrict values, const REAL8 omega, EOBNonQCCoeffs *restrict coeffs)
This function calculates the non-quasicircular correction to apply to the waveform.
static REAL8 XLALInspiralPrecSpinFactorizedFlux(REAL8Vector *polvalues, REAL8Vector *values, EOBNonQCCoeffs *nqcCoeffs, const REAL8 omega, SpinEOBParams *ak, const REAL8 H, const INT4 lMax, const UINT4 SpinAlignedEOBversion)
This function calculates the spin factorized-resummed GW energy flux for given dynamical variables.
void XLALDestroyREAL8Vector(REAL8Vector *vector)
#define XLAL_ERROR_REAL8(...)
#define XLAL_PRINT_INFO(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
The coefficients which are used in calculating the non-quasicircular correction to the EOBNRv2 model.
FacWaveformCoeffs * hCoeffs
Parameters for the spinning EOB model.