7 #include "hyperspherical.h"
11 #define _index_tt_in_range_(index,num,flag) (flag == _TRUE_) && (index_tt >= index) && (index_tt < index+num)
13 #define _integrated_ncl_ (_index_tt_in_range_(ptr->index_tt_lensing, ppt->selection_num, ppt->has_cl_lensing_potential)) || \
14 (_index_tt_in_range_(ptr->index_tt_nc_lens, ppt->selection_num, ppt->has_nc_lens)) || \
15 (_index_tt_in_range_(ptr->index_tt_nc_g4, ppt->selection_num, ppt->has_nc_gr)) || \
16 (_index_tt_in_range_(ptr->index_tt_nc_g5, ppt->selection_num, ppt->has_nc_gr))
18 #define _nonintegrated_ncl_ (_index_tt_in_range_(ptr->index_tt_density, ppt->selection_num, ppt->has_nc_density)) || \
19 (_index_tt_in_range_(ptr->index_tt_rsd, ppt->selection_num, ppt->has_nc_rsd)) || \
20 (_index_tt_in_range_(ptr->index_tt_d0, ppt->selection_num, ppt->has_nc_rsd)) || \
21 (_index_tt_in_range_(ptr->index_tt_d1, ppt->selection_num, ppt->has_nc_rsd)) || \
22 (_index_tt_in_range_(ptr->index_tt_nc_g1, ppt->selection_num, ppt->has_nc_gr)) || \
23 (_index_tt_in_range_(ptr->index_tt_nc_g2, ppt->selection_num, ppt->has_nc_gr)) || \
24 (_index_tt_in_range_(ptr->index_tt_nc_g3, ppt->selection_num, ppt->has_nc_gr))
26 #define _get_bin_nonintegrated_ncl_(index_tt) \
27 if (_index_tt_in_range_(ptr->index_tt_density, ppt->selection_num, ppt->has_nc_density)) \
28 bin = index_tt - ptr->index_tt_density; \
29 if (_index_tt_in_range_(ptr->index_tt_rsd, ppt->selection_num, ppt->has_nc_rsd)) \
30 bin = index_tt - ptr->index_tt_rsd; \
31 if (_index_tt_in_range_(ptr->index_tt_d0, ppt->selection_num, ppt->has_nc_rsd)) \
32 bin = index_tt - ptr->index_tt_d0; \
33 if (_index_tt_in_range_(ptr->index_tt_d1, ppt->selection_num, ppt->has_nc_rsd)) \
34 bin = index_tt - ptr->index_tt_d1; \
35 if (_index_tt_in_range_(ptr->index_tt_nc_g1, ppt->selection_num, ppt->has_nc_gr)) \
36 bin = index_tt - ptr->index_tt_nc_g1; \
37 if (_index_tt_in_range_(ptr->index_tt_nc_g2, ppt->selection_num, ppt->has_nc_gr)) \
38 bin = index_tt - ptr->index_tt_nc_g2; \
39 if (_index_tt_in_range_(ptr->index_tt_nc_g3, ppt->selection_num, ppt->has_nc_gr)) \
40 bin = index_tt - ptr->index_tt_nc_g3;
42 #define _get_bin_integrated_ncl_(index_tt) \
43 if (_index_tt_in_range_(ptr->index_tt_lensing, ppt->selection_num, ppt->has_cl_lensing_potential)) \
44 bin = index_tt - ptr->index_tt_lensing; \
45 if (_index_tt_in_range_(ptr->index_tt_nc_lens, ppt->selection_num, ppt->has_nc_lens)) \
46 bin = index_tt - ptr->index_tt_nc_lens; \
47 if (_index_tt_in_range_(ptr->index_tt_nc_g4, ppt->selection_num, ppt->has_nc_gr)) \
48 bin = index_tt - ptr->index_tt_nc_g4; \
49 if (_index_tt_in_range_(ptr->index_tt_nc_g5, ppt->selection_num, ppt->has_nc_gr)) \
50 bin = index_tt - ptr->index_tt_nc_g5;
282 typedef enum {SCALAR_TEMPERATURE_0,
283 SCALAR_TEMPERATURE_1,
284 SCALAR_TEMPERATURE_2,
285 SCALAR_POLARISATION_E,
286 VECTOR_TEMPERATURE_1,
287 VECTOR_TEMPERATURE_2,
288 VECTOR_POLARISATION_E,
289 VECTOR_POLARISATION_B,
290 TENSOR_TEMPERATURE_2,
291 TENSOR_POLARISATION_E,
292 TENSOR_POLARISATION_B,
295 enum Hermite_Interpolation_Order {HERMITE3, HERMITE4, HERMITE6};
313 double * ptransfer_local
338 int transfer_perturbation_copy_sources_and_nl_corrections(
345 int transfer_perturbation_source_spline(
349 double *** sources_spline
352 int transfer_perturbation_sources_free(
359 int transfer_perturbation_sources_spline_free(
362 double *** sources_spline
400 int transfer_free_source_correspondence(
405 int transfer_source_tau_size_max(
437 double *** sources_spline,
440 short use_full_limber
443 int transfer_radial_coordinates(
458 double * source_spline,
459 double * interpolated_sources
467 double * interpolated_sources,
475 double * tau0_minus_tau,
492 double * dln_dNdz_dz);
500 double * tau0_minus_tau,
510 double * tau0_minus_tau,
519 double * tau0_minus_tau,
523 double * interpolated_sources,
542 double * tau0_minus_tau,
562 short use_full_limber
565 int transfer_use_limber(
604 double * tau0_minus_tau,
607 double tau0_minus_tau_limber,
618 double * tau0_minus_tau,
624 int transfer_can_be_neglected(
637 int transfer_late_source_can_be_neglected(
646 int transfer_select_radial_function(
654 int transfer_radial_function(
662 double * radial_function,
666 int transfer_init_HIS_from_bessel(
668 HyperInterpStruct *pHIS
671 int transfer_global_selection_read(
675 int transfer_workspace_init(
679 int perturbations_tau_size,
683 double tau0_minus_tau_cut,
684 HyperInterpStruct * pBIS
687 int transfer_workspace_free(
692 int transfer_update_HIS(
700 int transfer_get_lmax(
int (*get_xmin_generic)(
int sgnK,
716 ErrorMsg error_message);
#define _SELECTION_NUM_MAX_
Definition: perturbations.h:70
Definition: perturbations.h:98
Definition: background.h:44
Definition: thermodynamics.h:59
int transfer_compute_for_each_q(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, int **tp_of_tt, int index_q, int tau_size_max, double tau_rec, double ***pert_sources, double ***pert_sources_spline, double *window, struct transfer_workspace *ptw, short use_full_limber)
Definition: transfer.c:1810
int transfer_limber_interpolate(struct transfer *ptr, double *tau0_minus_tau, double *sources, int tau_size, double tau0_minus_tau_limber, double *S)
Definition: transfer.c:3728
int transfer_functions_at_q(struct transfer *ptr, int index_md, int index_ic, int index_tt, int index_l, double q, double *transfer_function)
Definition: transfer.c:62
int transfer_get_source_correspondence(struct perturbations *ppt, struct transfer *ptr, int **tp_of_tt)
Definition: transfer.c:1453
int transfer_compute_for_each_l(struct transfer_workspace *ptw, struct precision *ppr, struct perturbations *ppt, struct transfer *ptr, int index_q, int index_md, int index_ic, int index_tt, int index_l, double l, double q_max_bessel, radial_function_type radial_type, short use_full_limber)
Definition: transfer.c:3189
int transfer_get_k_list(struct perturbations *ppt, struct transfer *ptr, double K)
Definition: transfer.c:1344
int transfer_indices(struct precision *ppr, struct perturbations *ppt, struct transfer *ptr, double q_period, double K, int sgnK)
Definition: transfer.c:485
int transfer_source_tau_size(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, double tau_rec, double tau0, int index_md, int index_tt, int *tau_size)
Definition: transfer.c:1637
int transfer_integrate(struct perturbations *ppt, struct transfer *ptr, struct transfer_workspace *ptw, int index_q, int index_md, int index_tt, double l, int index_l, double k, radial_function_type radial_type, double *trsf)
Definition: transfer.c:3390
int transfer_selection_sampling(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, int bin, double *tau0_minus_tau, int tau_size)
Definition: transfer.c:2796
int transfer_get_q_list(struct precision *ppr, struct perturbations *ppt, struct transfer *ptr, double q_period, double K, int sgnK)
Definition: transfer.c:1032
int transfer_interpolate_sources(struct perturbations *ppt, struct transfer *ptr, double k, int index_md, int index_ic, int index_type, double *pert_source, double *pert_source_spline, double *interpolated_sources)
Definition: transfer.c:2191
int transfer_dNdz_analytic(struct transfer *ptr, double z, double *dNdz, double *dln_dNdz_dz)
Definition: transfer.c:2752
int transfer_limber2(int tau_size, struct transfer *ptr, int index_md, int index_k, double l, double k, double *tau0_minus_tau, double *sources, radial_function_type radial_type, double *trsf)
Definition: transfer.c:3815
int transfer_selection_times(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, int bin, double *tau_min, double *tau_mean, double *tau_max)
Definition: transfer.c:2988
int transfer_init(struct precision *ppr, struct background *pba, struct thermodynamics *pth, struct perturbations *ppt, struct fourier *pfo, struct transfer *ptr)
Definition: transfer.c:116
int transfer_limber(struct transfer *ptr, struct transfer_workspace *ptw, int index_md, int index_q, double l, double q, radial_function_type radial_type, double *trsf)
Definition: transfer.c:3571
int transfer_get_q_limber_list(struct precision *ppr, struct perturbations *ppt, struct transfer *ptr, double K, int sgnK)
Definition: transfer.c:1261
int transfer_lensing_sampling(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, int bin, double tau0, double *tau0_minus_tau, int tau_size)
Definition: transfer.c:2864
int transfer_source_resample(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, int bin, double *tau0_minus_tau, int tau_size, int index_md, double tau0, double *interpolated_sources, double *sources)
Definition: transfer.c:2921
int transfer_precompute_selection(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, double tau_rec, int tau_size_max, double **window)
Definition: transfer.c:4793
int transfer_selection_function(struct precision *ppr, struct perturbations *ppt, struct transfer *ptr, int bin, double z, double *selection)
Definition: transfer.c:2607
int transfer_free(struct transfer *ptr)
Definition: transfer.c:417
int transfer_get_l_list(struct precision *ppr, struct perturbations *ppt, struct transfer *ptr)
Definition: transfer.c:833
int transfer_sources(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, double *interpolated_sources, double tau_rec, double k, int index_md, int index_tt, double *sources, double *window, int tau_size_max, double *tau0_minus_tau, double *w_trapz, int *tau_size_out)
Definition: transfer.c:2276
int transfer_selection_compute(struct precision *ppr, struct background *pba, struct perturbations *ppt, struct transfer *ptr, double *selection, double *tau0_minus_tau, double *w_trapz, int tau_size, double *pvecback, double tau0, int bin)
Definition: transfer.c:3068
double angular_rescaling
Definition: transfer.h:164
double ** k_limber
Definition: transfer.h:186
int * l_size
Definition: transfer.h:156
double * cscKgen
Definition: transfer.h:257
double selection_magnification_bias[_SELECTION_NUM_MAX_]
Definition: transfer.h:92
double tau0_minus_tau_cut
Definition: transfer.h:271
double * nz_evo_nz
Definition: transfer.h:107
int index_tt_d1
Definition: transfer.h:138
double * nz_evo_z
Definition: transfer.h:106
double K
Definition: transfer.h:266
double * nz_z
Definition: transfer.h:98
short has_nz_file
Definition: transfer.h:94
int index_tt_nc_g3
Definition: transfer.h:142
double * chi
Definition: transfer.h:253
double * w_trapz
Definition: transfer.h:252
double ** transfer_limber
Definition: transfer.h:196
int index_tt_lcmb
Definition: transfer.h:132
short transfer_verbose
Definition: transfer.h:204
int nz_size
Definition: transfer.h:97
short has_nz_evo_analytic
Definition: transfer.h:103
double * nz_evo_dd_dlog_nz
Definition: transfer.h:109
int * l
Definition: transfer.h:160
int nz_evo_size
Definition: transfer.h:105
short has_nz_analytic
Definition: transfer.h:95
int index_tt_nc_g1
Definition: transfer.h:140
int index_tt_e
Definition: transfer.h:130
int tau_size
Definition: transfer.h:240
double lcmb_tilt
Definition: transfer.h:85
double * nz_evo_dlog_nz
Definition: transfer.h:108
double ** k
Definition: transfer.h:176
double selection_bias[_SELECTION_NUM_MAX_]
Definition: transfer.h:91
double * sources
Definition: transfer.h:246
FileName nz_evo_file_name
Definition: transfer.h:104
short do_lcmb_full_limber
Definition: transfer.h:180
int l_size
Definition: transfer.h:232
int ** l_size_tt
Definition: transfer.h:154
double * nz_nz
Definition: transfer.h:99
short is_allocated
Definition: transfer.h:208
int index_tt_nc_lens
Definition: transfer.h:139
int index_q_flat_approximation
Definition: transfer.h:178
int index_tt_nc_g4
Definition: transfer.h:143
size_t q_size_limber
Definition: transfer.h:182
HyperInterpStruct HIS
Definition: transfer.h:226
int HIS_allocated
Definition: transfer.h:228
ErrorMsg error_message
Definition: transfer.h:206
int index_tt_t0
Definition: transfer.h:127
int index_tt_density
Definition: transfer.h:133
double * q
Definition: transfer.h:174
HyperInterpStruct * pBIS
Definition: transfer.h:230
double * tau0_minus_tau
Definition: transfer.h:251
int index_tt_b
Definition: transfer.h:131
int md_size
Definition: transfer.h:125
int index_tt_lensing
Definition: transfer.h:134
short neglect_late_source
Definition: transfer.h:272
double * cotKgen
Definition: transfer.h:258
double * q_limber
Definition: transfer.h:184
int * tt_size
Definition: transfer.h:146
int index_tt_nc_g2
Definition: transfer.h:141
int index_tt_t1
Definition: transfer.h:128
size_t q_size
Definition: transfer.h:172
int index_tt_d0
Definition: transfer.h:137
double * interpolated_sources
Definition: transfer.h:242
FileName nz_file_name
Definition: transfer.h:96
double lcmb_rescale
Definition: transfer.h:82
int index_tt_nc_g5
Definition: transfer.h:144
short has_cls
Definition: transfer.h:117
int tau_size_max
Definition: transfer.h:241
short has_nz_evo_file
Definition: transfer.h:102
double ** transfer
Definition: transfer.h:194
int index_tt_t2
Definition: transfer.h:129
radial_function_type
Definition: transfer.h:282
int sgnK
Definition: transfer.h:267
int index_tt_rsd
Definition: transfer.h:136
double lcmb_pivot
Definition: transfer.h:88
int l_size_max
Definition: transfer.h:158
double * nz_ddnz
Definition: transfer.h:100
Definition: transfer.h:74
Definition: transfer.h:220