22 #define UNUSED __attribute__ ((unused))
37 #include <gsl/gsl_errno.h>
38 #include <gsl/gsl_bspline.h>
39 #include <gsl/gsl_blas.h>
40 #include <gsl/gsl_min.h>
41 #include <gsl/gsl_spline.h>
42 #include <gsl/gsl_complex_math.h>
43 #include <lal/Units.h>
44 #include <lal/SeqFactories.h>
45 #include <lal/LALConstants.h>
46 #include <lal/XLALError.h>
47 #include <lal/FrequencySeries.h>
49 #include <lal/StringInput.h>
50 #include <lal/Sequence.h>
51 #include <lal/LALStdio.h>
52 #include <lal/FileIO.h>
53 #include <lal/SphericalHarmonics.h>
54 #include <lal/LALSimInspiral.h>
55 #include <lal/LALSimIMR.h>
59 #include <lal/LALConfig.h>
60 #ifdef LAL_PTHREAD_LOCK
74 #ifdef LAL_PTHREAD_LOCK
75 static pthread_once_t NRSur4d2s_is_initialized = PTHREAD_ONCE_INIT;
89 typedef struct tagSplineData5d
131 static void err_handler(
const char *reason,
const char *
file,
int line,
int gsl_errno);
151 gsl_vector *nodes_re,
156 NRSurrogateData_submodel **submodel,
188 NRSurrogateData_submodel *modeData,
190 gsl_vector *nodes_re,
191 gsl_vector *nodes_im,
255 static void err_handler(
const char *reason,
const char *
file,
int line,
int gsl_errno) {
279 for (
int i0=0; i0<4; i0++) {
281 for (
int i1=0; i1<4; i1++) {
283 for (
int i2=0; i2<4; i2++) {
285 for (
int i3=0; i3<4; i3++) {
287 for (
int i4=0; i4<4; i4++) {
289 double c = gsl_vector_get(v, (((ii0*
nc[1] + ii1)*
nc[2] + ii2)*
nc[3] + ii3)*
nc[4] + ii4);
290 sum +=
c * gsl_vector_get(B0, i0) * gsl_vector_get(B1, i1) * gsl_vector_get(B2, i2) *
291 gsl_vector_get(B3, i3) * gsl_vector_get(B4, i4);
339 size_t name_length = 22;
340 if (i_mode > 9) name_length = 23;
341 char *dataset_name = malloc(name_length);
343 snprintf(dataset_name, name_length,
"NRSurrogate_cre_%d", i_mode);
344 ret |= ReadHDF5RealVectorDataset(
file, dataset_name, &cvec_re);
346 snprintf(dataset_name, name_length,
"NRSurrogate_cim_%d", i_mode);
347 ret |= ReadHDF5RealVectorDataset(
file, dataset_name, &cvec_im);
349 snprintf(dataset_name, name_length,
"NRSurrogate_EIr_%d.dat", i_mode);
350 ret |= ReadHDF5RealMatrixDataset(
file, dataset_name, &EI_re);
352 snprintf(dataset_name, name_length,
"NRSurrogate_EIi_%d.dat", i_mode);
353 ret |= ReadHDF5RealMatrixDataset(
file, dataset_name, &EI_im);
375 const size_t nbreak_0 =
nc[0]-2;
376 const size_t nbreak_1 =
nc[1]-2;
377 const size_t nbreak_2 =
nc[2]-2;
378 const size_t nbreak_3 =
nc[3]-2;
379 const size_t nbreak_4 =
nc[4]-2;
382 gsl_bspline_workspace *bw_x0 = gsl_bspline_alloc(4, nbreak_0);
383 gsl_bspline_workspace *bw_x1 = gsl_bspline_alloc(4, nbreak_1);
384 gsl_bspline_workspace *bw_x2 = gsl_bspline_alloc(4, nbreak_2);
385 gsl_bspline_workspace *bw_x3 = gsl_bspline_alloc(4, nbreak_3);
386 gsl_bspline_workspace *bw_x4 = gsl_bspline_alloc(4, nbreak_4);
389 gsl_vector *breakpts_0 = gsl_vector_alloc(nbreak_0);
390 gsl_vector *breakpts_1 = gsl_vector_alloc(nbreak_1);
391 gsl_vector *breakpts_2 = gsl_vector_alloc(nbreak_2);
392 gsl_vector *breakpts_3 = gsl_vector_alloc(nbreak_3);
393 gsl_vector *breakpts_4 = gsl_vector_alloc(nbreak_4);
395 gsl_vector_set(breakpts_0,
i, x0[
i]);
397 gsl_vector_set(breakpts_1,
i, x1[
i]);
399 gsl_vector_set(breakpts_2,
i, x2[
i]);
401 gsl_vector_set(breakpts_3,
i, x3[
i]);
403 gsl_vector_set(breakpts_4,
i, x4[
i]);
406 gsl_bspline_knots(breakpts_0, bw_x0);
407 gsl_bspline_knots(breakpts_1, bw_x1);
408 gsl_bspline_knots(breakpts_2, bw_x2);
409 gsl_bspline_knots(breakpts_3, bw_x3);
410 gsl_bspline_knots(breakpts_4, bw_x4);
412 gsl_vector_free(breakpts_0);
413 gsl_vector_free(breakpts_1);
414 gsl_vector_free(breakpts_2);
415 gsl_vector_free(breakpts_3);
416 gsl_vector_free(breakpts_4);
418 (*splinedata)->bw_x0=bw_x0;
419 (*splinedata)->bw_x1=bw_x1;
420 (*splinedata)->bw_x2=bw_x2;
421 (*splinedata)->bw_x3=bw_x3;
422 (*splinedata)->bw_x4=bw_x4;
450 gsl_vector *nodes_re,
455 gsl_vector *B0 = gsl_vector_calloc(4);
456 gsl_vector *B1 = gsl_vector_calloc(4);
457 gsl_vector *B2 = gsl_vector_calloc(4);
458 gsl_vector *B3 = gsl_vector_calloc(4);
459 gsl_vector *B4 = gsl_vector_calloc(4);
461 size_t is0, is1, is2, is3, is4;
462 size_t ie0, ie1, ie2, ie3, ie4;
477 for (
int k=0; k<
n_nodes; k++) {
479 gsl_vector v_re = gsl_vector_subvector(cvec_re, k*
N,
N).vector;
480 gsl_vector v_im = gsl_vector_subvector(cvec_im, k*
N,
N).vector;
484 is0, is1, is2, is3, is4,
nc);
488 is0, is1, is2, is3, is4,
nc);
489 gsl_vector_set(nodes_re, k, node_re);
490 gsl_vector_set(nodes_im, k, node_im);
504 NRSurrogateData_submodel **submodel,
513 if(!submodel) exit(1);
516 *submodel =
XLALCalloc(1,
sizeof(NRSurrogateData_submodel));
523 (*submodel)->cvec_re = gsl_vector_calloc(
N*
n_nodes);
524 if ((*submodel)->cvec_re == NULL)
526 (*submodel)->cvec_im = gsl_vector_calloc(
N*
n_nodes);
527 if ((*submodel)->cvec_im == NULL)
530 if ((*submodel)->EI_re == NULL)
533 if ((*submodel)->EI_im == NULL)
537 printf(
"Loading mode %d...\n", i_mode);
538 ret=
load_data_sub(i_mode,
file, (*submodel)->cvec_re, (*submodel)->cvec_im, (*submodel)->EI_re, (*submodel)->EI_im);
545 if(submodel->cvec_re) gsl_vector_free(submodel->cvec_re);
546 if(submodel->cvec_im) gsl_vector_free(submodel->cvec_im);
547 if(submodel->EI_re) gsl_matrix_free(submodel->EI_re);
548 if(submodel->EI_im) gsl_matrix_free(submodel->EI_im);
556 XLALPrintError(
"WARNING: You tried to setup the NRSurrogate model that was already initialised. Ignoring\n");
560 printf(
"Loading NRSur4d2s_FDROM data...\n");
570 int n_nodes,
n_freqs, n_q, n_chi1, n_chi1theta, n_chi1phi, n_chi2;
582 n_q = (int) tmp_param;
585 n_chi1 = (int) tmp_param;
588 n_chi1theta = (int) tmp_param;
591 n_chi1phi = (int) tmp_param;
594 n_chi2 = (int) tmp_param;
596 data->nc = (
int *) malloc(5*
sizeof(
double));
598 data->nc[1] = n_chi1+2;
599 data->nc[2] = n_chi1theta+2;
600 data->nc[3] = n_chi1phi+2;
601 data->nc[4] = n_chi2+2;
608 data->qvec = (
double *)malloc(n_q*
sizeof(
double));
613 data->chi1vec = (
double *)malloc(n_chi1*
sizeof(
double));
618 data->chi1thetavec = (
double *)malloc(n_chi1theta*
sizeof(
double));
623 data->chi1phivec = (
double *)malloc(n_chi1phi*
sizeof(
double));
628 data->chi2vec = (
double *)malloc(n_chi2*
sizeof(
double));
672 if (ret==
XLAL_SUCCESS) printf(
"Successfully loaded all modes!\n");
676 ret |= ReadHDF5RealVectorDataset(
file,
"freqs", &(
data->fEI));
690 printf(
"Done setting up\n");
733 if(
data->fEI) gsl_vector_free(
data->fEI);
735 if(
data->chi1vec) free(
data->chi1vec);
736 if(
data->chi1thetavec) free(
data->chi1thetavec);
737 if(
data->chi1phivec) free(
data->chi1thetavec);
738 if(
data->chi2vec) free(
data->chi2vec);
758 NRSurrogateData_submodel *modeData,
760 gsl_vector *nodes_re,
761 gsl_vector *nodes_im,
770 gsl_blas_dgemv(CblasTrans, 1.0, modeData->EI_re, nodes_re, 0., mode_re);
771 gsl_blas_dgemv(CblasTrans, -1., modeData->EI_im, nodes_im, 1., mode_re);
772 gsl_blas_dgemv(CblasTrans, 1.0, modeData->EI_im, nodes_re, 0., mode_im);
773 gsl_blas_dgemv(CblasTrans, 1.0, modeData->EI_re, nodes_im, 1., mode_im);
777 double c_re = creal(swsh_coef);
778 double c_im = cimag(swsh_coef);
779 gsl_blas_daxpy(c_re, mode_re, h_re);
780 gsl_blas_daxpy(-1*c_im, mode_im, h_re);
781 gsl_blas_daxpy(c_re, mode_im, h_im);
782 gsl_blas_daxpy(c_im, mode_re, h_im);
802 gsl_vector *h_full_re = gsl_vector_calloc(
n_freqs);
803 gsl_vector *h_full_im = gsl_vector_calloc(
n_freqs);
807 gsl_vector *nodes_re = gsl_vector_calloc(
n_nodes);
808 gsl_vector *nodes_im = gsl_vector_calloc(
n_nodes);
809 gsl_vector *mode_re = gsl_vector_calloc(
n_freqs);
810 gsl_vector *mode_im = gsl_vector_calloc(
n_freqs);
814 double phi_sphere = 0.5*
LAL_PI - phiRef;
815 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 2, -2,
n_nodes,
nc, h_full_re, h_full_im,
817 nodes_re, nodes_im, mode_re, mode_im);
818 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 2, -1,
n_nodes,
nc, h_full_re, h_full_im,
820 nodes_re, nodes_im, mode_re, mode_im);
821 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 2, 0,
n_nodes,
nc, h_full_re, h_full_im,
823 nodes_re, nodes_im, mode_re, mode_im);
824 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 2, 1,
n_nodes,
nc, h_full_re, h_full_im,
826 nodes_re, nodes_im, mode_re, mode_im);
827 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 2, 2,
n_nodes,
nc, h_full_re, h_full_im,
829 nodes_re, nodes_im, mode_re, mode_im);
830 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, -3,
n_nodes,
nc, h_full_re, h_full_im,
832 nodes_re, nodes_im, mode_re, mode_im);
833 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, -2,
n_nodes,
nc, h_full_re, h_full_im,
835 nodes_re, nodes_im, mode_re, mode_im);
836 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, -1,
n_nodes,
nc, h_full_re, h_full_im,
838 nodes_re, nodes_im, mode_re, mode_im);
839 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, 0,
n_nodes,
nc, h_full_re, h_full_im,
841 nodes_re, nodes_im, mode_re, mode_im);
842 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, 1,
n_nodes,
nc, h_full_re, h_full_im,
844 nodes_re, nodes_im, mode_re, mode_im);
845 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, 2,
n_nodes,
nc, h_full_re, h_full_im,
847 nodes_re, nodes_im, mode_re, mode_im);
848 AddModeContribution(
q, chi1mag, chi1theta, chi1phi, chi2z, inclination, phi_sphere, 3, 3,
n_nodes,
nc, h_full_re, h_full_im,
850 nodes_re, nodes_im, mode_re, mode_im);
852 gsl_vector_free(mode_re);
853 gsl_vector_free(mode_im);
854 gsl_vector_free(nodes_re);
855 gsl_vector_free(nodes_im);
860 gsl_vector h_negf_re = gsl_vector_subvector(h_full_re, 0, n).vector;
861 gsl_vector h_negf_im = gsl_vector_subvector(h_full_im, 0, n).vector;
862 gsl_vector h_posf_re = gsl_vector_subvector(h_full_re, i0, n).vector;
863 gsl_vector h_posf_im = gsl_vector_subvector(h_full_im, i0, n).vector;
864 gsl_vector_reverse(&h_negf_re);
865 gsl_vector_reverse(&h_negf_im);
870 gsl_vector *hp_re = gsl_vector_alloc(n);
871 gsl_vector *hp_im = gsl_vector_alloc(n);
872 gsl_vector *hc_re = gsl_vector_alloc(n);
873 gsl_vector *hc_im = gsl_vector_alloc(n);
875 gsl_vector_memcpy(hp_re, &h_posf_re);
876 gsl_blas_daxpy(1.0, &h_negf_re, hp_re);
877 gsl_blas_dscal(0.5, hp_re);
879 gsl_vector_memcpy(hp_im, &h_posf_im);
880 gsl_blas_daxpy(-1.0, &h_negf_im, hp_im);
881 gsl_blas_dscal(0.5, hp_im);
883 gsl_vector_memcpy(hc_im, &h_posf_re);
884 gsl_blas_daxpy(-1.0, &h_negf_re, hc_im);
885 gsl_blas_dscal(0.5, hc_im);
887 gsl_vector_memcpy(hc_re, &h_posf_im);
888 gsl_blas_daxpy(1.0, &h_negf_im, hc_re);
889 gsl_blas_dscal(-0.5, hc_re);
893 const double *model_freqs = gsl_vector_const_ptr(&
fEI, 0);
894 gsl_interp_accel *acc = gsl_interp_accel_alloc();
895 gsl_spline *spl_hp_re = gsl_spline_alloc(gsl_interp_cspline, n);
896 gsl_spline *spl_hp_im = gsl_spline_alloc(gsl_interp_cspline, n);
897 gsl_spline *spl_hc_re = gsl_spline_alloc(gsl_interp_cspline, n);
898 gsl_spline *spl_hc_im = gsl_spline_alloc(gsl_interp_cspline, n);
899 gsl_spline_init(spl_hp_re, model_freqs, gsl_vector_const_ptr(hp_re, 0), n);
900 gsl_spline_init(spl_hp_im, model_freqs, gsl_vector_const_ptr(hp_im, 0), n);
901 gsl_spline_init(spl_hc_re, model_freqs, gsl_vector_const_ptr(hc_re, 0), n);
902 gsl_spline_init(spl_hc_im, model_freqs, gsl_vector_const_ptr(hc_im, 0), n);
905 double a0 = Mtot_sec * Mtot_sec *
LAL_C_SI / distance;
907 size_t npts = freqs->
length;
910 memset((*hptilde)->data->data, 0, npts *
sizeof(
COMPLEX16));
911 memset((*hctilde)->data->data, 0, npts *
sizeof(
COMPLEX16));
912 double f_min = model_freqs[0];
913 double f_max = model_freqs[n-1];
916 double f = freqs->
data[
i];
918 (*hptilde)->data->data[
i] = a0*(gsl_spline_eval(spl_hp_re, f, acc) + I*gsl_spline_eval(spl_hp_im, f, acc));
919 (*hctilde)->data->data[
i] = a0*(gsl_spline_eval(spl_hc_re, f, acc) + I*gsl_spline_eval(spl_hc_im, f, acc));
924 gsl_vector_free(h_full_re);
925 gsl_vector_free(h_full_im);
927 gsl_vector_free(hp_re);
928 gsl_vector_free(hp_im);
929 gsl_vector_free(hc_re);
930 gsl_vector_free(hc_im);
931 gsl_spline_free(spl_hp_re);
932 gsl_spline_free(spl_hp_im);
933 gsl_spline_free(spl_hc_re);
934 gsl_spline_free(spl_hc_im);
935 gsl_interp_accel_free(acc);
941 struct tagCOMPLEX16FrequencySeries **hptilde,
942 struct tagCOMPLEX16FrequencySeries **hctilde,
977 double Mtot = mass1+mass2;
979 double q = mass1/mass2;
983 double chi1mag = sqrt(S1x*S1x + S1y*S1y + S1z*S1z);
984 double chi1theta = 0;
986 if (chi1mag > 0.) chi1theta = acos(S1z/chi1mag);
987 if (fabs(S1y) + fabs(S1x) > 0.) chi1phi = atan2(S1y*cos(phiRef) - S1x*sin(phiRef), S1x*cos(phiRef) + S1y*sin(phiRef));
988 if (chi1phi < 0.) chi1phi += 2*
LAL_PI;
992 #ifdef LAL_PTHREAD_LOCK
1001 phiRef, distance, inclination, Mtot_sec,
q, chi1mag, chi1theta, chi1phi, chi2z, freqs);
1021 struct tagCOMPLEX16FrequencySeries **hptilde,
1022 struct tagCOMPLEX16FrequencySeries **hctilde,
1062 double Mtot = mass1+mass2;
1064 double q = mass1/mass2;
1067 double chi1mag = sqrt(S1x*S1x + S1y*S1y + S1z*S1z);
1068 double chi1theta = 0;
1070 if (chi1mag > 0.) chi1theta = acos(S1z/chi1mag);
1071 if (fabs(S1y) + fabs(S1x) > 0.) chi1phi = atan2(S1y*cos(phiRef) - S1x*sin(phiRef), S1x*cos(phiRef) + S1y*sin(phiRef));
1072 if (chi1phi < 0.) chi1phi += 2*
LAL_PI;
1074 if (fabs(S2y) + fabs(S2x) > 0.)
XLAL_ERROR(
XLAL_FAILURE,
"NRsurrogate does not support x or y spin components on the smaller BH\n");
1077 #ifdef LAL_PTHREAD_LOCK
1095 double deltaF_dimless = deltaF*Mtot_sec;
1097 for (
i=0;
i<i0;
i++) {
1099 freqs->
data[
i] = 0.0;
1101 for (
i=i0;
i<nf;
i++) {
1102 freqs->
data[
i] =
i*deltaF_dimless;
1105 phiRef, distance, inclination, Mtot_sec,
q, chi1mag, chi1theta, chi1phi, chi2z, freqs);
1121 char *dir = dirname(
path);
struct tagLALH5File LALH5File
struct tagLALH5Dataset LALH5Dataset
static void AddModeContribution(double q, double chi1mag, double chi1theta, double chi1phi, double chi2z, double spheretheta, double spherephi, int swsh_L, int swsh_m, int n_nodes, int *nc, gsl_vector *h_re, gsl_vector *h_im, NRSurrogateData_submodel *modeData, SplineData5d *splinedata, gsl_vector *nodes_re, gsl_vector *nodes_im, gsl_vector *mode_re, gsl_vector *mode_im)
Evaluates one mode of the surrogate model and adds it to the waveform Real and imaginary parts used d...
static int NRSurrogateData_Init(NRSurrogateData *data, const char dir[])
static bool NRSurrogate_IsSetup(void)
Helper function to check if the NRSurrogate model has been initialised.
static NRSurrogateData __lalsim_NRSurrogate_data
static int NRSurrogateCore(COMPLEX16FrequencySeries **hptilde, COMPLEX16FrequencySeries **hctilde, double phiRef, double distance, double inclination, double Mtot_sec, double q, double chi1mag, double chi1theta, double chi1phi, double chi2z, const REAL8Sequence *freqs)
Core function for computing the ROM waveform.
int XLALSimNRSur4d2sFrequencySequence(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, const REAL8Sequence *freqs, REAL8 phiRef, REAL8 distance, REAL8 inclination, REAL8 m1SI, REAL8 m2SI, REAL8 S1x, REAL8 S1y, REAL8 S1z, REAL8 S2x, REAL8 S2y, REAL8 S2z)
static void err_handler(const char *reason, const char *file, int line, int gsl_errno)
static int TP_Spline_interpolation_5d(REAL8 x0, REAL8 x1, REAL8 x2, REAL8 x3, REAL8 x4, int n_nodes, int *nc, gsl_vector *cvec_re, gsl_vector *cvec_im, SplineData5d *splinedata, gsl_vector *nodes_re, gsl_vector *nodes_im)
static void NRSurrogateData_Cleanup(NRSurrogateData *data)
static const double CHI1_MAG_MAX
static void SplineData5d_Destroy(SplineData5d *splinedata)
static const double CHI2_MAX
static int NRSurrogateData_Init_submodel(NRSurrogateData_submodel **submodel, LALH5File *file, const int i_mode, int n_nodes, int n_freqs, int *nc)
static int NRSurrogate_Init(const char dir[])
Setup NRSurrogate model using data files installed in dir.
static REAL8 Interpolate_Coefficent_Tensor_5d(gsl_vector *v, gsl_vector *B0, gsl_vector *B1, gsl_vector *B2, gsl_vector *B3, gsl_vector *B4, size_t is0, size_t is1, size_t is2, size_t is3, size_t is4, int *nc)
static const double Q_MIN
static void NRSurrogate_Init_LALDATA(void)
int XLALSimNRSur4d2s(struct tagCOMPLEX16FrequencySeries **hptilde, struct tagCOMPLEX16FrequencySeries **hctilde, REAL8 phiRef, REAL8 deltaF, REAL8 fLow, REAL8 fHigh, REAL8 distance, REAL8 inclination, REAL8 m1SI, REAL8 m2SI, REAL8 S1x, REAL8 S1y, REAL8 S1z, REAL8 S2x, REAL8 S2y, REAL8 S2z)
Compute waveform in LAL format for the NRSur4d2s_FDROM NR surrogate model.
static void NRSurrogateData_Cleanup_submodel(NRSurrogateData_submodel *submodel)
static const double Q_MAX
static const double CHI2_MIN
static int load_data_sub(const int i_mode, LALH5File *file, gsl_vector *cvec_re, gsl_vector *cvec_im, gsl_matrix *EI_re, gsl_matrix *EI_im)
static const char NRSUR4D2S_DATAFILE[]
static void SplineData5d_Init(SplineData5d **splinedata, int *nc, double *x1, double *x2, double *x3, double *x4, double *x5)
static double double delta
Auxiliary functions for SEOBNRv1/v2 reduced order modeling codes in LALSimIMRSEOBNRv2ROMDoubleSpin....
static REAL8 sum(REAL8 *arr1, REAL8 *arr2, int k)
#define XLAL_FILE_RESOLVE_PATH(fname)
COMPLEX16FrequencySeries * XLALCreateCOMPLEX16FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
void XLALH5FileClose(LALH5File UNUSED *file)
LALH5File * XLALH5FileOpen(const char UNUSED *path, const char UNUSED *mode)
LALH5Dataset * XLALH5DatasetRead(LALH5File UNUSED *file, const char UNUSED *name)
int XLALH5DatasetQueryData(void UNUSED *data, LALH5Dataset UNUSED *dset)
void * XLALCalloc(size_t m, size_t n)
void * XLALMalloc(size_t n)
void XLALDestroyREAL8Sequence(REAL8Sequence *sequence)
REAL8Sequence * XLALCreateREAL8Sequence(size_t length)
COMPLEX16 XLALSpinWeightedSphericalHarmonic(REAL8 theta, REAL8 phi, int s, int l, int m)
const LALUnit lalStrainUnit
#define XLAL_ERROR_VOID(...)
int int int XLALPrintInfo(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
int pthread_once(pthread_once_t *once_control, void(*init_routine)(void))
gsl_bspline_workspace * bw_x4
gsl_bspline_workspace * bw_x0
gsl_bspline_workspace * bw_x3
gsl_bspline_workspace * bw_x2
gsl_bspline_workspace * bw_x1
NRSurrogateData_submodel * mode_2m2
NRSurrogateData_submodel * mode_3m1
NRSurrogateData_submodel * mode_3p1
NRSurrogateData_submodel * mode_3p0
NRSurrogateData_submodel * mode_3p2
NRSurrogateData_submodel * mode_3p3
NRSurrogateData_submodel * mode_3m2
NRSurrogateData_submodel * mode_2p1
NRSurrogateData_submodel * mode_3m3
NRSurrogateData_submodel * mode_2p0
NRSurrogateData_submodel * mode_2m1
NRSurrogateData_submodel * mode_2p2
SplineData5d * splinedata