19 #ifndef _LALSIMIMRSPINALIGNEDEOBGSLOPTIMIZEDINTERPOLATORGENERAL_C
20 #define _LALSIMIMRSPINALIGNEDEOBGSLOPTIMIZEDINTERPOLATORGENERAL_C
26 #include <lal/LALSimInspiral.h>
27 #include <lal/LALSimIMR.h>
46 size_t ilo = index_lo;
47 size_t ihi = index_hi;
48 while(ihi > ilo + 1) {
49 size_t i = (ihi + ilo)/2;
65 size_t x_index =
a->cache;
71 else if(
x >= xa[x_index + 1]) {
85 static inline void optimized_coeff_calc (
const double c_array[],
double dy,
double dx,
size_t index,
double * b,
double *
c,
double *
d)
87 const double c_i = c_array[index];
88 const double c_ip1 = c_array[index + 1];
89 *b = (dy / dx) - dx * (c_ip1 + 2.0 * c_i) / 3.0;
91 *
d = (c_ip1 - c_i) / (3.0 * dx);
97 static int optimized_cspline_eval (
const void * vstate,
const double x_array[],
const double y_array[],
size_t size,
double x, gsl_interp_accel *
a,
double *y,
unsigned int *index_old,
double *x_lo_old,
double *y_lo_old,
double *b_i_old,
double *c_i_old,
double *d_i_old)
106 if(index==*index_old && (*index_old)>0) {
107 double delx =
x - *x_lo_old;
108 *
y = *y_lo_old + delx * (*b_i_old + delx * (*c_i_old + delx * *d_i_old));
111 x_hi = x_array[index + 1];
112 x_lo = x_array[index];
114 const double y_lo = y_array[index];
115 const double y_hi = y_array[index + 1];
116 const double dy = y_hi - y_lo;
117 double delx =
x - x_lo;
118 double b_i, c_i, d_i;
120 *
y = y_lo + delx * (b_i + delx * (c_i + delx * d_i));
137 static int optimized_gsl_spline_eval_e(
const gsl_spline * spline,
double interptime, gsl_interp_accel * accel,
double *
output,
unsigned int *index_old,
double *x_lo_old,
double *y_lo_old,
double *b_i_old,
double *c_i_old,
double *d_i_old){
138 return optimized_cspline_eval(spline->interp->state, spline->x, spline->y, spline->interp->size, interptime, accel,
output,index_old,x_lo_old,y_lo_old,b_i_old,c_i_old,d_i_old);
static size_t optimized_gsl_interp_bsearch(const double x_array[], double x, size_t index_lo, size_t index_hi)
Return the index ilo of x_array such that x_array[ilo] <= x < x_array[ilo+1] in the range [index_lo,...
static int optimized_cspline_eval(const void *vstate, const double x_array[], const double y_array[], size_t size, double x, gsl_interp_accel *a, double *y, unsigned int *index_old, double *x_lo_old, double *y_lo_old, double *b_i_old, double *c_i_old, double *d_i_old)
Perform cubic spline interpolation at point x from data in x_array.
static void optimized_coeff_calc(const double c_array[], double dy, double dx, size_t index, double *b, double *c, double *d)
Return the coefficients of cubic spline interpolation between points c_array[index] and c_array[index...
static size_t optimized_gsl_interp_accel_find(gsl_interp_accel *a, const double xa[], size_t len, double x)
Return the index cache of xa such that xa[cache] <= x < xa[cache+1].
static int optimized_gsl_spline_eval_e(const gsl_spline *spline, double interptime, gsl_interp_accel *accel, double *output, unsigned int *index_old, double *x_lo_old, double *y_lo_old, double *b_i_old, double *c_i_old, double *d_i_old)
Perform cubic spline interpolation to achieve evenly-sampled data from that input data.
static vector d(const double L_norm, const double J_norm, const vector roots)
Internal function that returns the coefficients "d_0", "d_2" and "d_4" from 1703.03967 corresponding ...
char output[FILENAME_MAX]