CLASSpp Manual
Cosmology reference and developer manual
Loading...
Searching...
No Matches
nonlinear_module.h
1#ifndef NONLINEAR_MODULE_H
2#define NONLINEAR_MODULE_H
3
4#include <vector>
5
6#include "base_module.h"
7#include "input_module.h"
8
9class NonlinearModule : public BaseModule {
10 public:
11 NonlinearModule(InputModulePtr input_module,
12 BackgroundModulePtr background_module,
13 PerturbationsModulePtr perturbations_module,
14 PrimordialModulePtr primordial_module);
15 ~NonlinearModule();
16
17 /* external functions (meant to be called from other modules) */
18 void nonlinear_pk_at_z(enum linear_or_logarithmic mode,
19 enum pk_outputs pk_output,
20 double z,
21 int index_pk,
22 double* out_pk,
23 double* out_pk_ic) const;
24 void nonlinear_pks_at_z(enum linear_or_logarithmic mode,
25 enum pk_outputs pk_output,
26 double z,
27 double* out_pk,
28 double* out_pk_ic,
29 double* out_pk_cb,
30 double* out_pk_cb_ic) const;
31 void nonlinear_pk_at_k_and_z(enum pk_outputs pk_output,
32 double k,
33 double z,
34 int index_pk,
35 double* out_pk,
36 double* out_pk_ic) const;
37 void nonlinear_pks_at_k_and_z(enum pk_outputs pk_output,
38 double k,
39 double z,
40 double* out_pk,
41 double* out_pk_ic,
42 double* out_pk_cb,
43 double* out_pk_cb_ic) const;
44 void nonlinear_pks_at_kvec_and_zvec(enum pk_outputs pk_output,
45 double* kvec,
46 int kvec_size,
47 double* zvec,
48 int zvec_size,
49 double* out_pk,
50 double* out_pk_cb) const;
51 void nonlinear_sigmas_at_z(
52 double R, double z, int index_pk, enum out_sigmas sigma_output, double* result) const;
53 void nonlinear_pk_tilt_at_k_and_z(
54 enum pk_outputs pk_output, double k, double z, int index_pk, double* pk_tilt) const;
55 void nonlinear_k_nl_at_z(double z, double* k_nl, double* k_nl_cb) const;
56
57 // Deprecated:
58 void nonlinear_sigma_at_z(
59 double R, double z, int index_pk, double k_per_decade, double* result) const;
60
61 int k_size_;
62 std::vector<double> ln_k_;
64 std::vector<std::vector<double>>
65 nl_corr_density_;
67 std::vector<short>
68 is_non_zero_;
69 int ic_size_;
70 int ic_ic_size_;
71 bool has_pk_m_;
72 bool has_pk_cb_;
74 int index_pk_m_;
75 int index_pk_cb_;
76 int pk_size_;
77 std::vector<double> sigma8_;
79 private:
80 /* internal functions */
81 void nonlinear_init();
82 void nonlinear_indices();
83 void nonlinear_get_k_list();
84 void nonlinear_get_tau_list();
85 void nonlinear_get_source(int index_k,
86 int index_ic,
87 int index_tp,
88 int index_tau,
89 const std::vector<std::vector<double>>& sources,
90 double* source);
91 void nonlinear_pk_linear(int index_pk, int index_tau, int k_size, double* lnpk, double* lnpk_ic);
92 void nonlinear_sigmas(double R,
93 double* lnpk_l,
94 double* ddlnpk_l,
95 int k_size,
96 double k_per_decade,
97 enum out_sigmas sigma_output,
98 double* result) const;
99 void nonlinear_halofit(int index_pk,
100 double tau,
101 double* pk_nl,
102 double* lnpk_l,
103 double* ddlnpk_l,
104 double* k_nl,
105 short* halofit_found_k_max);
106 void nonlinear_halofit_integrate(double* integrand_array,
107 int integrand_size,
108 int ia_size,
109 int index_ia_k,
110 int index_ia_pk,
111 int index_ia_sum,
112 int index_ia_ddsum,
113 double R,
114 enum halofit_integral_type type,
115 double* sum);
116 void nonlinear_hmcode(int index_pk,
117 int index_tau,
118 double tau,
119 double* pk_nl,
120 std::vector<std::vector<double>>& lnpk_l,
121 std::vector<std::vector<double>>& ddlnpk_l,
122 double* k_nl,
123 short* halofit_found_k_max,
125 void nonlinear_hmcode_workspace_init(nonlinear_workspace* pnw);
126 void nonlinear_hmcode_dark_energy_correction(nonlinear_workspace* pnw);
127 void nonlinear_hmcode_baryonic_feedback();
128 void nonlinear_hmcode_fill_sigtab(int index_tau,
129 double* lnpk_l,
130 double* ddlnpk_l,
132 void nonlinear_hmcode_fill_growtab(nonlinear_workspace* pnw);
133 void nonlinear_hmcode_growint(double a, double w, double wa, double* growth);
134 void nonlinear_hmcode_window_nfw(double k, double rv, double c, double* window_nfw);
135 void nonlinear_hmcode_halomassfunction(double nu, double* hmf);
136 void nonlinear_hmcode_sigma8_at_z(double z,
137 double* sigma_8,
138 double* sigma_8_cb,
140 void nonlinear_hmcode_sigmadisp_at_z(double z,
141 double* sigma_disp,
142 double* sigma_disp_cb,
144 void nonlinear_hmcode_sigmadisp100_at_z(double z,
145 double* sigma_disp_100,
146 double* sigma_disp_100_cb,
148 void nonlinear_hmcode_sigmaprime_at_z(double z,
149 double* sigma_prime,
150 double* sigma_prime_cb,
152 void prepare_pk_eq();
153
154 BackgroundModulePtr background_module_;
155 PerturbationsModulePtr perturbations_module_;
156 PrimordialModulePtr primordial_module_;
157
161
162 bool has_pk_matter_;
164 std::vector<double> k_;
166 std::vector<double> ln_tau_;
172 int ln_tau_size_;
174 std::vector<std::vector<double>> ln_pk_ic_l_;
190 std::vector<std::vector<double>>
191 ddln_pk_ic_l_;
201 std::vector<std::vector<double>>
202 ln_pk_l_;
207 std::vector<std::vector<double>>
208 ddln_pk_l_;
210 std::vector<std::vector<double>>
211 ln_pk_nl_;
216 std::vector<std::vector<double>>
217 ddln_pk_nl_;
220
224
225 int k_size_extra_;
227 int tau_size_;
228 std::vector<double> tau_;
231 std::vector<std::vector<double>>
232 k_nl_;
234 int index_tau_min_nl_;
238
242
243 int index_md_scalars_;
248
252
253 /* and two redundent but useful indices: */
254
255 int index_pk_total_;
257 int index_pk_cluster_;
260 double
261 c_min_;
262 double eta_0_;
265
269
270 int index_pk_eq_w_;
271 int index_pk_eq_Omega_m_;
272 int pk_eq_size_;
273 int pk_eq_tau_size_;
274 std::vector<double> pk_eq_tau_;
275 std::vector<double> pk_eq_w_and_Omega_;
276 std::vector<double> pk_eq_ddw_and_ddOmega_;
279};
280
281#endif //NONLINEAR_MODULE_H
Definition nonlinear.h:89
linear_or_logarithmic
Definition primordial.h:23