Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <array> 7 : 8 : #include "DataStructures/DataBox/Tag.hpp" 9 : #include "DataStructures/DataVector.hpp" 10 : #include "DataStructures/Tensor/Tensor.hpp" 11 : #include "Evolution/Systems/ScalarTensor/Tags.hpp" 12 : #include "Options/String.hpp" 13 : #include "PointwiseFunctions/ScalarTensor/ScalarGaussBonnet/CouplingParameters.hpp" 14 : 15 : /// \cond 16 : namespace ScalarTensor::OptionTags { 17 : struct Group; 18 : } // namespace ScalarTensor::OptionTags 19 : /// \endcond 20 : 21 : namespace ScalarTensor { 22 : namespace OptionTags { 23 : /*! 24 : * \brief Linear coupling parameters to curvature. 25 : */ 26 1 : struct CouplingParameters { 27 0 : static constexpr Options::String help = {"Coupling parameters to curvature."}; 28 0 : using type = ScalarTensor::CouplingParameterOptions; 29 0 : using group = ScalarTensor::OptionTags::Group; 30 : }; 31 : 32 : } // namespace OptionTags 33 : 34 : namespace Tags { 35 : /*! 36 : * \brief Linear, quadratic and quartic coupling parameters to curvature. 37 : */ 38 1 : struct CouplingParameters : db::SimpleTag { 39 0 : using type = ScalarTensor::CouplingParameterOptions; 40 0 : using option_tags = tmpl::list<OptionTags::CouplingParameters>; 41 0 : static constexpr bool pass_metavariables = false; 42 0 : static ScalarTensor::CouplingParameterOptions create_from_options( 43 : const ScalarTensor::CouplingParameterOptions& coupling_parameters) { 44 : return coupling_parameters; 45 : } 46 : }; 47 : } // namespace Tags 48 : 49 : namespace sgb::Tags { 50 : /*! 51 : * \brief Double normal projection of the second covariant derivative of the 52 : * coupling function. 53 : * 54 : * \details Tag for the term $n^a n^b \nabla_a\nabla_b F[\Psi]$, where $F[\Psi]$ 55 : * is the coupling function, and $n^a$ is the unit vector normal to the spatial 56 : * hypersurfaces. 57 : */ 58 1 : struct nnDDCoupling : db::SimpleTag { 59 0 : using type = Scalar<DataVector>; 60 : }; 61 : 62 : /*! 63 : * \brief Mixed projection of the second covariant derivative of the coupling 64 : * function. 65 : * 66 : * \details Tag for the term $\gamma^a_i n^b \nabla_a \nabla_b F[\Psi]$, where 67 : * $F[\Psi]$ is the coupling function, $n^a$ is the unit vector normal to the 68 : * spatial hypersurfaces, and $\gamma^a_b = \delta^a_b + n^a n_b$ is the 69 : * projection operator onto them. 70 : */ 71 1 : struct nsDDCoupling : db::SimpleTag { 72 0 : using type = tnsr::i<DataVector, 3>; 73 : }; 74 : 75 : /*! 76 : * \brief Spatial projection of the second covariant derivative of the coupling 77 : * function. 78 : * 79 : * \details Tag for the term $\gamma^a_i \gamma^b_j \nabla_a \nabla_b F[\Psi]$, 80 : * where $F[\Psi]$ is the coupling function, $\gamma^a_b = \delta^a_b + n^a n_b$ 81 : * is the projection operator onto the spatial hypersurfaces, and $n^a$ is the 82 : * unit vector normal to them. 83 : */ 84 1 : struct ssDDCoupling : db::SimpleTag { 85 0 : using type = tnsr::ii<DataVector, 3>; 86 : }; 87 : 88 : /*! 89 : * \brief Spatial trace of the second covariant derivative of the coupling 90 : * function. 91 : * 92 : * \details Tag for the term $\gamma^{ab} \nabla_a \nabla_b F[\Psi]$, where 93 : * $F[\Psi]$ is the coupling function and $\gamma^{ab}$ is the inverse spatial 94 : * metric. 95 : */ 96 1 : struct SpatialTraceDDCoupling : db::SimpleTag { 97 0 : using type = Scalar<DataVector>; 98 : }; 99 : } // namespace sgb::Tags 100 : } // namespace ScalarTensor