Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <limits>
7 :
8 : #include "DataStructures/DataBox/Tag.hpp"
9 : #include "NumericalAlgorithms/DiscontinuousGalerkin/Tags/OptionsGroup.hpp"
10 : #include "Options/String.hpp"
11 : #include "Utilities/TMPL.hpp"
12 :
13 : /// \cond
14 : namespace PUP {
15 : class er;
16 : } // namespace PUP
17 : /// \endcond
18 :
19 : namespace ScalarAdvection::subcell {
20 0 : struct TciOptions {
21 : /*!
22 : * \brief The cutoff of the absolute value of the scalar field \f$U\f$ in an
23 : * element to use the Persson TCI. Below this value the Persson TCI is not
24 : * applied.
25 : */
26 1 : struct UCutoff {
27 0 : using type = double;
28 0 : static type lower_bound() { return 0.0; }
29 0 : static constexpr Options::String help = {
30 : "The cutoff of the absolute value of the scalar field U in an "
31 : "element to use Persson TCI."};
32 : };
33 :
34 0 : using options = tmpl::list<UCutoff>;
35 0 : static constexpr Options::String help = {
36 : "Options for the troubled-cell indicator"};
37 :
38 : // NOLINTNEXTLINE(google-runtime-references)
39 0 : void pup(PUP::er& /*p*/);
40 :
41 0 : double u_cutoff{std::numeric_limits<double>::signaling_NaN()};
42 : };
43 :
44 0 : namespace OptionTags {
45 0 : struct TciOptions {
46 0 : using type = subcell::TciOptions;
47 0 : static constexpr Options::String help =
48 : "ScalarAdvection-specific options for the TCI";
49 0 : using group = ::dg::OptionTags::DiscontinuousGalerkinGroup;
50 : };
51 : } // namespace OptionTags
52 :
53 0 : namespace Tags {
54 0 : struct TciOptions : db::SimpleTag {
55 0 : using type = subcell::TciOptions;
56 0 : using option_tags = tmpl::list<typename OptionTags::TciOptions>;
57 :
58 0 : static constexpr bool pass_metavariables = false;
59 0 : static type create_from_options(const type& tci_options) {
60 : return tci_options;
61 : }
62 : };
63 : } // namespace Tags
64 : } // namespace ScalarAdvection::subcell
|