Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/Control/Walker/Options/HydroTimeScales.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 Inverse hydrodynamics time scale options
9 : : \details Inverse hydrodynamics time scale options
10 : : */
11 : : // *****************************************************************************
12 : : #ifndef HydroTimeScalesOptions_h
13 : : #define HydroTimeScalesOptions_h
14 : :
15 : : #include <brigand/sequences/list.hpp>
16 : :
17 : : #include "Toggle.hpp"
18 : : #include "Keywords.hpp"
19 : : #include "PUPUtil.hpp"
20 : : #include "DiffEq/HydroTimeScales.hpp"
21 : :
22 : : namespace walker {
23 : : namespace ctr {
24 : :
25 : : //! Inverse hydrodynamics time scale types
26 : : enum class HydroTimeScalesType : uint8_t { EQ_A005H=0
27 : : , EQ_A005S
28 : : , EQ_A005L
29 : : , EQ_A05H
30 : : , EQ_A05S
31 : : , EQ_A05L
32 : : , EQ_A075H
33 : : , EQ_A075S
34 : : , EQ_A075L
35 : : };
36 : :
37 : : //! \brief Pack/Unpack HydroTimeScalesType: forward overload to generic enum
38 : : //! class packer
39 : : inline void operator|( PUP::er& p, HydroTimeScalesType& e )
40 : : { PUP::pup( p, e ); }
41 : :
42 : : //! HydroTimeScales options: outsource searches to base templated on enum type
43 : 26 : class HydroTimeScales : public tk::Toggle< HydroTimeScalesType > {
44 : :
45 : : public:
46 : : //! Valid expected choices to make them also available at compile-time
47 : : using keywords = brigand::list< kw::eq_A005H
48 : : , kw::eq_A005S
49 : : , kw::eq_A005L
50 : : , kw::eq_A05H
51 : : , kw::eq_A05S
52 : : , kw::eq_A05L
53 : : , kw::eq_A075H
54 : : , kw::eq_A075S
55 : : , kw::eq_A075L
56 : : >;
57 : :
58 : : //! \brief Options constructor
59 : : //! \details Simply initialize in-line and pass associations to base, which
60 : : //! will handle client interactions
61 : 31 : explicit HydroTimeScales() :
62 : : tk::Toggle< HydroTimeScalesType >(
63 : : //! Group, i.e., options, name
64 : : "Inverse hydrodynamics time scale",
65 : : //! Enums -> names
66 : 31 : { { HydroTimeScalesType::EQ_A005H, kw::eq_A005H::name() },
67 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A005S, kw::eq_A005S::name() },
68 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A005L, kw::eq_A005L::name() },
69 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A05H, kw::eq_A05H::name() },
70 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A05S, kw::eq_A05S::name() },
71 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A05L, kw::eq_A05L::name() },
72 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A075H, kw::eq_A075H::name() },
73 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A075S, kw::eq_A075S::name() },
74 [ - + ][ - - ]: 31 : { HydroTimeScalesType::EQ_A075L, kw::eq_A075L::name() } },
75 : : //! keywords -> Enums
76 : 31 : { { kw::eq_A005H::string(), HydroTimeScalesType::EQ_A005H },
77 [ - + ][ - - ]: 31 : { kw::eq_A005S::string(), HydroTimeScalesType::EQ_A005S },
78 [ - + ][ - - ]: 31 : { kw::eq_A005L::string(), HydroTimeScalesType::EQ_A005L },
79 [ - + ][ - - ]: 31 : { kw::eq_A05H::string(), HydroTimeScalesType::EQ_A05H },
80 [ - + ][ - - ]: 31 : { kw::eq_A05S::string(), HydroTimeScalesType::EQ_A05S },
81 [ - + ][ - - ]: 31 : { kw::eq_A05L::string(), HydroTimeScalesType::EQ_A05L },
82 [ - + ][ - - ]: 31 : { kw::eq_A075H::string(), HydroTimeScalesType::EQ_A075H },
83 [ - + ][ - - ]: 31 : { kw::eq_A075S::string(), HydroTimeScalesType::EQ_A075S },
84 [ + - ][ + - ]: 744 : { kw::eq_A075L::string(), HydroTimeScalesType::EQ_A075L } } ) {}
[ + - ][ + + ]
[ - + ][ - + ]
[ + + ][ - + ]
[ - + ][ - + ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ]
85 : :
86 : : //! \brief Return table based on Enum
87 : : //! \param[in] t Enum value of the option requested
88 : : //! \return tk::Table associated to the option
89 : 25 : tk::Table<1> table( HydroTimeScalesType t ) const {
90 [ - + ]: 25 : if (t == HydroTimeScalesType::EQ_A005H)
91 : 0 : return invhts_eq_A005H;
92 [ - + ]: 25 : else if (t == HydroTimeScalesType::EQ_A005S)
93 : 0 : return invhts_eq_A005S;
94 [ - + ]: 25 : else if (t == HydroTimeScalesType::EQ_A005L)
95 : 0 : return invhts_eq_A005L;
96 [ - + ]: 25 : else if (t == HydroTimeScalesType::EQ_A05H)
97 : 0 : return invhts_eq_A05H;
98 [ - + ]: 25 : else if (t == HydroTimeScalesType::EQ_A05S)
99 : 0 : return invhts_eq_A05S;
100 [ - + ]: 25 : else if (t == HydroTimeScalesType::EQ_A05L)
101 : 0 : return invhts_eq_A05L;
102 [ + + ]: 25 : else if (t == HydroTimeScalesType::EQ_A075H)
103 : 5 : return invhts_eq_A075H;
104 [ + + ]: 20 : else if (t == HydroTimeScalesType::EQ_A075S)
105 : 15 : return invhts_eq_A075S;
106 [ + - ]: 5 : else if (t == HydroTimeScalesType::EQ_A075L)
107 : 5 : return invhts_eq_A075L;
108 [ - - ][ - - ]: 0 : else Throw( "Inverse hydrodynamics time scale associated to " +
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ]
109 : : std::to_string( static_cast<uint8_t>(t) ) + " not found" );
110 : : }
111 : : };
112 : :
113 : : } // ctr::
114 : : } // walker::
115 : :
116 : : #endif // HydroTimeScalesOptions_h
|