21 #define UNUSED __attribute__ ((unused))
31 #include <gsl/gsl_spline.h>
33 #include <lal/Units.h>
34 #include <lal/SeqFactories.h>
35 #include <lal/LALConstants.h>
36 #include <lal/XLALError.h>
37 #include <lal/FrequencySeries.h>
38 #include <lal/Sequence.h>
39 #include <lal/LALSimIMR.h>
60 REAL8 *pfa_v4_contrib,
63 const REAL8 mtot = m1_SI + m2_SI;
64 const REAL8 eta = m1_SI*m2_SI/mtot/mtot;
65 const REAL8 m1M = m1_SI/mtot;
66 const REAL8 m2M = m2_SI/mtot;
68 const REAL8 m1Msq = m1M * m1M;
69 const REAL8 m2Msq = m2M * m2M;
71 const REAL8 chi1sq = chi1L*chi1L;
72 const REAL8 chi2sq = chi2L*chi2L;
75 REAL8 pn_sigma = - 50.L*(qm_def1 * chi1sq * m1Msq + qm_def2 * chi2sq * m2Msq);
76 REAL8 pn_ss3 = 5.L/84.L*(9407.L+ 8218.L * m1M - 2016.L * m1Msq) * qm_def1 * m1Msq * chi1sq;
77 pn_ss3 += 5.L/84.L*(9407.L+ 8218.L * m2M - 2016.L * m2Msq) * qm_def2 * m2Msq * chi2sq;
79 const REAL8 pfaN = 3.L/(128.L * eta);
87 *pfa_v4_contrib = pn_sigma * pfaN;
88 *pfa_v6_contrib = pn_ss3 * pfaN;
92 struct tagCOMPLEX16FrequencySeries **hptilde,
93 struct tagCOMPLEX16FrequencySeries **hctilde,
110 if(!hptilde || !hctilde)
112 if(*hptilde || *hctilde) {
113 XLALPrintError(
"(*hptilde) and (*hctilde) are supposed to be NULL, but got %p and %p",(*hptilde),(*hctilde));
118 double fLow = freqs_in->
data[0];
119 double fHigh = freqs_in->
data[freqs_in->
length - 1];
129 double m1temp = m1_SI;
130 double chi1temp = chi1;
131 double lambda1temp = lambda1;
132 double quadmon1temp = quad_mon1;
137 if (lambda1!=lambda2){
140 lambda2 = lambda1temp;
143 if (quad_mon1 != quad_mon2) {
144 quad_mon1 = quad_mon2;
145 quad_mon2 = quadmon1temp;
162 double f_max_nr_tidal = fHigh;
167 const double NRTIDAL_FMAX = 1.3*fHz_mrg;
168 if ( (NRTidal_version !=
NRTidalv2NSBH_V) && (( fHigh > NRTIDAL_FMAX ) || ( fHigh == 0.0 )) )
171 f_max_nr_tidal = NRTIDAL_FMAX;
176 phiRef, deltaF, fLow, f_max_nr_tidal, fRef, distance, inclination,
179 -1, LALparams, NRTidal_version);
188 size_t n_full = (size_t) pow(2,ceil(log2(fHigh / deltaF))) + 1;
199 phiRef, fRef, distance, inclination,
202 -1, LALparams, NRTidal_version);
214 UINT4 iStop = (*hptilde)->
data->length - 1;
218 freqs->
data[
i-iStart] =
i*deltaF;
234 const REAL8 mtot = m1 + m2;
240 REAL8 eta = m1 * m2 / (mtot* mtot);
241 REAL8 pn_fac = 3./(128.*eta);
242 REAL8 SS_3p5PN = 0., SSS_3p5PN = 0.;
263 m1_SI, m2_SI, chi1, lambda2
274 REAL8 pfa_v4_contrib, pfa_v6_contrib;
276 &pfa_v4_contrib, &pfa_v6_contrib);
278 gsl_interp_accel *acc_phi = gsl_interp_accel_alloc();
279 gsl_spline *spline_phi = gsl_spline_alloc(gsl_interp_cspline, freqs->
length);
280 gsl_vector *f_vec = gsl_vector_alloc(freqs->
length);
281 gsl_vector *phi_vec = gsl_vector_alloc(freqs->
length);
290 const REAL8 phi_ss = pfa_v4_contrib / v + pfa_v6_contrib * v;
291 const REAL8 phase_corr = phi_tidal->
data[
i] + phi_ss;
292 gsl_vector_set(f_vec,
i, freqs->
data[
i]);
293 gsl_vector_set(phi_vec,
i, phase_corr);
295 COMPLEX16 Corr = planck_taper->
data[
i] * cexp(-I*phase_corr -I*v*v*(SS_3p5PN + SSS_3p5PN)*pn_fac);
297 Corr *= amp_tidal->
data[
i];
313 gsl_spline_init(spline_phi, gsl_vector_const_ptr(f_vec, 0), gsl_vector_const_ptr(phi_vec, 0), freqs->
length);
322 REAL8 t_corr_s = gsl_spline_eval_deriv(spline_phi, fHz_final, acc_phi) / (2*
LAL_PI);
326 double fHz = freqs->
data[
i] - fRef;
328 double phase_factor = -2*
LAL_PI * fHz * t_corr_s;
329 COMPLEX16 t_factor = (cos(phase_factor) + I*sin(phase_factor));
330 pdata[j] *= t_factor;
331 cdata[j] *= t_factor;
333 gsl_vector_free(f_vec);
334 gsl_vector_free(phi_vec);
335 gsl_spline_free(spline_phi);
336 gsl_interp_accel_free(acc_phi);
393 struct tagCOMPLEX16FrequencySeries **hptilde,
394 struct tagCOMPLEX16FrequencySeries **hctilde,
414 phiRef, fRef, distance, inclination, m1_SI, m2_SI, chi1, chi2, lambda1, lambda2, freqs, 0, LALparams, NRTidal_version);
428 struct tagCOMPLEX16FrequencySeries **hptilde,
429 struct tagCOMPLEX16FrequencySeries **hctilde,
450 freqs->
data[0] = fLow;
451 freqs->
data[1] = fHigh;
454 phiRef, fRef, distance, inclination, m1_SI, m2_SI, chi1, chi2, lambda1, lambda2, freqs, deltaF, LALparams, NRTidal_version);
void XLALSimInspiralGetHOSpinTerms(REAL8 *SS_3p5PN, REAL8 *SSS_3p5PN, REAL8 X_A, REAL8 X_B, REAL8 chi1, REAL8 chi2, REAL8 quadparam1, REAL8 quadparam2)
Function to add 3.5PN spin-squared and 3.5PN spin-cubed terms.
int XLALSimNRTunedTidesFDTidalPhaseFrequencySeries(const REAL8Sequence *phi_tidal, const REAL8Sequence *amp_tidal, const REAL8Sequence *planck_taper, const REAL8Sequence *fHz, REAL8 m1_SI, REAL8 m2_SI, REAL8 lambda1, REAL8 lambda2, NRTidal_version_type NRTidal_version)
Function to call the frequency domain tidal correction over an array of input frequencies.
double XLALSimNRTunedTidesMergerFrequency(const REAL8 mtot_MSUN, const REAL8 kappa2T, const REAL8 q)
compute the merger frequency of a BNS system.
double XLALSimNRTunedTidesComputeKappa2T(REAL8 m1_SI, REAL8 m2_SI, REAL8 lambda1, REAL8 lambda2)
convenient function to compute tidal coupling constant.
void Self_spin_phase_contributions(const REAL8 m1_SI, const REAL8 m2_SI, const REAL8 chi1L, const REAL8 chi2L, const REAL8 qm_def1, const REAL8 qm_def2, REAL8 *pfa_v4_contrib, REAL8 *pfa_v6_contrib)
Function to internally add 2PN and 3PN spin-spin terms to be able to include spin-induced quadrupole ...
int SEOBNRv4ROM_NRTidal_Core(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, REAL8 phiRef, REAL8 fRef, REAL8 distance, REAL8 inclination, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1, REAL8 chi2, REAL8 lambda1, REAL8 lambda2, const REAL8Sequence *freqs_in, REAL8 deltaF, LALDict *LALparams, NRTidal_version_type NRTidal_version)
double XLALSimInspiralGetFinalFreq(REAL8 m1, REAL8 m2, const REAL8 S1x, const REAL8 S1y, const REAL8 S1z, const REAL8 S2x, const REAL8 S2y, const REAL8 S2z, Approximant approximant)
Function that gives the default ending frequencies of the given approximant.
COMPLEX16FrequencySeries * XLALResizeCOMPLEX16FrequencySeries(COMPLEX16FrequencySeries *series, int first, size_t length)
@ NRTidalv2NoAmpCorr_V
version NRTidalv2, without amplitude corrections
@ NRTidalv2NSBH_V
version NRTidalv2: https://arxiv.org/abs/1905.06011 with amplitude corrections for NSBH (used for SEO...
@ NRTidalv2_V
version NRTidalv2: https://arxiv.org/abs/1905.06011
int XLALSimIMRSEOBNRv4ROM(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, REAL8 phiRef, REAL8 deltaF, REAL8 fLow, REAL8 fHigh, REAL8 fRef, REAL8 distance, REAL8 inclination, REAL8 m1SI, REAL8 m2SI, REAL8 chi1, REAL8 chi2, INT4 nk_max, LALDict *LALparams, NRTidal_version_type NRTidal_version)
Compute waveform in LAL format for the SEOBNRv4_ROM model.
int XLALSimIMRSEOBNRv4ROMFrequencySequence(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, const REAL8Sequence *freqs, REAL8 phiRef, REAL8 fRef, REAL8 distance, REAL8 inclination, REAL8 m1SI, REAL8 m2SI, REAL8 chi1, REAL8 chi2, INT4 nk_max, LALDict *LALparams, NRTidal_version_type NRTidal_version)
Compute waveform in LAL format at specified frequencies for the SEOBNRv4_ROM model.
int XLALSimIMRSEOBNRv4ROMNRTidalFrequencySequence(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, const REAL8Sequence *freqs, REAL8 phiRef, REAL8 fRef, REAL8 distance, REAL8 inclination, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1, REAL8 chi2, REAL8 lambda1, REAL8 lambda2, LALDict *LALparams, NRTidal_version_type NRTidal_version)
Compute waveform in LAL format at specified frequencies for the SEOBNRv4_ROM_NRTidal tidal model base...
int XLALSEOBNRv4ROMNSBHAmplitudeCorrectionFrequencySeries(const REAL8Sequence *amp_tidal, const REAL8Sequence *fHz, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1, REAL8 lambda2)
Compute amplitude correction to SEOBNRv4_ROM_NRTidalv2 in LAL format at specified frequencies for the...
int XLALSimIMRSEOBNRv4ROMNRTidal(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, REAL8 phiRef, REAL8 deltaF, REAL8 fLow, REAL8 fHigh, REAL8 fRef, REAL8 distance, REAL8 inclination, REAL8 m1_SI, REAL8 m2_SI, REAL8 chi1, REAL8 chi2, REAL8 lambda1, REAL8 lambda2, LALDict *LALparams, NRTidal_version_type NRTidal_version)
Compute waveform in LAL format for the SEOBNRv4_ROM_NRTidal tidal model based on SEOBNRv4_ROM.
@ SEOBNRv4
Spin nonprecessing EOBNR model v4.
void XLALDestroyREAL8Sequence(REAL8Sequence *sequence)
REAL8Sequence * XLALCreateREAL8Sequence(size_t length)
#define XLAL_CHECK(assertion,...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1