Branch data Line data Source code
1 : : // *****************************************************************************
2 : : /*!
3 : : \file src/Control/Inciter/Options/AMRInitial.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 Initial (before t=0) adaptive mesh refinement (AMR) options
9 : : \details Initial (before t=0) adaptive mesh refinement (AMR) options
10 : : */
11 : : // *****************************************************************************
12 : : #ifndef InciterAMRInitialOptions_h
13 : : #define InciterAMRInitialOptions_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 : : //! Initial AMR types
26 : : enum class AMRInitialType : uint8_t { UNIFORM
27 : : , UNIFORM_DEREFINE
28 : : , INITIAL_CONDITIONS
29 : : , EDGELIST
30 : : , COORDINATES };
31 : :
32 : : //! Pack/Unpack AMRInitialType: forward overload to generic enum class packer
33 : 195 : inline void operator|( PUP::er& p, AMRInitialType& e )
34 : 195 : { PUP::pup( p, e ); }
35 : :
36 : : //! AMRInitial options: outsource searches to base templated on enum type
37 : : class AMRInitial : public tk::Toggle< AMRInitialType > {
38 : :
39 : : public:
40 : : //! Valid expected choices to make them also available at compile-time
41 : : using keywords = brigand::list< kw::amr_uniform
42 : : , kw::amr_uniform_derefine
43 : : , kw::amr_initial_conditions
44 : : , kw::amr_edgelist
45 : : , kw::amr_coords >;
46 : :
47 : : //! \brief Options constructor
48 : : //! \details Simply initialize in-line and pass associations to base, which
49 : : //! will handle client interactions
50 : 132 : explicit AMRInitial() :
51 : : tk::Toggle< AMRInitialType >(
52 : : //! Group, i.e., options, name
53 [ + - ]: 264 : kw::amr_initial::name(),
54 : : //! Enums -> names
55 [ + - ]: 132 : { { AMRInitialType::UNIFORM, kw::amr_uniform::name() },
56 : 0 : { AMRInitialType::UNIFORM_DEREFINE,
57 [ + - ]: 264 : kw::amr_uniform_derefine::name() },
58 : 0 : { AMRInitialType::INITIAL_CONDITIONS,
59 [ + - ]: 264 : kw::amr_initial_conditions::name() },
60 [ + - ]: 264 : { AMRInitialType::EDGELIST, kw::amr_edgelist::name() },
61 [ + - ]: 264 : { AMRInitialType::COORDINATES, kw::amr_coords::name() } },
62 : : //! keywords -> Enums
63 : 0 : { { kw::amr_uniform::string(), AMRInitialType::UNIFORM },
64 [ + - ]: 264 : { kw::amr_uniform_derefine::string(),
65 : 0 : AMRInitialType::UNIFORM_DEREFINE },
66 [ + - ]: 264 : { kw::amr_initial_conditions::string(),
67 : 0 : AMRInitialType::INITIAL_CONDITIONS },
68 [ + - ]: 264 : { kw::amr_edgelist::string(), AMRInitialType::EDGELIST },
69 [ + - ][ + - ]: 2904 : { kw::amr_coords::string(), AMRInitialType::COORDINATES } } )
[ + - ][ + - ]
[ + + ][ + + ]
[ - - ][ - - ]
70 : 132 : {}
71 : : };
72 : :
73 : : } // ctr::
74 : : } // inciter::
75 : :
76 : : #endif // InciterAMRInitialOptions_h
|