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