Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/Control/Inciter/Options/Problem.hpp
4 : : \copyright 2012-2015 J. Bakosi,
5 : : 2016-2018 Los Alamos National Security, LLC.,
6 : : 2019-2021 Triad National Security, LLC.
7 : : All rights reserved. See the LICENSE file for details.
8 : : \brief Problem options for inciter
9 : : \details Problem options for inciter
10 : : */
11 : : // *****************************************************************************
12 : : #ifndef ProblemOptions_h
13 : : #define ProblemOptions_h
14 : :
15 : : #include <brigand/sequences/list.hpp>
16 : : #include <brigand/algorithms/for_each.hpp>
17 : :
18 : : #include "Toggle.hpp"
19 : : #include "Keywords.hpp"
20 : : #include "PUPUtil.hpp"
21 : :
22 : : namespace inciter {
23 : : namespace ctr {
24 : :
25 : : //! Problem types
26 : : enum class ProblemType : uint8_t { USER_DEFINED,
27 : : SHEAR_DIFF,
28 : : VORTICAL_FLOW,
29 : : NL_ENERGY_GROWTH,
30 : : RAYLEIGH_TAYLOR,
31 : : TAYLOR_GREEN,
32 : : SLOT_CYL,
33 : : GAUSS_HUMP,
34 : : CYL_ADVECT,
35 : : CYL_VORTEX,
36 : : SHEDDING_FLOW,
37 : : SOD_SHOCKTUBE,
38 : : ROTATED_SOD_SHOCKTUBE,
39 : : SEDOV_BLASTWAVE,
40 : : INTERFACE_ADVECTION,
41 : : GAUSS_HUMP_COMPFLOW,
42 : : WATERAIR_SHOCKTUBE,
43 : : SHOCK_HEBUBBLE,
44 : : UNDERWATER_EX };
45 : :
46 : : //! Pack/Unpack ProblemType: forward overload to generic enum class packer
47 : 899 : inline void operator|( PUP::er& p, ProblemType& e ) { PUP::pup( p, e ); }
48 : :
49 : : //! \brief Problem options: outsource to base templated on enum type
50 : : class Problem : public tk::Toggle< ProblemType > {
51 : :
52 : : public:
53 : : //! Valid expected choices to make them also available at compile-time
54 : : using keywords = brigand::list< kw::user_defined
55 : : , kw::shear_diff
56 : : , kw::vortical_flow
57 : : , kw::nl_energy_growth
58 : : , kw::rayleigh_taylor
59 : : , kw::taylor_green
60 : : , kw::slot_cyl
61 : : , kw::gauss_hump
62 : : , kw::cyl_advect
63 : : , kw::cyl_vortex
64 : : , kw::shedding_flow
65 : : , kw::sod_shocktube
66 : : , kw::rotated_sod_shocktube
67 : : , kw::sedov_blastwave
68 : : , kw::interface_advection
69 : : , kw::gauss_hump_compflow
70 : : , kw::waterair_shocktube
71 : : , kw::shock_hebubble
72 : : , kw::underwater_ex
73 : : >;
74 : :
75 : : //! \brief Options constructor
76 : : //! \details Simply initialize in-line and pass associations to base, which
77 : : //! will handle client interactions
78 : 461 : explicit Problem() :
79 : : tk::Toggle< ProblemType >(
80 : : //! Group, i.e., options, name
81 [ + - ]: 922 : kw::problem::name(),
82 : : //! Enums -> names
83 [ + - ]: 461 : { { ProblemType::USER_DEFINED, kw::user_defined::name() },
84 [ + - ]: 922 : { ProblemType::SHEAR_DIFF, kw::shear_diff::name() },
85 [ + - ]: 922 : { ProblemType::VORTICAL_FLOW, kw::vortical_flow::name() },
86 [ + - ]: 922 : { ProblemType::NL_ENERGY_GROWTH, kw::nl_energy_growth::name() },
87 [ + - ]: 922 : { ProblemType::RAYLEIGH_TAYLOR, kw::rayleigh_taylor::name() },
88 [ + - ]: 922 : { ProblemType::TAYLOR_GREEN, kw::taylor_green::name() },
89 [ + - ]: 922 : { ProblemType::SLOT_CYL, kw::slot_cyl::name() },
90 [ + - ]: 922 : { ProblemType::GAUSS_HUMP, kw::gauss_hump::name() },
91 [ + - ]: 922 : { ProblemType::CYL_ADVECT, kw::cyl_advect::name() },
92 [ + - ]: 922 : { ProblemType::CYL_VORTEX, kw::cyl_vortex::name() },
93 [ + - ]: 922 : { ProblemType::SHEDDING_FLOW, kw::shedding_flow::name() },
94 [ + - ]: 922 : { ProblemType::SOD_SHOCKTUBE, kw::sod_shocktube::name() },
95 : 0 : { ProblemType::ROTATED_SOD_SHOCKTUBE,
96 [ + - ]: 922 : kw::rotated_sod_shocktube::name() },
97 [ + - ]: 922 : { ProblemType::SEDOV_BLASTWAVE, kw::sedov_blastwave::name() },
98 : 0 : { ProblemType::INTERFACE_ADVECTION,
99 [ + - ]: 922 : kw::interface_advection::name() },
100 : 0 : { ProblemType::GAUSS_HUMP_COMPFLOW,
101 [ + - ]: 922 : kw::gauss_hump_compflow::name() },
102 [ + - ]: 922 : { ProblemType::WATERAIR_SHOCKTUBE, kw::waterair_shocktube::name() },
103 [ + - ]: 922 : { ProblemType::SHOCK_HEBUBBLE, kw::shock_hebubble::name() },
104 [ + - ]: 922 : { ProblemType::UNDERWATER_EX, kw::underwater_ex::name() }
105 : : },
106 : : //! keywords -> Enums
107 : 0 : { { kw::user_defined::string(), ProblemType::USER_DEFINED },
108 [ + - ]: 922 : { kw::shear_diff::string(), ProblemType::SHEAR_DIFF },
109 [ + - ]: 922 : { kw::vortical_flow::string(), ProblemType::VORTICAL_FLOW },
110 [ + - ]: 922 : { kw::nl_energy_growth::string(), ProblemType::NL_ENERGY_GROWTH },
111 [ + - ]: 922 : { kw::rayleigh_taylor::string(), ProblemType::RAYLEIGH_TAYLOR },
112 [ + - ]: 922 : { kw::taylor_green::string(), ProblemType::TAYLOR_GREEN },
113 [ + - ]: 922 : { kw::slot_cyl::string(), ProblemType::SLOT_CYL },
114 [ + - ]: 922 : { kw::gauss_hump::string(), ProblemType::GAUSS_HUMP },
115 [ + - ]: 922 : { kw::cyl_advect::string(), ProblemType::CYL_ADVECT },
116 [ + - ]: 922 : { kw::cyl_vortex::string(), ProblemType::CYL_VORTEX },
117 [ + - ]: 922 : { kw::shedding_flow::string(), ProblemType::SHEDDING_FLOW },
118 [ + - ]: 922 : { kw::sod_shocktube::string(), ProblemType::SOD_SHOCKTUBE },
119 [ + - ]: 922 : { kw::rotated_sod_shocktube::string(),
120 : 0 : ProblemType::ROTATED_SOD_SHOCKTUBE },
121 [ + - ]: 922 : { kw::sod_shocktube::string(), ProblemType::SOD_SHOCKTUBE },
122 [ + - ]: 922 : { kw::sedov_blastwave::string(), ProblemType::SEDOV_BLASTWAVE },
123 [ + - ]: 922 : { kw::interface_advection::string(),
124 : 0 : ProblemType::INTERFACE_ADVECTION },
125 [ + - ]: 922 : { kw::gauss_hump_compflow::string(),
126 : 0 : ProblemType::GAUSS_HUMP_COMPFLOW },
127 [ + - ]: 922 : { kw::waterair_shocktube::string(),
128 : 0 : ProblemType::WATERAIR_SHOCKTUBE },
129 [ + - ]: 922 : { kw::shock_hebubble::string(),
130 : 0 : ProblemType::SHOCK_HEBUBBLE },
131 [ + - ]: 922 : { kw::underwater_ex::string(),
132 : 0 : ProblemType::UNDERWATER_EX }
133 [ + - ][ + - ]: 37341 : } )
[ + - ][ + + ]
[ + + ][ - - ]
[ - - ]
134 : 461 : {}
135 : : };
136 : :
137 : : } // ctr::
138 : : } // inciter::
139 : :
140 : : #endif // ProblemOptions_h
|