1 #ifndef _LALSPINPRECHCAPRVECDERIVATIVE_V3OPT_C
2 #define _LALSPINPRECHCAPRVECDERIVATIVE_V3OPT_C
7 #include <lal/LALSimInspiral.h>
8 #include <lal/LALSimIMR.h>
25 for(
int i =0;
i < 12;
i++){
26 if( isnan(values[
i]) ) {
27 XLAL_PRINT_INFO(
"XLALSpinPrecHcapRvecDerivative_exact::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[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8], values[9], values[10], values[11]);
28 XLALPrintError(
"XLAL Error - %s: nan in input values \n", __func__);
34 REAL8 tmpDValues[12] = {0.}, Tmatrix[3][3]={{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}};
39 rMag2 = values[0]*values[0] + values[1]*values[1] + values[2]*values[2];
41 REAL8 a2, rMag,
u,
u2,
u3,
u4,
u5,
w2, D,
m1PlusetaKK,
bulk,
logTerms,
deltaU,
deltaT,
deltaR, eta;
42 REAL8 sKerr[3] = {0.};
48 for(
int i=0;
i<3;
i++){
49 sKerr[
i] = values[
i+6] + values[
i+9];
50 a2 += sKerr[
i]*sKerr[
i];
63 D = 1. + log(1. + 6.*eta*
u2 + 2.*(26. - 3.*eta)*eta*
u3);
71 logTerms = 1. + eta*coeffs->
k0 + eta*log(fabs(1. + coeffs->
k1*
u
92 for(
int i = 0;
i < 3;
i++ ){
93 for(
int j = 0; j <=
i; j++ )
94 Tmatrix[
i][j] = Tmatrix[j][
i] = (values[
i]*values[j]/rMag2)* (
csi - 1.);
98 REAL8 Pderivs[3]={0.};
100 tmpDValues[3] = Pderivs[0];
101 tmpDValues[4] = Pderivs[1];
102 tmpDValues[5] = Pderivs[2];
108 REAL8 s1Data[3],s2Data[3], rcrossrDot[3];
109 REAL8 rcrossrDotMag, s1dotLN, s2dotLN, chiS,chiA, tplspin;
110 memcpy(s1Data,values+6,3*
sizeof(
REAL8));
111 memcpy(s2Data,values+9,3*
sizeof(
REAL8));
112 for (
int i = 0;
i < 3;
i++ )
114 s1Data[
i] *= (mass1+mass2)*(mass1+mass2);
115 s2Data[
i] *= (mass1+mass2)*(mass1+mass2);
119 rcrossrDot[0] = values[1]*tmpDValues[5] - values[2]*tmpDValues[4];
120 rcrossrDot[1] = values[2]*tmpDValues[3] - values[0]*tmpDValues[5];
121 rcrossrDot[2] = values[0]*tmpDValues[4] - values[1]*tmpDValues[3];
122 rcrossrDotMag = sqrt( rcrossrDot[0]*rcrossrDot[0] + rcrossrDot[1]*rcrossrDot[1] + rcrossrDot[2]*rcrossrDot[2] );
123 rcrossrDot[0] /= rcrossrDotMag;
124 rcrossrDot[1] /= rcrossrDotMag;
125 rcrossrDot[2] /= rcrossrDotMag;
126 s1dotLN = (s1Data[0]*rcrossrDot[0] + s1Data[1]*rcrossrDot[1] + s1Data[2]*rcrossrDot[2])/ (mass1*mass1);
127 s2dotLN = (s2Data[0]*rcrossrDot[0] + s2Data[1]*rcrossrDot[1] + s2Data[2]*rcrossrDot[2])/ (mass2*mass2) ;
128 chiS = 0.5 * (s1dotLN + s2dotLN);
129 chiA = 0.5 * (s1dotLN - s2dotLN);
131 tplspin = (1.-2.*seobParams->
eobParams->
eta) * chiS + (mass1 - mass2)/(mass1 + mass2) * chiA;
138 for(
int i = 0;
i < 3;
i++ ){
140 for(
int j = 0.; j < 3; j++ )
141 dvalues[
i] += tmpDValues[j+3]*Tmatrix[
i][j];
145 for(
int i = 0;
i < 3;
i++ ){
146 if( isnan(dvalues[
i]) ) {
147 XLAL_PRINT_INFO(
"XLALSpinPrecHcapRvecDerivative_exact::dvalues %3.10f %3.10f %3.10f\n", dvalues[0], dvalues[1], dvalues[2]);
148 XLALPrintError(
"XLAL Error - %s: nan in the output dvalues \n", __func__);
static int XLALSimIMRCalculateSpinPrecEOBHCoeffs(SpinEOBHCoeffs *coeffs, const REAL8 eta, const REAL8 a, const UINT4 SpinAlignedEOBversion)
This function is used to calculate some coefficients which will be used in the spinning EOB Hamiltoni...
static INT4 XLALSEOBNRv3_opt_HDerivs_for_Omega(const REAL8 *valuestort, const REAL8 mass1, const REAL8 mass2, const REAL8 eta, SpinEOBHCoeffs *coeffs, REAL8 *derivs, SpinEOBParams *params)
static int XLALSpinPrecHcapRvecDerivative_exact(double UNUSED t, const REAL8 values[], REAL8 dvalues[], void *funcParams)
Function to calculate exact derivatives of the spin EOB Hamiltonian, to get , as decribed in Eqs.
#define XLAL_PRINT_INFO(...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
FacWaveformCoeffs * hCoeffs
Parameters for the spinning EOB model, used in calculating the Hamiltonian.
UINT4 SpinAlignedEOBversion
Parameters for the spinning EOB model.
SpinEOBHCoeffs * seobCoeffs