CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
transfer_module.h
1#ifndef TRANSFER_MODULE_H
2#define TRANSFER_MODULE_H
3
4#include <vector>
5
6#include "base_module.h"
7#include "input_module.h"
8
9class TransferModule : public BaseModule {
10 public:
11 TransferModule(InputModulePtr input_module,
12 BackgroundModulePtr background_module,
13 ThermodynamicsModulePtr thermodynamics_module,
14 PerturbationsModulePtr perturbations_module,
15 NonlinearModulePtr nonlinear_module);
16 ~TransferModule();
17
20
21 int index_tt_t0_;
22 int index_tt_t1_;
23 int index_tt_t2_;
24 int index_tt_e_;
25 int index_tt_b_;
26 int index_tt_lcmb_;
27 int index_tt_density_;
28 int index_tt_lensing_;
30 int index_tt_rsd_;
31 int index_tt_d0_;
32 int index_tt_d1_;
33 int index_tt_nc_lens_;
34 int index_tt_nc_g1_;
35 int index_tt_nc_g2_;
36 int index_tt_nc_g3_;
37 int index_tt_nc_g4_;
38 int index_tt_nc_g5_;
40 std::vector<int>
41 tt_size_;
43
46 int l_size_max_;
47 std::vector<std::vector<int>>
48 l_size_tt_;
49 std::vector<int>
50 l_size_;
51 std::vector<int> l_;
53
56 int q_size_;
57 std::vector<double> q_;
58 std::vector<std::vector<double>>
59 k_;
60 int index_q_flat_approximation_;
62
65 bool do_lcmb_full_limber_ = false;
66 int q_size_limber_ = 0;
67 std::vector<double> q_limber_;
68 std::vector<std::vector<double>> k_limber_;
69 std::vector<std::vector<double>> transfer_limber_;
71
74 std::vector<std::vector<double>>
75 transfer_;
77
78 private:
79 void transfer_functions_at_q(
80 int index_md, int index_ic, int index_type, int index_l, double q, double* ptransfer_local);
81 void transfer_init();
82 void transfer_indices_of_transfers(double q_period, double K, int sgnK);
83 void transfer_perturbation_copy_sources_and_nl_corrections(
84 std::vector<std::vector<double*>>& sources,
85 std::vector<std::vector<std::vector<double>>>& owned_sources);
86 void transfer_perturbation_source_spline(
87 const std::vector<std::vector<double*>>& sources,
88 std::vector<std::vector<double*>>& sources_spline_ptrs,
89 std::vector<std::vector<std::vector<double>>>& sources_spline_storage);
90 void transfer_get_l_list();
91 void transfer_get_q_list(double q_period, double K, int sgnK);
92 int transfer_get_q_list_v1(double q_period, double K, int sgnK);
93 void transfer_get_q_limber_list(double K, int sgnK);
94 void transfer_get_k_list(double K);
95 void transfer_get_source_correspondence(std::vector<std::vector<int>>& tp_of_tt);
96 void transfer_source_tau_size_max(double tau_rec, double tau0, int* tau_size_max);
97 void transfer_source_tau_size(
98 double tau_rec, double tau0, int index_md, int index_tt, int* tau_size);
99 void transfer_compute_for_each_q(int* const* tp_of_tt,
100 int index_q,
101 int tau_size_max,
102 double tau_rec,
103 double** const* sources,
104 double** const* sources_spline,
105 double* window,
106 struct transfer_workspace* ptw,
107 bool use_full_limber);
108 void transfer_radial_coordinates(struct transfer_workspace* ptw, int index_md, int index_q);
109 void transfer_interpolate_sources(double k,
110 int index_md,
111 int index_ic,
112 int index_type,
113 double* sources,
114 double* source_spline,
115 double* interpolated_sources);
116 void transfer_sources(double* interpolated_sources,
117 double tau_rec,
118 double k,
119 int index_md,
120 int index_tt,
121 double* sources,
122 double* window,
123 int tau_size_max,
124 double* tau0_minus_tau,
125 double* delta_tau,
126 int* tau_size_out);
127 void transfer_selection_function(int bin, double z, double* selection);
128 void transfer_dNdz_analytic(double z, double* dNdz, double* dln_dNdz_dz);
129 void transfer_selection_sampling(int bin, double* tau0_minus_tau, int tau_size);
130 void transfer_lensing_sampling(int bin, double tau0, double* tau0_minus_tau, int tau_size);
131 void transfer_source_resample(int bin,
132 double* tau0_minus_tau,
133 int tau_size,
134 int index_md,
135 double tau0,
136 double* interpolated_sources,
137 double* sources);
138 void transfer_selection_times(int bin, double* tau_min, double* tau_mean, double* tau_max);
139 void transfer_selection_compute(double* selection,
140 double* tau0_minus_tau,
141 double* delta_tau,
142 int tau_size,
143 double* pvecback,
144 double tau0,
145 int bin);
146 void transfer_compute_for_each_l(struct transfer_workspace* ptw,
147 int index_q,
148 int index_md,
149 int index_ic,
150 int index_tt,
151 int index_l,
152 double l,
153 double q_max_bessel,
154 radial_function_type radial_type,
155 bool use_full_limber);
156 void transfer_use_limber(
157 double q_max_bessel, int index_md, int index_tt, double q, double l, short* use_limber);
158 void transfer_integrate(struct transfer_workspace* ptw,
159 int index_q,
160 int index_md,
161 int index_tt,
162 double l,
163 int index_l,
164 double q,
165 radial_function_type radial_type,
166 double* trsf);
167 void transfer_limber(struct transfer_workspace* ptw,
168 int index_md,
169 int index_q,
170 double l,
171 double q,
172 radial_function_type radial_type,
173 double* trsf);
174 void transfer_limber_interpolate(double* tau0_minus_tau,
175 double* sources,
176 int tau_size,
177 double tau0_minus_tau_limber,
178 double* S);
179 void transfer_limber2(int tau_size,
180 int index_md,
181 int index_q,
182 double l,
183 double q,
184 double* tau0_minus_tau,
185 double* sources,
186 radial_function_type radial_type,
187 double* trsf);
188 void transfer_can_be_neglected(
189 int index_md, int index_ic, int index_tt, double ra_rec, double q, double l, short* neglect);
190 void transfer_late_source_can_be_neglected(int index_md, int index_tt, double l, short* neglect);
191 void transfer_select_radial_function(int index_md,
192 int index_tt,
193 radial_function_type* radial_type);
194 void transfer_radial_function(struct transfer_workspace* ptw,
195 double k,
196 int index_q,
197 int index_l,
198 int x_size,
199 double* radial_function,
200 radial_function_type radial_type);
201 int transfer_init_HIS_from_bessel(HyperInterpStruct* pHIS);
202 void transfer_global_selection_read();
203 void transfer_workspace_init(struct transfer_workspace* ptw,
204 int perturb_tau_size,
205 int tau_size_max,
206 double K,
207 int sgnK,
208 double tau0_minus_tau_cut,
209 HyperInterpStruct* pBIS);
210 void transfer_update_HIS(struct transfer_workspace* ptw, int index_q, double tau0);
211 void transfer_get_lmax(void (*get_xmin_generic)(int sgnK,
212 int l,
213 double nu,
214 double xtol,
215 double phiminabs,
216 double* x_nonzero,
217 int* fevals),
218 int sgnK,
219 double nu,
220 int* lvec,
221 int lsize,
222 double phiminabs,
223 double xmax,
224 double xtol,
225 int* index_l_left,
226 int* index_l_right);
227 void transfer_precompute_selection(double tau_rec, int tau_size_max, std::vector<double>& window);
228 void transfer_f_evo(double* pvecback, int last_index, double cotKgen, double* f_evo);
229
230 BackgroundModulePtr background_module_;
231 ThermodynamicsModulePtr thermodynamics_module_;
232 PerturbationsModulePtr perturbations_module_;
233 NonlinearModulePtr nonlinear_module_;
234
235 bool has_cls_;
236 int md_size_;
238 int nz_size_;
239 std::vector<double> nz_z_;
240 std::vector<double> nz_nz_;
241 std::vector<double> nz_ddnz_;
243 int nz_evo_size_;
244 std::vector<double> nz_evo_z_;
245 std::vector<double> nz_evo_nz_;
246 std::vector<double> nz_evo_dlog_nz_;
247 std::vector<double>
248 nz_evo_dd_dlog_nz_;
249};
250
251#endif //TRANSFER_MODULE_H
radial_function_type
Definition transfer.h:191
Definition transfer.h:116