Line data Source code
1 1 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : /// \file 5 : /// Defines DataBox tags for the ScalarGaussBonnet system. 6 : 7 : #pragma once 8 : 9 : #include <string> 10 : 11 : #include "DataStructures/DataBox/Tag.hpp" 12 : #include "DataStructures/Tensor/EagerMath/DotProduct.hpp" 13 : #include "DataStructures/Tensor/TypeAliases.hpp" 14 : #include "Elliptic/Systems/Xcts/Tags.hpp" 15 : #include "Evolution/Systems/CurvedScalarWave/Tags.hpp" 16 : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp" 17 : #include "Options/Options.hpp" 18 : #include "Options/String.hpp" 19 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 20 : 21 : /// \cond 22 : class DataVector; 23 : /// \endcond 24 : 25 : namespace sgb { 26 : /// Tags related to solving the scalar equation in sGB gravity. 27 1 : namespace OptionTags { 28 : 29 0 : struct OptionGroup { 30 0 : static std::string name() { return "ScalarGaussBonnet"; } 31 0 : static constexpr Options::String help = 32 : "Options for elliptic solve in sGB gravity."; 33 : }; 34 : 35 0 : struct Epsilon2 { 36 0 : static std::string name() { return "Epsilon2"; } 37 0 : using type = double; 38 0 : using group = OptionGroup; 39 0 : static constexpr Options::String help{ 40 : "Epsilon2 (quadratic term) for the coupling function."}; 41 : }; 42 : 43 0 : struct Epsilon4 { 44 0 : static std::string name() { return "Epsilon4"; } 45 0 : using type = double; 46 0 : using group = OptionGroup; 47 0 : static constexpr Options::String help{ 48 : "Epsilon4 (quartic term) for the coupling function."}; 49 : }; 50 : 51 0 : struct RolloffLocation { 52 0 : static std::string name() { return "RolloffLocation"; } 53 0 : using type = double; 54 0 : using group = OptionGroup; 55 0 : static constexpr Options::String help{ 56 : "Location of center of tanh function for rolling off the shift."}; 57 : }; 58 : 59 0 : struct RolloffRate { 60 0 : static std::string name() { return "RolloffRate"; } 61 0 : using type = double; 62 0 : using group = OptionGroup; 63 0 : static constexpr Options::String help{ 64 : "Rate of roll off for rolling off the shift."}; 65 : }; 66 : 67 : } // namespace OptionTags 68 0 : namespace Tags { 69 : 70 : /*! 71 : * \brief Epsilon2 (quadratic term) for the coupling function. 72 : */ 73 1 : struct Epsilon2 : db::SimpleTag { 74 0 : using type = double; 75 0 : using option_tags = tmpl::list<OptionTags::Epsilon2>; 76 0 : static constexpr bool pass_metavariables = false; 77 0 : static double create_from_options(const double epsilon) { return epsilon; } 78 : }; 79 : 80 : /*! 81 : * \brief Epsilon4 (quartic term) for the coupling function. 82 : */ 83 1 : struct Epsilon4 : db::SimpleTag { 84 0 : using type = double; 85 0 : using option_tags = tmpl::list<OptionTags::Epsilon4>; 86 0 : static constexpr bool pass_metavariables = false; 87 0 : static double create_from_options(const double epsilon) { return epsilon; } 88 : }; 89 : 90 : /*! 91 : * \brief Location of center of tanh function for rolling off the shift. 92 : */ 93 1 : struct RolloffLocation : db::SimpleTag { 94 0 : using type = double; 95 0 : using option_tags = tmpl::list<OptionTags::RolloffLocation>; 96 0 : static constexpr bool pass_metavariables = false; 97 0 : static double create_from_options(const double rolloff_location) { 98 : return rolloff_location; 99 : } 100 : }; 101 : 102 : /*! 103 : * \brief Rate of roll off for rolling off the shift. 104 : */ 105 1 : struct RolloffRate : db::SimpleTag { 106 0 : using type = double; 107 0 : using option_tags = tmpl::list<OptionTags::RolloffRate>; 108 0 : static constexpr bool pass_metavariables = false; 109 0 : static double create_from_options(const double rolloff_rate) { 110 : return rolloff_rate; 111 : } 112 : }; 113 : 114 : /*! 115 : * \brief The scalar field $\Psi$. 116 : */ 117 1 : struct Psi : db::SimpleTag { 118 0 : using type = Scalar<DataVector>; 119 : }; 120 : 121 : /*! 122 : * \brief Rolled-off shift (i.e. the shift used in computing the fluxes). 123 : */ 124 1 : struct RolledOffShift : db::SimpleTag { 125 0 : using type = tnsr::I<DataVector, 3, Frame::Inertial>; 126 : }; 127 : 128 : /*! 129 : * \brief Pi computed using the rolled-off shift. 130 : */ 131 1 : struct PiWithRolledOffShift : db::SimpleTag { 132 0 : using type = Scalar<DataVector>; 133 : }; 134 : } // namespace Tags 135 : } // namespace sgb