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