Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <ostream>
7 :
8 : /// \cond
9 : namespace Options {
10 : class Option;
11 : template <typename T>
12 : struct create_from_yaml;
13 : } // namespace Options
14 : /// \endcond
15 :
16 : namespace NewtonianMhd::Limiters {
17 : /// \ingroup LimitersGroup
18 : /// \brief Type of NewtonianMhd variables to apply limiter to
19 : ///
20 : /// \note The option `Characteristic` denotes the characteristic fields computed
21 : /// from the analytic expression, whereas the option `NumericalCharacteristic`
22 : /// denotes the fields as computed numerically by solving for the eigenvectors
23 : /// of the flux Jacobian.
24 : ///
25 : /// Initial experiments with limiting in a Reimann problem by FH suggest the
26 : /// numerical eigenvectors can sometimes produce more accurate results than the
27 : /// analytic ones (does the numerical solution give a better linear combination
28 : /// of the degenerate eigenvectors?), and is not too much more expensive
29 : /// (probably the expense of the limiter as a whole dominates). More testing is
30 : /// needed to verify and understand this...
31 0 : enum class VariablesToLimit {
32 : Conserved,
33 : Characteristic,
34 : NumericalCharacteristic
35 : };
36 :
37 0 : std::ostream& operator<<(std::ostream& os, VariablesToLimit vars_to_limit);
38 : } // namespace NewtonianMhd::Limiters
39 :
40 : template <>
41 0 : struct Options::create_from_yaml<NewtonianMhd::Limiters::VariablesToLimit> {
42 : template <typename Metavariables>
43 0 : static NewtonianMhd::Limiters::VariablesToLimit create(
44 : const Options::Option& options) {
45 : return create<void>(options);
46 : }
47 : };
48 :
49 : template <>
50 0 : NewtonianMhd::Limiters::VariablesToLimit
51 : Options::create_from_yaml<NewtonianMhd::Limiters::VariablesToLimit>::create<
52 : void>(const Options::Option& options);
|