SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Ccz4 - Tags.hpp Hit Total Coverage
Commit: 2ae2b99409ac582030d56a4560a92a3e066a7e54 Lines: 29 57 50.9 %
Date: 2022-01-15 08:40:38
Legend: Lines: hit not hit

          Line data    Source code
       1           0 : // Distributed under the MIT License.
       2             : // See LICENSE.txt for details.
       3             : 
       4             : #pragma once
       5             : 
       6             : #include <cstddef>
       7             : #include <string>
       8             : 
       9             : #include "DataStructures/DataBox/Tag.hpp"
      10             : #include "DataStructures/Tensor/TypeAliases.hpp"
      11             : #include "Evolution/Systems/Ccz4/TagsDeclarations.hpp"
      12             : #include "Evolution/Tags.hpp"
      13             : #include "Options/Options.hpp"
      14             : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      15             : #include "PointwiseFunctions/GeneralRelativity/Tags/Conformal.hpp"
      16             : 
      17             : namespace Ccz4 {
      18           1 : namespace Tags {
      19             : /*!
      20             :  * \brief The conformal factor that rescales the spatial metric
      21             :  *
      22             :  * \details If \f$\gamma_{ij}\f$ is the spatial metric, then we define
      23             :  * \f$\phi = (det(\gamma_{ij}))^{-1/6}\f$.
      24             :  */
      25             : template <typename DataType>
      26           1 : struct ConformalFactor : db::SimpleTag {
      27           0 :   using type = Scalar<DataType>;
      28             : };
      29             : 
      30             : /*!
      31             :  * \brief The square of the conformal factor that rescales the spatial metric
      32             :  *
      33             :  * \details If \f$\gamma_{ij}\f$ is the spatial metric, then we define
      34             :  * \f$\phi^2 = (det(\gamma_{ij}))^{-1/3}\f$.
      35             :  */
      36             : template <typename DataType>
      37           1 : struct ConformalFactorSquared : db::SimpleTag {
      38           0 :   using type = Scalar<DataType>;
      39             : };
      40             : 
      41             : /*!
      42             :  * \brief The conformally scaled spatial metric
      43             :  *
      44             :  * \details If \f$\phi\f$ is the conformal factor and \f$\gamma_{ij}\f$ is the
      45             :  * spatial metric, then we define
      46             :  * \f$\bar{\gamma}_{ij} = \phi^2 \gamma_{ij}\f$.
      47             :  */
      48             : template <size_t Dim, typename Frame, typename DataType>
      49           1 : using ConformalMetric =
      50             :     gr::Tags::Conformal<gr::Tags::SpatialMetric<Dim, Frame, DataType>, 2>;
      51             : 
      52             : /*!
      53             :  * \brief The conformally scaled inverse spatial metric
      54             :  *
      55             :  * \details If \f$\phi\f$ is the conformal factor and \f$\gamma^{ij}\f$ is the
      56             :  * inverse spatial metric, then we define
      57             :  * \f$\bar{\gamma}^{ij} = \phi^{-2} \gamma^{ij}\f$.
      58             :  */
      59             : template <size_t Dim, typename Frame, typename DataType>
      60           1 : using InverseConformalMetric =
      61             :     gr::Tags::Conformal<gr::Tags::InverseSpatialMetric<Dim, Frame, DataType>,
      62             :                         -2>;
      63             : 
      64             : /*!
      65             :  * \brief The trace-free part of the extrinsic curvature
      66             :  *
      67             :  * \details See `Ccz4::a_tilde()` for details.
      68             :  */
      69             : template <size_t Dim, typename Frame, typename DataType>
      70           1 : struct ATilde : db::SimpleTag {
      71           0 :   using type = tnsr::ii<DataType, Dim, Frame>;
      72             : };
      73             : 
      74             : /*!
      75             :  * \brief The trace of the trace-free part of the extrinsic curvature
      76             :  *
      77             :  * \details We define:
      78             :  *
      79             :  * \f{align}
      80             :  *     tr\tilde{A} &= \tilde{\gamma}^{ij} \tilde{A}_{ij}
      81             :  * \f}
      82             :  *
      83             :  * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
      84             :  * defined by `Ccz4::Tags::InverseConformalMetric` and \f$\tilde{A}_{ij}\f$ is
      85             :  * the trace-free part of the extrinsic curvature defined by
      86             :  * `Ccz4::Tags::ATilde`.
      87             :  */
      88             : template <typename DataType>
      89           1 : struct TraceATilde : db::SimpleTag {
      90           0 :   using type = Scalar<DataType>;
      91             : };
      92             : 
      93             : /*!
      94             :  * \brief The natural log of the lapse
      95             :  */
      96             : template <typename DataType>
      97           1 : struct LogLapse : db::SimpleTag {
      98           0 :   using type = Scalar<DataType>;
      99             : };
     100             : 
     101             : /*!
     102             :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     103             :  * natural log of the lapse
     104             :  *
     105             :  * \details If \f$ \alpha \f$ is the lapse, then we define
     106             :  * \f$A_i = \partial_i ln(\alpha) = \frac{\partial_i \alpha}{\alpha}\f$.
     107             :  */
     108             : template <size_t Dim, typename Frame, typename DataType>
     109           1 : struct FieldA : db::SimpleTag {
     110           0 :   using type = tnsr::i<DataType, Dim, Frame>;
     111             : };
     112             : 
     113             : /*!
     114             :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     115             :  * shift
     116             :  */
     117             : template <size_t Dim, typename Frame, typename DataType>
     118           1 : struct FieldB : db::SimpleTag {
     119           0 :   using type = tnsr::iJ<DataType, Dim, Frame>;
     120             : };
     121             : 
     122             : /*!
     123             :  * \brief Auxiliary variable which is analytically half the spatial derivative
     124             :  * of the conformal spatial metric
     125             :  *
     126             :  * \details If \f$\bar{\gamma}_{ij}\f$ is the conformal spatial metric, then we
     127             :  * define
     128             :  * \f$D_{kij} = \frac{1}{2} \partial_k \bar{\gamma}_{ij}\f$.
     129             :  */
     130             : template <size_t Dim, typename Frame, typename DataType>
     131           1 : struct FieldD : db::SimpleTag {
     132           0 :   using type = tnsr::ijj<DataType, Dim, Frame>;
     133             : };
     134             : 
     135             : /*!
     136             :  * \brief The natural log of the conformal factor
     137             :  */
     138             : template <typename DataType>
     139           1 : struct LogConformalFactor : db::SimpleTag {
     140           0 :   using type = Scalar<DataType>;
     141             : };
     142             : 
     143             : /*!
     144             :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     145             :  * natural log of the conformal factor
     146             :  *
     147             :  * \details If \f$\phi\f$ is the conformal factor, then we define
     148             :  * \f$P_i = \partial_i ln(\phi) = \frac{\partial_i \phi}{\phi}\f$.
     149             :  */
     150             : template <size_t Dim, typename Frame, typename DataType>
     151           1 : struct FieldP : db::SimpleTag {
     152           0 :   using type = tnsr::i<DataType, Dim, Frame>;
     153             : };
     154             : 
     155             : /*!
     156             :  * \brief Identity which is analytically negative one half the spatial
     157             :  * derivative of the inverse conformal spatial metric
     158             :  *
     159             :  * \details We define:
     160             :  * \f{align}
     161             :  *     D_k{}^{ij} &=
     162             :  *         \tilde{\gamma}^{in} \tilde{\gamma}^{mj} D_{knm} =
     163             :  *         -\frac{1}{2} \partial_k \tilde{\gamma}^{ij}
     164             :  * \f}
     165             :  * where \f$\tilde{\gamma}^{ij}\f$ and \f$D_{ijk}\f$ are the inverse conformal
     166             :  * spatial metric and the CCZ4 auxiliary variable defined by
     167             :  * `Ccz4::Tags::FieldD`, respectively.
     168             :  */
     169             : template <size_t Dim, typename Frame, typename DataType>
     170           1 : struct FieldDUp : db::SimpleTag {
     171           0 :   using type = tnsr::iJJ<DataType, Dim, Frame>;
     172             : };
     173             : 
     174             : /*!
     175             :  * \brief The conformal spatial christoffel symbols of the second kind
     176             :  *
     177             :  * \details We define:
     178             :  * \f{align}
     179             :  *     \tilde{\Gamma}^k_{ij} &=
     180             :  *         \tilde{\gamma}^{kl} (D_{ijl} + D_{jil} - D_{lij})
     181             :  * \f}
     182             :  * where \f$\tilde{\gamma}^{ij}\f$ and \f$D_{ijk}\f$ are the inverse conformal
     183             :  * spatial metric and the CCZ4 auxiliary variable defined by
     184             :  * `Ccz4::Tags::InverseConformalMetric` and `Ccz4::Tags::FieldD`, respectively.
     185             :  */
     186             : template <size_t Dim, typename Frame, typename DataType>
     187           1 : struct ConformalChristoffelSecondKind : db::SimpleTag {
     188           0 :   using type = tnsr::Ijj<DataType, Dim, Frame>;
     189             : };
     190             : 
     191             : /*!
     192             :  * \brief The spatial derivative of the conformal spatial christoffel symbols
     193             :  * of the second kind
     194             :  *
     195             :  * \details We define:
     196             :  * \f{align}
     197             :  *     \partial_k \tilde{\Gamma}^m{}_{ij} &=
     198             :  *       -2 D_k{}^{ml} (D_{ijl} + D_{jil} - D_{lij}) +
     199             :  *       \tilde{\gamma}^{ml}(\partial_{(k} D_{i)jl} + \partial_{(k} D_{j)il} -
     200             :  *       \partial_{(k} D_{l)ij})
     201             :  * \f}
     202             :  * where \f$\tilde{\gamma}^{ij}\f$, \f$D_{ijk}\f$, \f$\partial_l D_{ijk}\f$, and
     203             :  * \f$D_k{}^{ij}\f$ are the inverse conformal spatial metric defined by
     204             :  * `Ccz4::Tags::InverseConformalMetric`, the CCZ4 auxiliary variable defined by
     205             :  * `Ccz4::Tags::FieldD`, its spatial derivative, and the CCZ4 identity defined
     206             :  * by `Ccz4::Tags::FieldDUp`.
     207             :  */
     208             : template <size_t Dim, typename Frame, typename DataType>
     209           1 : struct DerivConformalChristoffelSecondKind : db::SimpleTag {
     210           0 :   using type = tnsr::iJkk<DataType, Dim, Frame>;
     211             : };
     212             : 
     213             : /*!
     214             :  * \brief The spatial christoffel symbols of the second kind
     215             :  *
     216             :  * \details We define:
     217             :  * \f{align}
     218             :  *     \Gamma^k_{ij} &= \tilde{\Gamma}^k_{ij} -
     219             :  *         \tilde{\gamma}^{kl} (\tilde{\gamma}_{jl} P_i +
     220             :  *                              \tilde{\gamma}_{il} P_j -
     221             :  *                              \tilde{\gamma}_{ij} P_l)
     222             :  * \f}
     223             :  * where \f$\tilde{\gamma}^{ij}\f$, \f$\tilde{\gamma}_{ij}\f$,
     224             :  * \f$\tilde{\Gamma}^k_{ij}\f$, and \f$P_i\f$ are the conformal spatial metric,
     225             :  * the inverse conformal spatial metric, the conformal spatial christoffel
     226             :  * symbols of the second kind, and the CCZ4 auxiliary variable defined by
     227             :  * `Ccz4::Tags::ConformalMetric`, `Ccz4::Tags::InverseConformalMetric`,
     228             :  * `Ccz4::Tags::ConformalChristoffelSecondKind`, and `Ccz4::Tags::FieldP`,
     229             :  * respectively.
     230             :  */
     231             : template <size_t Dim, typename Frame, typename DataType>
     232           1 : struct ChristoffelSecondKind : db::SimpleTag {
     233           0 :   using type = tnsr::Ijj<DataType, Dim, Frame>;
     234             : };
     235             : 
     236             : /*!
     237             :  * \brief The spatial Ricci tensor
     238             :  *
     239             :  * \details See `Ccz4::spatial_ricci_tensor()` for details.
     240             :  */
     241             : template <size_t Dim, typename Frame, typename DataType>
     242           1 : struct Ricci : db::SimpleTag {
     243           0 :   using type = tnsr::ii<DataType, Dim, Frame>;
     244             : };
     245             : 
     246             : /*!
     247             :  * \brief The gradient of the gradient of the lapse
     248             :  *
     249             :  * \details We define:
     250             :  * \f{align}
     251             :  *     \nabla_i \nabla_j \alpha &= \alpha A_i A_j -
     252             :  *                 \alpha \Gamma^k{}_{ij} A_k + \alpha \partial_{(i} A_{j)}
     253             :  * \f}
     254             :  * where \f$\alpha\f$, \f$\Gamma^k{}_{ij}\f$, \f$A_i\f$, and
     255             :  * \f$\partial_j A_i\f$ are the lapse, spatial christoffel symbols of the second
     256             :  * kind, the CCZ4 auxiliary variable defined by `Ccz4::Tags::FieldA`, and its
     257             :  * spatial derivative, respectively.
     258             :  */
     259             : template <size_t Dim, typename Frame, typename DataType>
     260           1 : struct GradGradLapse : db::SimpleTag {
     261           0 :   using type = tnsr::ij<DataType, Dim, Frame>;
     262             : };
     263             : 
     264             : /*!
     265             :  * \brief The divergence of the lapse
     266             :  *
     267             :  * \details We define:
     268             :  * \f{align}
     269             :  *     \nabla^i \nabla_i \alpha &= \phi^2 \tilde{\gamma}^{ij}
     270             :  *         (\nabla_i \nabla_j \alpha)
     271             :  * \f}
     272             :  * where \f$\phi\f$, \f$\tilde{\gamma}^{ij}\f$, and
     273             :  * \f$\nabla_i \nabla_j \alpha\f$ are the conformal factor, inverse conformal
     274             :  * spatial metric, and the gradient of the gradient of the lapse defined by
     275             :  * `Ccz4::Tags::ConformalFactor`, `Ccz4::Tags::InverseConformalMetric`, and
     276             :  * `Ccz4::Tags::GradGradLapse`, respectively.
     277             :  */
     278             : template <typename DataType>
     279           1 : struct DivergenceLapse : db::SimpleTag {
     280           0 :   using type = Scalar<DataType>;
     281             : };
     282             : 
     283             : /*!
     284             :  * \brief The contraction of the conformal spatial Christoffel symbols of the
     285             :  * second kind
     286             :  *
     287             :  * \details See `Ccz4::contracted_conformal_christoffel_second_kind()` for
     288             :  * details.
     289             :  */
     290             : template <size_t Dim, typename Frame, typename DataType>
     291           1 : struct ContractedConformalChristoffelSecondKind : db::SimpleTag {
     292           0 :   using type = tnsr::I<DataType, Dim, Frame>;
     293             : };
     294             : 
     295             : /*!
     296             :  * \brief The spatial derivative of the contraction of the conformal spatial
     297             :  * Christoffel symbols of the second kind
     298             :  *
     299             :  * \details See `Ccz4::deriv_contracted_conformal_christoffel_second_kind()` for
     300             :  * details.
     301             :  */
     302             : template <size_t Dim, typename Frame, typename DataType>
     303           1 : struct DerivContractedConformalChristoffelSecondKind : db::SimpleTag {
     304           0 :   using type = tnsr::iJ<DataType, Dim, Frame>;
     305             : };
     306             : 
     307             : /*!
     308             :  * \brief The CCZ4 evolved variable \f$\hat{\Gamma}^i\f$
     309             :  *
     310             :  * \details This must satisfy the identity:
     311             :  *
     312             :  * \f{align}
     313             :  *     \hat{\Gamma}^i &= \tilde{\Gamma}^i + 2 \tilde{\gamma}^{ij} Z_j
     314             :  * \f}
     315             :  *
     316             :  * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
     317             :  * defined by `Ccz4::Tags::InverseConformalMetric`, \f$Z_i\f$ is the spatial
     318             :  * part of the Z4 constraint defined by `Ccz4::Tags::SpatialZ4Constraint`, and
     319             :  * \f$\tilde{\Gamma}^i\f$ is the contraction of the conformal spatial
     320             :  * christoffel symbols of the second kind defined by
     321             :  * `Ccz4::Tags::ContractedConformalChristoffelSecondKind`.
     322             :  */
     323             : template <size_t Dim, typename Frame, typename DataType>
     324           1 : struct GammaHat : db::SimpleTag {
     325           0 :   using type = tnsr::I<DataType, Dim, Frame>;
     326             : };
     327             : 
     328             : /*!
     329             :  * \brief The spatial part of the Z4 constraint
     330             :  *
     331             :  * \details See `Ccz4::spatial_z4_constraint` for details.
     332             :  */
     333             : template <size_t Dim, typename Frame, typename DataType>
     334           1 : struct SpatialZ4Constraint : db::SimpleTag {
     335           0 :   using type = tnsr::i<DataType, Dim, Frame>;
     336             : };
     337             : 
     338             : /*!
     339             :  * \brief The spatial part of the upper Z4 constraint
     340             :  *
     341             :  * \details See `Ccz4::upper_spatial_z4_constraint` for details.
     342             :  */
     343             : template <size_t Dim, typename Frame, typename DataType>
     344           1 : struct SpatialZ4ConstraintUp : db::SimpleTag {
     345           0 :   using type = tnsr::I<DataType, Dim, Frame>;
     346             : };
     347             : 
     348             : /*!
     349             :  * \brief The gradient of the spatial part of the Z4 constraint
     350             :  *
     351             :  * \details See `Ccz4::grad_spatial_z4_constraint` for details.
     352             :  */
     353             : template <size_t Dim, typename Frame, typename DataType>
     354           1 : struct GradSpatialZ4Constraint : db::SimpleTag {
     355           0 :   using type = tnsr::ij<DataType, Dim, Frame>;
     356             : };
     357             : 
     358             : /*!
     359             :  * \brief The sum of the Ricci scalar and twice the divergence of the upper
     360             :  * spatial Z4 constraint
     361             :  *
     362             :  * \details See `Ccz4::ricci_scalar_plus_divergence_z4_constraint` for details.
     363             :  */
     364             : template <typename DataType>
     365           1 : struct RicciScalarPlusDivergenceZ4Constraint : db::SimpleTag {
     366           0 :   using type = Scalar<DataType>;
     367             : };
     368             : }  // namespace Tags
     369             : 
     370           1 : namespace OptionTags {
     371             : /*!
     372             :  * \ingroup OptionGroupsGroup
     373             :  * Groups option tags related to the CCZ4 evolution system.
     374             :  */
     375           1 : struct Group {
     376           0 :   static std::string name() { return "Ccz4"; }
     377           0 :   static constexpr Options::String help{
     378             :       "Options for the CCZ4 evolution system"};
     379           0 :   using group = evolution::OptionTags::SystemGroup;
     380             : };
     381             : }  // namespace OptionTags
     382             : }  // namespace Ccz4

Generated by: LCOV version 1.14