group_particles
Loading...
Searching...
No Matches
callback_utils_meta_init.hpp
Go to the documentation of this file.
1
7#ifndef CALLBACK_UTILS_META_INIT_HPP
8#define CALLBACK_UTILS_META_INIT_HPP
9
10#include <cassert>
11#include <functional>
12#include <memory>
13
14#include "callback.hpp"
15#include "hdf5_utils.hpp"
16
17namespace CallbackUtils {
18
21namespace meta_init
22{
23
29 template<typename AFields>
31 virtual public Callback<AFields>
32 {// {{{
33 static constexpr size_t buf_size = 64UL;
34 size_t N_inits = 0UL;
35 std::pair<void *, std::function<void(void *, std::shared_ptr<H5::H5File>)>> inits[buf_size];
36 protected :
37 void register_init (void *obj, std::function<void(void *, std::shared_ptr<H5::H5File>)> fct)
38 {
39 inits[N_inits++] = std::make_pair(obj, fct);
40 assert(N_inits < buf_size);
41 }
42 public :
43 void read_prt_meta_init (std::shared_ptr<H5::H5File> fptr) override final
44 {
45 for (size_t ii=0; ii != N_inits; ++ii)
46 inits[ii].second(inits[ii].first, fptr);
47 }
48 };// }}}
49
55 template<typename AFields>
57 virtual public Callback<AFields>
58 {// {{{
59 static constexpr size_t buf_size = 64UL;
60 size_t N_inits = 0UL;
61 std::pair<void *, std::function<void(void *, std::shared_ptr<H5::H5File>)>> inits[buf_size];
62 protected :
63 void register_init (void *obj, std::function<void(void *, std::shared_ptr<H5::H5File>)> fct)
64 {
65 inits[N_inits++] = std::make_pair(obj, fct);
66 assert(N_inits < buf_size);
67 }
68 public :
69 void read_grp_meta_init (std::shared_ptr<H5::H5File> fptr) override final
70 {
71 for (size_t ii=0; ii != N_inits; ++ii)
72 inits[ii].second(inits[ii].first, fptr);
73 }
74 };// }}}
75
84 template<typename AFields, typename Child>
86 virtual public Callback<AFields>,
87 virtual private MultiPrtMetaInitBase<AFields>
88 {// {{{
89 static void this_prt_meta_init_static (void *obj, std::shared_ptr<H5::H5File> fptr)
90 {
91 Child *p = (Child *)obj;
92 p->this_prt_meta_init(fptr);
93 }
94 protected :
98 virtual void this_prt_meta_init (std::shared_ptr<H5::H5File> fptr) = 0;
99 public :
101 {
102 MultiPrtMetaInitBase<AFields>::register_init(this, this_prt_meta_init_static);
103 }
104 };// }}}
105
114 template<typename AFields, typename Child>
116 virtual public Callback<AFields>,
117 virtual private MultiGrpMetaInitBase<AFields>
118 {// {{{
119 static void this_grp_meta_init_static (void *obj, std::shared_ptr<H5::H5File> fptr)
120 {
121 Child *p = (Child *)obj;
122 p->this_grp_meta_init(fptr);
123 }
124 protected :
128 virtual void this_grp_meta_init (std::shared_ptr<H5::H5File> fptr) = 0;
129 public :
131 {
132 MultiGrpMetaInitBase<AFields>::register_init(this, this_grp_meta_init_static);
133 }
134 };// }}}
135
138 template<typename AFields>
140 virtual public Callback<AFields>,
141 private MultiPrtMetaInit<AFields, IllustrisCosmology<AFields>>
142 {// {{{
144 void this_prt_meta_init (std::shared_ptr<H5::H5File> fptr) override final
145 {
146 #define READ(x) x = hdf5Utils::read_scalar_attr<double,double>(header, #x)
147 auto header = fptr->openGroup("/Header");
148 READ(HubbleParam);
149 READ(Omega0);
150 READ(OmegaLambda);
151 READ(OmegaBaryon);
152 READ(Redshift);
153 READ(Time);
154 header.close();
155 #undef READ
156 }
157 protected :
158 double HubbleParam,
164 };// }}}
165
168 template<typename AFields>
170 virtual public Callback<AFields>,
171 private MultiPrtMetaInit<AFields, GadgetCosmology<AFields>>
172 {// {{{
174 void this_prt_meta_init (std::shared_ptr<H5::H5File> fptr) override final
175 {
176 #define READ(x) x = hdf5Utils::read_scalar_attr<double,double>(header, #x)
177 auto header = fptr->openGroup("/Header");
178 READ(HubbleParam);
179 READ(Omega0);
180 READ(OmegaLambda);
181 READ(Redshift);
182 READ(Time);
183 header.close();
184 #undef READ
185 }
186 protected :
187 double HubbleParam,
192 };// }}}
193
196 template<typename AFields>
198 virtual public Callback<AFields>,
199 private MultiGrpMetaInit<AFields, SIMBACosmology<AFields>>
200 {// {{{
202 void this_grp_meta_init (std::shared_ptr<H5::H5File> fptr) override final
203 {
204 // for some reason SIMBA does not store OmegaBaryon in the particle chunk headers,
205 // and Redshift and Time are in the Header group of the group chunk...
206 #define READ(x) x = hdf5Utils::read_scalar_attr<double,double>(header, #x)
207
208 {
209 auto header = fptr->openGroup("/Parameters");
210 READ(HubbleParam);
211 READ(Omega0);
212 READ(OmegaLambda);
213 READ(OmegaBaryon);
214 header.close();
215 }
216
217 {
218 auto header = fptr->openGroup("/Header");
219 READ(Redshift);
220 READ(Time);
221 header.close();
222 }
223
224 #undef READ
225 }
226 protected :
227 double HubbleParam,
233 };// }}}
234
237 template<typename AFields>
239 virtual public Callback<AFields>,
240 private MultiPrtMetaInit<AFields, IllustrisMassTable<AFields>>
241 {// {{{
243 void this_prt_meta_init (std::shared_ptr<H5::H5File> fptr) override final
244 {
245 auto header = fptr->openGroup("/Header");
246 Ntypes = hdf5Utils::read_vector_attr<double,double>(header, "MassTable", MassTable);
247 header.close();
248 }
249 protected :
250 double MassTable[16];
251 size_t Ntypes;
252 };// }}}
253
254} // namespace meta_init
255
256
257} // namespace CallbackUtils
258
259
260#endif // CALLBACK_UTILS_META_INIT_HPP
Contains the abstract base class that the user should subclass from in order to define the desired fu...
stores some cosmology-related meta-data from a Gadget-type header.
Definition callback_utils_meta_init.hpp:172
double Omega0
matter density
Definition callback_utils_meta_init.hpp:188
double Redshift
redshift
Definition callback_utils_meta_init.hpp:190
double OmegaLambda
dark energy density
Definition callback_utils_meta_init.hpp:189
double Time
scale factor
Definition callback_utils_meta_init.hpp:191
double HubbleParam
Hubble parameter.
Definition callback_utils_meta_init.hpp:187
stores some cosmology-related meta-data from an Illustris-type header.
Definition callback_utils_meta_init.hpp:142
double Redshift
redshift
Definition callback_utils_meta_init.hpp:162
double HubbleParam
Hubble parameter.
Definition callback_utils_meta_init.hpp:158
double Time
scale factor
Definition callback_utils_meta_init.hpp:163
double OmegaBaryon
baryonic density
Definition callback_utils_meta_init.hpp:161
double OmegaLambda
dark energy density
Definition callback_utils_meta_init.hpp:160
double Omega0
matter density
Definition callback_utils_meta_init.hpp:159
stores the MassTable from an Illustris-type header.
Definition callback_utils_meta_init.hpp:241
double MassTable[16]
the mass table (length Ntypes), indices corresponding to particle types
Definition callback_utils_meta_init.hpp:250
size_t Ntypes
length of the mass table
Definition callback_utils_meta_init.hpp:251
base class to have multiple actions performed in Callback::read_grp_meta_init
Definition callback_utils_meta_init.hpp:58
interface class to add an action to be performed during Callback::read_grp_meta_init
Definition callback_utils_meta_init.hpp:118
virtual void this_grp_meta_init(std::shared_ptr< H5::H5File > fptr)=0
base class to have multiple actions performed in Callback::read_prt_meta_init
Definition callback_utils_meta_init.hpp:32
interface class to add an action to be performed during Callback::read_prt_meta_init
Definition callback_utils_meta_init.hpp:88
virtual void this_prt_meta_init(std::shared_ptr< H5::H5File > fptr)=0
stores some cosmology-related meta-data from a SIMBA-type header.
Definition callback_utils_meta_init.hpp:200
double Time
scale factor
Definition callback_utils_meta_init.hpp:232
double HubbleParam
Hubble parameter.
Definition callback_utils_meta_init.hpp:227
double OmegaBaryon
baryonic density
Definition callback_utils_meta_init.hpp:230
double OmegaLambda
dark energy density
Definition callback_utils_meta_init.hpp:229
double Omega0
matter density
Definition callback_utils_meta_init.hpp:228
double Redshift
redshift
Definition callback_utils_meta_init.hpp:231
some utility functions to read attributes from hdf5 files
contains classes that implement parts of the Callback base.
Definition callback_utils.hpp:35
The abstract base class the user should inherit from.
Definition callback.hpp:32