Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/Control/Inciter/Options/MeshVelocity.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 Mesh velocity configuration options for inciter
9 : : \details Mesh velocity configuration options for inciter.
10 : : */
11 : : // *****************************************************************************
12 : : #ifndef MeshVelocityOptions_h
13 : : #define MeshVelocityOptions_h
14 : :
15 : : #include <brigand/sequences/list.hpp>
16 : :
17 : : #include "Toggle.hpp"
18 : : #include "Keywords.hpp"
19 : : #include "PUPUtil.hpp"
20 : :
21 : : namespace inciter {
22 : : namespace ctr {
23 : :
24 : : //! Mesh velocity configuration option types
25 : : enum class MeshVelocityType : uint8_t { SINE
26 : : , FLUID
27 : : , USER_DEFINED
28 : : };
29 : :
30 : : //! Pack/Unpack MeshVelocityType: forward overload to generic enum class packer
31 : : inline void operator|( PUP::er& p, MeshVelocityType& e ) { PUP::pup( p, e ); }
32 : :
33 : : //! \brief Mesh velocity options: outsource to base templated on enum type
34 : 20 : class MeshVelocity : public tk::Toggle< MeshVelocityType > {
35 : :
36 : : public:
37 : : //! Valid expected choices to make them also available at compile-time
38 : : using keywords = brigand::list< kw::sine
39 : : , kw::fluid
40 : : , kw::user_defined
41 : : >;
42 : :
43 : : //! \brief Options constructor
44 : : //! \details Simply initialize in-line and pass associations to base, which
45 : : //! will handle client interactions
46 : 20 : explicit MeshVelocity() :
47 : : tk::Toggle< MeshVelocityType >(
48 : : //! Group, i.e., options, name
49 : 20 : kw::meshvelocity::name(),
50 : : //! Enums -> names (if defined, policy codes, if not, name)
51 : 20 : { { MeshVelocityType::SINE, kw::sine::name() }
52 [ - + ][ - - ]: 20 : , { MeshVelocityType::FLUID, kw::fluid::name() }
53 [ - + ][ - - ]: 20 : , { MeshVelocityType::USER_DEFINED, kw::user_defined::name() }
54 : : },
55 : : //! keywords -> Enums
56 : 20 : { { kw::sine::string(), MeshVelocityType::SINE }
57 [ - + ][ - - ]: 20 : , { kw::fluid::string(), MeshVelocityType::FLUID }
58 [ - + ][ - - ]: 20 : , { kw::user_defined::string(), MeshVelocityType::USER_DEFINED }
59 [ + - ][ + - ]: 240 : } )
[ + + ][ - + ]
[ - + ][ + + ]
[ - + ][ - + ]
[ - - ][ - - ]
[ - - ][ - - ]
[ - - ][ - - ]
60 : 20 : {}
61 : :
62 : : };
63 : :
64 : : } // ctr::
65 : : } // inciter::
66 : :
67 : : #endif // MeshVelocityOptions_h
|