Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <memory> 7 : 8 : #include "DataStructures/DataBox/Tag.hpp" 9 : #include "Options/String.hpp" 10 : #include "PointwiseFunctions/ScalarTensor/ScalarGaussBonnet/CouplingFunctions/CouplingFunction.hpp" 11 : #include "Utilities/Serialization/Serialize.hpp" 12 : #include "Utilities/TMPL.hpp" 13 : 14 : /// \cond 15 : namespace ScalarTensor::sgb::OptionTags { 16 : struct Group; 17 : } // namespace ScalarTensor::sgb::OptionTags 18 : /// \endcond 19 : 20 : namespace ScalarTensor::sgb { 21 : 22 0 : namespace OptionTags { 23 : /*! 24 : * \brief Group encoding all information about the coupling term in the action 25 : * of Einstein-scalar-Gauss-Bonnet gravity. 26 : * 27 : * \details The coupling term considered here is consistent with the expression 28 : * of the action in \cite Nee2024bur , and reads 29 : * \f$\ell^2 F[\Psi] \mathcal{G}\f$, where \f$\ell\f$ is a coupling constant 30 : * encoding the length below which modifications to General Relativity start 31 : * becoming relevant, \f$F[\Psi]\f$ is the coupling function and 32 : * \f$\mathcal{G}\f$ is the Gauss-Bonnet invariant. 33 : */ 34 1 : struct CouplingTerm { 35 0 : static constexpr Options::String help = { 36 : "Group containing information about the coupling term in the action"}; 37 : }; 38 : 39 : /*! 40 : * \brief Coupling constant appearing in the coupling term of 41 : * Einstein-scalar-Gauss-Bonnet gravity. 42 : * 43 : * \details This coupling constant has the dimensions of a length and 44 : * encodes the length scale below which modifications to General Relativity 45 : * start becoming relevant. 46 : */ 47 1 : struct Ell { 48 0 : using type = double; 49 0 : static constexpr Options::String help = { 50 : "Coupling constant setting the length scales where modifications enter"}; 51 0 : using group = CouplingTerm; 52 : }; 53 : 54 : /*! 55 : * \brief Coupling function \f$F[\Psi]\f$. 56 : */ 57 1 : struct CouplingFunction { 58 0 : using type = 59 : std::unique_ptr<ScalarTensor::sgb::CouplingFunctions::CouplingFunction>; 60 0 : static constexpr Options::String help = { 61 : "The coupling function in the scalar-Gauss-Bonnet term"}; 62 0 : using group = CouplingTerm; 63 : }; 64 : 65 : } // namespace OptionTags 66 : 67 0 : namespace Tags { 68 : /*! 69 : * \brief Coupling constant appearing in the coupling term of 70 : * Einstein-scalar-Gauss-Bonnet gravity. 71 : * 72 : * \details This coupling constant has the dimensions of a length and 73 : * encodes the length scale below which modifications to General Relativity 74 : * start becoming relevant. 75 : */ 76 1 : struct Ell : db::SimpleTag { 77 0 : using type = double; 78 0 : using option_tags = tmpl::list<OptionTags::Ell>; 79 0 : static constexpr bool pass_metavariables = false; 80 0 : static double create_from_options(const double value) { return value; } 81 : }; 82 : 83 : /*! 84 : * \brief Coupling function \f$F[\Psi]\f$. 85 : */ 86 1 : struct CouplingFunction : db::SimpleTag { 87 0 : using type = 88 : std::unique_ptr<ScalarTensor::sgb::CouplingFunctions::CouplingFunction>; 89 0 : using option_tags = tmpl::list<OptionTags::CouplingFunction>; 90 0 : static constexpr bool pass_metavariables = false; 91 0 : static type create_from_options(const type& value) { 92 : return serialize_and_deserialize<type>(value); 93 : } 94 : }; 95 : 96 : } // namespace Tags 97 : 98 : } // namespace ScalarTensor::sgb