Line data Source code
1 : // *****************************************************************************
2 : /*!
3 : \file src/Control/InciterConfig.hpp
4 : \copyright 2012-2015 J. Bakosi,
5 : 2016-2018 Los Alamos National Security, LLC.,
6 : 2019-2021 Triad National Security, LLC.,
7 : 2022-2025 J. Bakosi
8 : All rights reserved. See the LICENSE file for details.
9 : \brief Inciter confguration (parsed from cmdline and control file)
10 : */
11 : // *****************************************************************************
12 : #pragma once
13 :
14 : #include <getopt.h>
15 :
16 : #include "TaggedTuple.hpp"
17 :
18 : namespace tag {
19 268 : DEFTAG( commit );
20 268 : DEFTAG( input );
21 268 : DEFTAG( control );
22 268 : DEFTAG( output );
23 268 : DEFTAG( diag );
24 268 : DEFTAG( diag_iter );
25 268 : DEFTAG( diag_precision );
26 268 : DEFTAG( diag_format );
27 268 : DEFTAG( checkpoint );
28 268 : DEFTAG( quiescence );
29 268 : DEFTAG( virt );
30 268 : DEFTAG( nonblocking );
31 268 : DEFTAG( benchmark );
32 268 : DEFTAG( feedback );
33 268 : DEFTAG( lbfreq );
34 268 : DEFTAG( lbtime );
35 268 : DEFTAG( rsfreq );
36 268 : DEFTAG( nstep );
37 268 : DEFTAG( ttyi );
38 268 : DEFTAG( term );
39 268 : DEFTAG( cfl );
40 268 : DEFTAG( rk );
41 268 : DEFTAG( theta );
42 536 : DEFTAG( t0 );
43 536 : DEFTAG( dt );
44 268 : DEFTAG( turkel );
45 268 : DEFTAG( soundspeed );
46 268 : DEFTAG( velinf );
47 : DEFTAG( presure );
48 268 : DEFTAG( tol );
49 268 : DEFTAG( verbose );
50 268 : DEFTAG( hydrostat );
51 268 : DEFTAG( pc );
52 268 : DEFTAG( mom_iter );
53 268 : DEFTAG( mom_tol );
54 268 : DEFTAG( mom_verbose );
55 268 : DEFTAG( mom_pc );
56 268 : DEFTAG( reorder );
57 268 : DEFTAG( part );
58 268 : DEFTAG( part_ );
59 268 : DEFTAG( zoltan_params );
60 268 : DEFTAG( zoltan_params_ );
61 268 : DEFTAG( solver );
62 268 : DEFTAG( stab );
63 268 : DEFTAG( stab2 );
64 268 : DEFTAG( stab2coef );
65 268 : DEFTAG( fct );
66 268 : DEFTAG( fctdif );
67 268 : DEFTAG( fctclip );
68 268 : DEFTAG( fctsys );
69 268 : DEFTAG( fctfreeze );
70 268 : DEFTAG( deactivate );
71 268 : DEFTAG( deatol );
72 268 : DEFTAG( deadif );
73 268 : DEFTAG( deafreq );
74 268 : DEFTAG( deasys );
75 268 : DEFTAG( deatime );
76 268 : DEFTAG( flux );
77 268 : DEFTAG( steady );
78 268 : DEFTAG( residual );
79 268 : DEFTAG( rescomp );
80 268 : DEFTAG( problem );
81 268 : DEFTAG( problem_ncomp );
82 268 : DEFTAG( problem_alpha );
83 268 : DEFTAG( problem_kappa );
84 268 : DEFTAG( problem_beta );
85 268 : DEFTAG( problem_r0 );
86 268 : DEFTAG( problem_p0 );
87 268 : DEFTAG( problem_ce );
88 268 : DEFTAG( problem_src );
89 268 : DEFTAG( location );
90 268 : DEFTAG( radius );
91 268 : DEFTAG( release_time );
92 268 : DEFTAG( freezeflow );
93 268 : DEFTAG( freezetime );
94 268 : DEFTAG( overset );
95 268 : DEFTAG( intergrid_ );
96 268 : DEFTAG( layers_ );
97 268 : DEFTAG( sym_ );
98 268 : DEFTAG( fieldout );
99 268 : DEFTAG( fieldout_ );
100 268 : DEFTAG( histout );
101 268 : DEFTAG( histout_ );
102 268 : DEFTAG( integout );
103 268 : DEFTAG( integout_ );
104 1072 : DEFTAG( iter );
105 804 : DEFTAG( time );
106 804 : DEFTAG( range );
107 1072 : DEFTAG( sidesets );
108 268 : DEFTAG( points );
109 268 : DEFTAG( integrals );
110 536 : DEFTAG( precision );
111 536 : DEFTAG( format );
112 268 : DEFTAG( ic );
113 268 : DEFTAG( ic_ );
114 804 : DEFTAG( density );
115 1072 : DEFTAG( pressure );
116 268 : DEFTAG( pressure_ );
117 268 : DEFTAG( energy );
118 268 : DEFTAG( temperature );
119 536 : DEFTAG( velocity );
120 268 : DEFTAG( boxes );
121 6 : DEFTAG( box_x );
122 6 : DEFTAG( box_y );
123 6 : DEFTAG( box_z );
124 6 : DEFTAG( box_density );
125 6 : DEFTAG( box_pressure );
126 6 : DEFTAG( box_energy );
127 6 : DEFTAG( box_temperature );
128 6 : DEFTAG( box_velocity );
129 536 : DEFTAG( bc_dir );
130 536 : DEFTAG( bc_dirval );
131 268 : DEFTAG( bc_dir_ );
132 268 : DEFTAG( bc_dirval_ );
133 536 : DEFTAG( bc_sym );
134 268 : DEFTAG( bc_sym_ );
135 268 : DEFTAG( bc_noslip );
136 268 : DEFTAG( bc_noslip_ );
137 268 : DEFTAG( bc_far );
138 268 : DEFTAG( bc_far_ );
139 268 : DEFTAG( bc_pre );
140 268 : DEFTAG( bc_pre_ );
141 268 : DEFTAG( mat_spec_heat_ratio );
142 268 : DEFTAG( mat_spec_heat_const_vol );
143 268 : DEFTAG( mat_spec_gas_const );
144 268 : DEFTAG( mat_heat_conductivity );
145 268 : DEFTAG( mat_dyn_viscosity );
146 268 : DEFTAG( mat_dyn_diffusivity );
147 268 : DEFTAG( href );
148 268 : DEFTAG( href_ );
149 268 : DEFTAG( dtfreq );
150 268 : DEFTAG( maxlevels );
151 268 : DEFTAG( error );
152 268 : DEFTAG( init );
153 268 : DEFTAG( refvar );
154 : } // tag::
155 :
156 : namespace inciter {
157 : //! Inciter control facilitating user input to internal data transfer
158 : namespace ctr {
159 :
160 : //! Member data for tagged tuple
161 : using ConfigMembers = brigand::list<
162 : tag::commit, std::string
163 : , tag::input, std::vector< std::string >
164 : , tag::control, std::string
165 : , tag::output, std::string
166 : , tag::diag, std::string
167 : , tag::diag_iter, uint64_t
168 : , tag::diag_precision, std::streamsize
169 : , tag::diag_format, std::string
170 : , tag::checkpoint, std::string
171 : , tag::quiescence, bool
172 : , tag::virt, std::vector< double >
173 : , tag::nonblocking, bool
174 : , tag::benchmark, bool
175 : , tag::feedback, bool
176 : , tag::lbfreq, uint64_t
177 : , tag::lbtime, double
178 : , tag::rsfreq, uint64_t
179 : , tag::nstep, uint64_t
180 : , tag::ttyi, uint64_t
181 : , tag::term, double
182 : , tag::cfl, double
183 : , tag::rk, uint64_t
184 : , tag::theta, double
185 : , tag::t0, double
186 : , tag::dt, double
187 : , tag::turkel, double
188 : , tag::soundspeed, double
189 : , tag::velinf, std::vector< double >
190 : , tag::pressure, tk::TaggedTuple< brigand::list<
191 : tag::iter, uint64_t
192 : , tag::tol, double
193 : , tag::verbose, uint64_t
194 : , tag::hydrostat, uint64_t
195 : , tag::pc, std::string
196 : , tag::bc_dir, std::vector< std::vector< int > >
197 : , tag::bc_dirval, std::vector< std::vector< double > >
198 : , tag::bc_sym, std::vector< int >
199 : > >
200 : , tag::pressure_, std::vector<
201 : tk::TaggedTuple< brigand::list<
202 : tag::iter, uint64_t
203 : , tag::tol, double
204 : , tag::verbose, uint64_t
205 : , tag::hydrostat, uint64_t
206 : , tag::pc, std::string
207 : , tag::bc_dir, std::vector< std::vector< int > >
208 : , tag::bc_dirval, std::vector< std::vector< double > >
209 : , tag::bc_sym, std::vector< int >
210 : > >
211 : >
212 : , tag::mom_iter, uint64_t
213 : , tag::mom_tol, double
214 : , tag::mom_verbose, uint64_t
215 : , tag::mom_pc, std::string
216 : , tag::reorder, bool
217 : , tag::part, std::string
218 : , tag::part_, std::vector< std::string >
219 : , tag::zoltan_params, std::vector< std::string >
220 : , tag::zoltan_params_, std::vector< std::vector< std::string > >
221 : , tag::solver, std::string
222 : , tag::stab, bool
223 : , tag::stab2, bool
224 : , tag::stab2coef, double
225 : , tag::fct, bool
226 : , tag::fctdif, double
227 : , tag::fctclip, bool
228 : , tag::fctsys, std::vector< uint64_t >
229 : , tag::fctfreeze, double
230 : , tag::deactivate, bool
231 : , tag::deatol, double
232 : , tag::deadif, double
233 : , tag::deafreq, uint64_t
234 : , tag::deasys, std::vector< uint64_t >
235 : , tag::deatime, double
236 : , tag::flux, std::string
237 : , tag::steady, bool
238 : , tag::residual, double
239 : , tag::rescomp, uint64_t
240 : , tag::problem, std::string
241 : , tag::problem_ncomp, uint64_t
242 : , tag::problem_alpha, double
243 : , tag::problem_kappa, double
244 : , tag::problem_beta, std::vector< double >
245 : , tag::problem_r0, double
246 : , tag::problem_p0, double
247 : , tag::problem_ce, double
248 : , tag::problem_src, tk::TaggedTuple< brigand::list<
249 : tag::location, std::vector< double >
250 : , tag::radius, double
251 : , tag::release_time, double
252 : > >
253 : , tag::freezeflow, double
254 : , tag::freezetime, double
255 : , tag::overset, tk::TaggedTuple< brigand::list<
256 : tag::intergrid_, std::vector< std::vector< int > >
257 : , tag::layers_, std::vector< std::vector< uint64_t > >
258 : , tag::sym_, std::vector< std::string >
259 : > >
260 : , tag::fieldout, tk::TaggedTuple< brigand::list<
261 : tag::sidesets, std::vector< int >
262 : , tag::iter, uint64_t
263 : , tag::time, double
264 : , tag::range, std::vector< std::vector< double > >
265 : > >
266 : , tag::fieldout_, std::vector<
267 : tk::TaggedTuple< brigand::list<
268 : tag::sidesets, std::vector< int >
269 : , tag::iter, uint64_t
270 : , tag::time, double
271 : , tag::range, std::vector< std::vector< double > >
272 : > >
273 : >
274 : , tag::histout, tk::TaggedTuple< brigand::list<
275 : tag::points, std::vector< std::vector< double > >
276 : , tag::iter, uint64_t
277 : , tag::time, double
278 : , tag::range, std::vector< std::vector< double > >
279 : , tag::precision, std::streamsize
280 : , tag::format, std::string
281 : > >
282 : , tag::histout_, std::vector<
283 : tk::TaggedTuple< brigand::list<
284 : tag::points, std::vector< std::vector< double > >
285 : , tag::iter, uint64_t
286 : , tag::time, double
287 : , tag::range, std::vector< std::vector< double > >
288 : , tag::precision, std::streamsize
289 : , tag::format, std::string
290 : > >
291 : >
292 : , tag::integout, tk::TaggedTuple< brigand::list<
293 : tag::sidesets, std::vector< int >
294 : , tag::integrals, std::vector< std::string >
295 : , tag::iter, uint64_t
296 : , tag::time, double
297 : , tag::range, std::vector< std::vector< double > >
298 : , tag::precision, std::streamsize
299 : , tag::format, std::string
300 : > >
301 : , tag::integout_, std::vector<
302 : tk::TaggedTuple< brigand::list<
303 : tag::sidesets, std::vector< int >
304 : , tag::integrals, std::vector< std::string >
305 : , tag::iter, uint64_t
306 : , tag::time, double
307 : , tag::range, std::vector< std::vector< double > >
308 : , tag::precision, std::streamsize
309 : , tag::format, std::string
310 : > >
311 : >
312 : , tag::ic, tk::TaggedTuple< brigand::list<
313 : tag::density, double
314 : , tag::pressure, double
315 : , tag::energy, double
316 : , tag::temperature, double
317 : , tag::velocity, std::vector< double >
318 : , tag::boxes, std::vector<
319 : tk::TaggedTuple< brigand::list<
320 : tag::box_x, std::vector< double >
321 : , tag::box_y, std::vector< double >
322 : , tag::box_z, std::vector< double >
323 : , tag::box_density, double
324 : , tag::box_pressure, double
325 : , tag::box_energy, double
326 : , tag::box_temperature, double
327 : , tag::box_velocity, std::vector< double >
328 : > >
329 : >
330 : > >
331 : , tag::ic_, std::vector<
332 : tk::TaggedTuple< brigand::list<
333 : tag::density, double
334 : , tag::pressure, double
335 : , tag::energy, double
336 : , tag::temperature, double
337 : , tag::velocity, std::vector< double >
338 : , tag::boxes, std::vector<
339 : tk::TaggedTuple< brigand::list<
340 : tag::box_x, std::vector< double >
341 : , tag::box_y, std::vector< double >
342 : , tag::box_z, std::vector< double >
343 : , tag::box_density, double
344 : , tag::box_pressure, double
345 : , tag::box_energy, double
346 : , tag::box_temperature, double
347 : , tag::box_velocity, std::vector< double >
348 : > >
349 : >
350 : > >
351 : >
352 : , tag::bc_dir, std::vector< std::vector< int > >
353 : , tag::bc_dirval, std::vector< std::vector< double > >
354 : , tag::bc_dir_, std::vector< std::vector< std::vector< int > > >
355 : , tag::bc_dirval_, std::vector< std::vector< std::vector< double > > >
356 : , tag::bc_sym, std::vector< int >
357 : , tag::bc_sym_, std::vector< std::vector< int > >
358 : , tag::bc_noslip, std::vector< int >
359 : , tag::bc_noslip_, std::vector< std::vector< int > >
360 : , tag::bc_far, tk::TaggedTuple< brigand::list<
361 : tag::sidesets, std::vector< int >
362 : , tag::density, double
363 : , tag::pressure, double
364 : , tag::velocity, std::vector< double >
365 : > >
366 : , tag::bc_far_, std::vector<
367 : tk::TaggedTuple< brigand::list<
368 : tag::sidesets, std::vector< int >
369 : , tag::density, double
370 : , tag::pressure, double
371 : , tag::velocity, std::vector< double >
372 : > >
373 : >
374 : , tag::bc_pre, tk::TaggedTuple< brigand::list<
375 : tag::sidesets, std::vector< std::vector< int > >
376 : , tag::density, std::vector< double >
377 : , tag::pressure, std::vector< double >
378 : > >
379 : , tag::bc_pre_, std::vector<
380 : tk::TaggedTuple< brigand::list<
381 : tag::sidesets, std::vector< std::vector< int > >
382 : , tag::density, std::vector< double >
383 : , tag::pressure, std::vector< double >
384 : > >
385 : >
386 : , tag::mat_spec_heat_ratio, double
387 : , tag::mat_spec_heat_const_vol, double
388 : , tag::mat_spec_gas_const, double
389 : , tag::mat_heat_conductivity, double
390 : , tag::mat_dyn_viscosity, double
391 : , tag::mat_dyn_diffusivity, double
392 : , tag::href, tk::TaggedTuple< brigand::list<
393 : tag::t0, bool
394 : , tag::dt, bool
395 : , tag::dtfreq, uint64_t
396 : , tag::maxlevels, uint64_t
397 : , tag::refvar, std::vector< uint64_t >
398 : , tag::error, std::string
399 : , tag::init, std::vector< std::string >
400 : > >
401 : , tag::href_, std::vector<
402 : tk::TaggedTuple< brigand::list<
403 : tag::t0, bool
404 : , tag::dt, bool
405 : , tag::dtfreq, uint64_t
406 : , tag::maxlevels, uint64_t
407 : , tag::refvar, std::vector< uint64_t >
408 : , tag::error, std::string
409 : , tag::init, std::vector< std::string >
410 : > >
411 : >
412 :
413 : >;
414 :
415 : //! Config is a TaggedTuple specialized to Inciter
416 : class Config : public tk::TaggedTuple< ConfigMembers > {
417 :
418 : public:
419 : //! Contructor: parse inciter command line
420 : void cmdline( int argc, char** argv );
421 :
422 : //! Parse control file
423 : void control();
424 :
425 : /** @name Pack/Unpack: Serialize Config object for Charm++ */
426 : ///@{
427 : //! \brief Pack/Unpack serialize member function
428 : //! \param[in,out] p Charm++'s PUP::er serializer object reference
429 1258 : void pup( PUP::er& p ) { tk::TaggedTuple< ConfigMembers >::pup(p); }
430 : //! \brief Pack/Unpack serialize operator|
431 : //! \param[in,out] p Charm++'s PUP::er serializer object reference
432 : //! \param[in,out] c Config object reference
433 1258 : friend void operator|( PUP::er& p, Config& c ) { c.pup(p); }
434 : //@}
435 :
436 : private:
437 : //! Echo help on command line arguments
438 : void help( char** argv );
439 : };
440 :
441 : } // ctr::
442 : } // inciter::
|