Branch data 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-2024 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 : 253 : DEFTAG( commit );
20 : 253 : DEFTAG( input );
21 : 253 : DEFTAG( control );
22 : 253 : DEFTAG( output );
23 : 253 : DEFTAG( diag );
24 : 253 : DEFTAG( diag_iter );
25 : 253 : DEFTAG( diag_precision );
26 : 253 : DEFTAG( diag_format );
27 : 253 : DEFTAG( checkpoint );
28 : 253 : DEFTAG( quiescence );
29 : 253 : DEFTAG( virt );
30 : 253 : DEFTAG( nonblocking );
31 : 253 : DEFTAG( benchmark );
32 : 253 : DEFTAG( feedback );
33 : 253 : DEFTAG( lbfreq );
34 : 253 : DEFTAG( lbtime );
35 : 253 : DEFTAG( rsfreq );
36 : 253 : DEFTAG( nstep );
37 : 253 : DEFTAG( ttyi );
38 : 253 : DEFTAG( term );
39 : 253 : DEFTAG( cfl );
40 : 253 : DEFTAG( rk );
41 : 253 : DEFTAG( theta );
42 : 253 : DEFTAG( t0 );
43 : 253 : DEFTAG( dt );
44 : 253 : DEFTAG( turkel );
45 : 253 : DEFTAG( soundspeed );
46 : 253 : DEFTAG( velinf );
47 : 253 : DEFTAG( pre_iter );
48 : 253 : DEFTAG( pre_tol );
49 : 253 : DEFTAG( pre_verbose );
50 : 253 : DEFTAG( pre_hydrostat );
51 : 253 : DEFTAG( pre_pc );
52 : 253 : DEFTAG( pre_bc_dir );
53 : 253 : DEFTAG( pre_bc_dirval );
54 : 253 : DEFTAG( pre_bc_sym );
55 : 253 : DEFTAG( mom_iter );
56 : 253 : DEFTAG( mom_tol );
57 : 253 : DEFTAG( mom_verbose );
58 : 253 : DEFTAG( mom_pc );
59 : 253 : DEFTAG( reorder );
60 : 253 : DEFTAG( part );
61 : 253 : DEFTAG( zoltan_params );
62 : 253 : DEFTAG( solver );
63 : 253 : DEFTAG( stab2 );
64 : 253 : DEFTAG( stab2coef );
65 : 253 : DEFTAG( fct );
66 : 253 : DEFTAG( fctdif );
67 : 253 : DEFTAG( fctclip );
68 : 253 : DEFTAG( fctsys );
69 : 253 : DEFTAG( fctfreeze );
70 : 253 : DEFTAG( deactivate );
71 : 253 : DEFTAG( deatol );
72 : 253 : DEFTAG( deadif );
73 : 253 : DEFTAG( deafreq );
74 : 253 : DEFTAG( deasys );
75 : 253 : DEFTAG( deatime );
76 : 253 : DEFTAG( flux );
77 : 253 : DEFTAG( steady );
78 : 253 : DEFTAG( residual );
79 : 253 : DEFTAG( rescomp );
80 : 253 : DEFTAG( problem );
81 : 253 : DEFTAG( problem_ncomp );
82 : 253 : DEFTAG( problem_alpha );
83 : 253 : DEFTAG( problem_kappa );
84 : 253 : DEFTAG( problem_beta );
85 : 253 : DEFTAG( problem_r0 );
86 : 253 : DEFTAG( problem_p0 );
87 : 253 : DEFTAG( problem_ce );
88 : 253 : DEFTAG( problem_src );
89 : 253 : DEFTAG( location );
90 : 253 : DEFTAG( radius );
91 : 253 : DEFTAG( release_time );
92 : 253 : DEFTAG( freezeflow );
93 : 253 : DEFTAG( freezetime );
94 : 253 : DEFTAG( fieldout );
95 : 253 : DEFTAG( fieldout_iter );
96 : 253 : DEFTAG( fieldout_time );
97 : 253 : DEFTAG( fieldout_range );
98 : 253 : DEFTAG( histout );
99 : 253 : DEFTAG( histout_iter );
100 : 253 : DEFTAG( histout_time );
101 : 253 : DEFTAG( histout_range );
102 : 253 : DEFTAG( histout_precision );
103 : 253 : DEFTAG( histout_format );
104 : 253 : DEFTAG( integout );
105 : 253 : DEFTAG( integout_iter );
106 : 253 : DEFTAG( integout_time );
107 : 253 : DEFTAG( integout_range );
108 : 253 : DEFTAG( integout_precision );
109 : 253 : DEFTAG( integout_format );
110 : 253 : DEFTAG( ic );
111 : 6 : DEFTAG( x );
112 : 6 : DEFTAG( y );
113 : 6 : DEFTAG( z );
114 : 259 : DEFTAG( ic_density );
115 : 259 : DEFTAG( ic_pressure );
116 : 259 : DEFTAG( ic_energy );
117 : 259 : DEFTAG( ic_temperature );
118 : 259 : DEFTAG( ic_velocity );
119 : 253 : DEFTAG( bc_dir );
120 : 253 : DEFTAG( bc_dirval );
121 : 253 : DEFTAG( bc_sym );
122 : 253 : DEFTAG( bc_noslip );
123 : 253 : DEFTAG( bc_far );
124 : 253 : DEFTAG( bc_far_density );
125 : 253 : DEFTAG( bc_far_pressure );
126 : 253 : DEFTAG( bc_far_velocity );
127 : 253 : DEFTAG( bc_pre );
128 : 253 : DEFTAG( bc_pre_density );
129 : 253 : DEFTAG( bc_pre_pressure );
130 : 253 : DEFTAG( mat_spec_heat_ratio );
131 : 253 : DEFTAG( mat_spec_heat_const_vol );
132 : 253 : DEFTAG( mat_spec_gas_const );
133 : 253 : DEFTAG( mat_heat_conductivity );
134 : 253 : DEFTAG( mat_dyn_viscosity );
135 : 253 : DEFTAG( href_t0 );
136 : 253 : DEFTAG( href_dt );
137 : 253 : DEFTAG( href_dtfreq );
138 : 253 : DEFTAG( href_maxlevels );
139 : 253 : DEFTAG( href_error );
140 : 253 : DEFTAG( href_init );
141 : 253 : DEFTAG( href_refvar );
142 : : } // tag::
143 : :
144 : : namespace inciter {
145 : : //! Inciter control facilitating user input to internal data transfer
146 : : namespace ctr {
147 : :
148 : : //! Member data for tagged tuple
149 : : using ConfigMembers = brigand::list<
150 : : tag::commit, std::string
151 : : , tag::input, std::string
152 : : , tag::control, std::string
153 : : , tag::output, std::string
154 : : , tag::diag, std::string
155 : : , tag::diag_iter, uint64_t
156 : : , tag::diag_precision, std::streamsize
157 : : , tag::diag_format, std::string
158 : : , tag::checkpoint, std::string
159 : : , tag::quiescence, bool
160 : : , tag::virt, double
161 : : , tag::nonblocking, bool
162 : : , tag::benchmark, bool
163 : : , tag::feedback, bool
164 : : , tag::lbfreq, uint64_t
165 : : , tag::lbtime, double
166 : : , tag::rsfreq, uint64_t
167 : : , tag::nstep, uint64_t
168 : : , tag::ttyi, uint64_t
169 : : , tag::term, double
170 : : , tag::cfl, double
171 : : , tag::rk, uint64_t
172 : : , tag::theta, double
173 : : , tag::t0, double
174 : : , tag::dt, double
175 : : , tag::turkel, double
176 : : , tag::soundspeed, double
177 : : , tag::velinf, std::vector< double >
178 : : , tag::pre_iter, uint64_t
179 : : , tag::pre_tol, double
180 : : , tag::pre_verbose, uint64_t
181 : : , tag::pre_hydrostat, uint64_t
182 : : , tag::pre_pc, std::string
183 : : , tag::pre_bc_dir, std::vector< std::vector< int > >
184 : : , tag::pre_bc_dirval, std::vector< std::vector< double > >
185 : : , tag::pre_bc_sym, std::vector< int >
186 : : , tag::mom_iter, uint64_t
187 : : , tag::mom_tol, double
188 : : , tag::mom_verbose, uint64_t
189 : : , tag::mom_pc, std::string
190 : : , tag::reorder, bool
191 : : , tag::part, std::string
192 : : , tag::zoltan_params, std::vector< std::string >
193 : : , tag::solver, std::string
194 : : , tag::stab2, bool
195 : : , tag::stab2coef, double
196 : : , tag::fct, bool
197 : : , tag::fctdif, double
198 : : , tag::fctclip, bool
199 : : , tag::fctsys, std::vector< uint64_t >
200 : : , tag::fctfreeze, double
201 : : , tag::deactivate, bool
202 : : , tag::deatol, double
203 : : , tag::deadif, double
204 : : , tag::deafreq, uint64_t
205 : : , tag::deasys, std::vector< uint64_t >
206 : : , tag::deatime, double
207 : : , tag::flux, std::string
208 : : , tag::steady, bool
209 : : , tag::residual, double
210 : : , tag::rescomp, uint64_t
211 : : , tag::problem, std::string
212 : : , tag::problem_ncomp, uint64_t
213 : : , tag::problem_alpha, double
214 : : , tag::problem_kappa, double
215 : : , tag::problem_beta, std::vector< double >
216 : : , tag::problem_r0, double
217 : : , tag::problem_p0, double
218 : : , tag::problem_ce, double
219 : : , tag::problem_src, tk::TaggedTuple< brigand::list<
220 : : tag::location, std::vector< double >
221 : : , tag::radius, double
222 : : , tag::release_time, double
223 : : > >
224 : : , tag::freezeflow, double
225 : : , tag::freezetime, double
226 : : , tag::fieldout, std::vector< int >
227 : : , tag::fieldout_iter, uint64_t
228 : : , tag::fieldout_time, double
229 : : , tag::fieldout_range, std::vector< std::vector< double > >
230 : : , tag::histout, std::vector< std::vector< double > >
231 : : , tag::histout_iter, uint64_t
232 : : , tag::histout_time, double
233 : : , tag::histout_range, std::vector< std::vector< double > >
234 : : , tag::histout_precision, std::streamsize
235 : : , tag::histout_format, std::string
236 : : , tag::integout, std::vector< int >
237 : : , tag::integout_iter, uint64_t
238 : : , tag::integout_time, double
239 : : , tag::integout_range, std::vector< std::vector< double > >
240 : : , tag::integout_precision, std::streamsize
241 : : , tag::integout_format, std::string
242 : : , tag::ic, std::vector<
243 : : tk::TaggedTuple< brigand::list<
244 : : tag::x, std::vector< double >
245 : : , tag::y, std::vector< double >
246 : : , tag::z, std::vector< double >
247 : : , tag::ic_density, double
248 : : , tag::ic_pressure, double
249 : : , tag::ic_energy, double
250 : : , tag::ic_temperature, double
251 : : , tag::ic_velocity, std::vector< double >
252 : : > >
253 : : >
254 : : , tag::ic_density, double
255 : : , tag::ic_pressure, double
256 : : , tag::ic_energy, double
257 : : , tag::ic_temperature, double
258 : : , tag::ic_velocity, std::vector< double >
259 : : , tag::bc_dir, std::vector< std::vector< int > >
260 : : , tag::bc_dirval, std::vector< std::vector< double > >
261 : : , tag::bc_sym, std::vector< int >
262 : : , tag::bc_noslip, std::vector< int >
263 : : , tag::bc_far, std::vector< int >
264 : : , tag::bc_far_density, double
265 : : , tag::bc_far_pressure, double
266 : : , tag::bc_far_velocity, std::vector< double >
267 : : , tag::bc_pre, std::vector< std::vector< int > >
268 : : , tag::bc_pre_density, std::vector< double >
269 : : , tag::bc_pre_pressure, std::vector< double >
270 : : , tag::mat_spec_heat_ratio, double
271 : : , tag::mat_spec_heat_const_vol, double
272 : : , tag::mat_spec_gas_const, double
273 : : , tag::mat_heat_conductivity, double
274 : : , tag::mat_dyn_viscosity, double
275 : : , tag::href_t0, bool
276 : : , tag::href_dt, bool
277 : : , tag::href_dtfreq, uint64_t
278 : : , tag::href_maxlevels, uint64_t
279 : : , tag::href_refvar, std::vector< uint64_t >
280 : : , tag::href_error, std::string
281 : : , tag::href_init, std::vector< std::string >
282 : : >;
283 : :
284 : : //! Config is a TaggedTuple specialized to Inciter
285 : : class Config : public tk::TaggedTuple< ConfigMembers > {
286 : :
287 : : public:
288 : : //! Contructor: parse inciter command line
289 : : void cmdline( int argc, char** argv );
290 : :
291 : : //! Parse control file
292 : : void control();
293 : :
294 : : /** @name Pack/Unpack: Serialize Config object for Charm++ */
295 : : ///@{
296 : : //! \brief Pack/Unpack serialize member function
297 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
298 : 1187 : void pup( PUP::er& p ) { tk::TaggedTuple< ConfigMembers >::pup(p); }
299 : : //! \brief Pack/Unpack serialize operator|
300 : : //! \param[in,out] p Charm++'s PUP::er serializer object reference
301 : : //! \param[in,out] c Config object reference
302 : 1187 : friend void operator|( PUP::er& p, Config& c ) { c.pup(p); }
303 : : //@}
304 : :
305 : : private:
306 : : //! Echo help on command line arguments
307 : : void help( char** argv );
308 : : };
309 : :
310 : : } // ctr::
311 : : } // inciter::
|