SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Ccz4 - Tags.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 42.6 % 94 40
Test Date: 2026-10-22 17:29:42
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/String.hpp"
      14              : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
      15              : #include "PointwiseFunctions/GeneralRelativity/Tags/Conformal.hpp"
      16              : 
      17              : namespace Ccz4 {
      18            1 : namespace OptionTags {
      19              : /*!
      20              :  * \ingroup OptionGroupsGroup
      21              :  * Groups option tags related to the CCZ4 evolution system.
      22              :  */
      23            1 : struct Ccz4Group {
      24            0 :   static std::string name() { return "Ccz4"; }
      25            0 :   static constexpr Options::String help{
      26              :       "Options for the CCZ4 evolution system"};
      27            0 :   using group = evolution::OptionTags::SystemGroup;
      28              : };
      29              : 
      30              : /// \copydoc Tags::Kappa1
      31            1 : struct Kappa1 {
      32            0 :   using type = double;
      33              : 
      34            0 :   static constexpr Options::String help = {
      35              :       "The constraint damping parameter kappa_1."};
      36            0 :   using group = Ccz4Group;
      37              : };
      38              : 
      39              : /// \copydoc Tags::Kappa2
      40            1 : struct Kappa2 {
      41            0 :   using type = double;
      42              : 
      43            0 :   static constexpr Options::String help = {
      44              :       "The constraint damping parameter kappa_2."};
      45            0 :   using group = Ccz4Group;
      46              : };
      47              : 
      48              : /// \copydoc Tags::Kappa3
      49            1 : struct Kappa3 {
      50            0 :   using type = double;
      51              : 
      52            0 :   static constexpr Options::String help = {
      53              :       "The constraint damping parameter kappa_3."};
      54            0 :   using group = Ccz4Group;
      55              : };
      56              : }  // namespace OptionTags
      57              : 
      58              : /*!
      59              :  * \brief Tags for the CCZ4 formulation of Einstein equations.
      60              :  * \details The naming convention follows \cite Dumbser2017okk
      61              :  * eq. 12a-12m.
      62              :  */
      63            1 : namespace Tags {
      64              : /*!
      65              :  * \brief The conformal factor that rescales the spatial metric
      66              :  *
      67              :  * \details If \f$\gamma_{ij}\f$ is the spatial metric, then we define
      68              :  * \f$\phi = (det(\gamma_{ij}))^{-1/6}\f$.
      69              :  */
      70              : template <typename DataType>
      71            1 : struct ConformalFactor : db::SimpleTag {
      72            0 :   using type = Scalar<DataType>;
      73              : };
      74              : 
      75              : /*!
      76              :  * \brief The square of the conformal factor that rescales the spatial metric
      77              :  *
      78              :  * \details If \f$\gamma_{ij}\f$ is the spatial metric, then we define
      79              :  * \f$\phi^2 = (det(\gamma_{ij}))^{-1/3}\f$.
      80              :  */
      81              : template <typename DataType>
      82            1 : struct ConformalFactorSquared : db::SimpleTag {
      83            0 :   using type = Scalar<DataType>;
      84              : };
      85              : 
      86              : /*!
      87              :  * \brief The conformally scaled spatial metric
      88              :  *
      89              :  * \details If \f$\phi\f$ is the conformal factor and \f$\gamma_{ij}\f$ is the
      90              :  * spatial metric, then we define
      91              :  * \f$\bar{\gamma}_{ij} = \phi^2 \gamma_{ij}\f$.
      92              :  */
      93              : template <typename DataType, size_t Dim, typename Fr = Frame::Inertial>
      94            1 : using ConformalMetric =
      95              :     gr::Tags::Conformal<gr::Tags::SpatialMetric<DataType, Dim, Fr>, 2>;
      96              : 
      97              : /*!
      98              :  * \brief The conformally scaled inverse spatial metric
      99              :  *
     100              :  * \details If \f$\phi\f$ is the conformal factor and \f$\gamma^{ij}\f$ is the
     101              :  * inverse spatial metric, then we define
     102              :  * \f$\bar{\gamma}^{ij} = \phi^{-2} \gamma^{ij}\f$.
     103              :  */
     104              : template <typename DataType, size_t Dim, typename Frame = Frame::Inertial>
     105            1 : using InverseConformalMetric =
     106              :     gr::Tags::Conformal<gr::Tags::InverseSpatialMetric<DataType, Dim, Frame>,
     107              :                         -2>;
     108              : 
     109              : /*!
     110              :  * \brief The trace-free part of the extrinsic curvature
     111              :  *
     112              :  * \details See `Ccz4::a_tilde()` for details.
     113              :  */
     114              : template <typename DataType, size_t Dim, typename Frame>
     115            1 : struct ATilde : db::SimpleTag {
     116            0 :   using type = tnsr::ii<DataType, Dim, Frame>;
     117              : };
     118              : 
     119              : /*!
     120              :  * \brief The trace of the trace-free part of the extrinsic curvature
     121              :  *
     122              :  * \details We define:
     123              :  *
     124              :  * \f{align}
     125              :  *     tr\tilde{A} &= \tilde{\gamma}^{ij} \tilde{A}_{ij}
     126              :  * \f}
     127              :  *
     128              :  * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
     129              :  * defined by `Ccz4::Tags::InverseConformalMetric` and \f$\tilde{A}_{ij}\f$ is
     130              :  * the trace-free part of the extrinsic curvature defined by
     131              :  * `Ccz4::Tags::ATilde`.
     132              :  */
     133              : template <typename DataType>
     134            1 : struct TraceATilde : db::SimpleTag {
     135            0 :   using type = Scalar<DataType>;
     136              : };
     137              : 
     138              : /*!
     139              :  * \brief The natural log of the lapse
     140              :  */
     141              : template <typename DataType>
     142            1 : struct LogLapse : db::SimpleTag {
     143            0 :   using type = Scalar<DataType>;
     144              : };
     145              : 
     146              : /*!
     147              :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     148              :  * natural log of the lapse
     149              :  *
     150              :  * \details If \f$ \alpha \f$ is the lapse, then we define
     151              :  * \f$A_i = \partial_i ln(\alpha) = \frac{\partial_i \alpha}{\alpha}\f$.
     152              :  */
     153              : template <typename DataType, size_t Dim, typename Frame>
     154            1 : struct FieldA : db::SimpleTag {
     155            0 :   using type = tnsr::i<DataType, Dim, Frame>;
     156              : };
     157              : 
     158              : /*!
     159              :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     160              :  * shift
     161              :  */
     162              : template <typename DataType, size_t Dim, typename Frame>
     163            1 : struct FieldB : db::SimpleTag {
     164            0 :   using type = tnsr::iJ<DataType, Dim, Frame>;
     165              : };
     166              : 
     167              : /*!
     168              :  * \brief Auxiliary variable which is analytically half the spatial derivative
     169              :  * of the conformal spatial metric
     170              :  *
     171              :  * \details If \f$\bar{\gamma}_{ij}\f$ is the conformal spatial metric, then we
     172              :  * define
     173              :  * \f$D_{kij} = \frac{1}{2} \partial_k \bar{\gamma}_{ij}\f$.
     174              :  */
     175              : template <typename DataType, size_t Dim, typename Frame>
     176            1 : struct FieldD : db::SimpleTag {
     177            0 :   using type = tnsr::ijj<DataType, Dim, Frame>;
     178              : };
     179              : 
     180              : /*!
     181              :  * \brief The natural log of the conformal factor
     182              :  */
     183              : template <typename DataType>
     184            1 : struct LogConformalFactor : db::SimpleTag {
     185            0 :   using type = Scalar<DataType>;
     186              : };
     187              : 
     188              : /*!
     189              :  * \brief Auxiliary variable which is analytically the spatial derivative of the
     190              :  * natural log of the conformal factor
     191              :  *
     192              :  * \details If \f$\phi\f$ is the conformal factor, then we define
     193              :  * \f$P_i = \partial_i ln(\phi) = \frac{\partial_i \phi}{\phi}\f$.
     194              :  */
     195              : template <typename DataType, size_t Dim, typename Frame>
     196            1 : struct FieldP : db::SimpleTag {
     197            0 :   using type = tnsr::i<DataType, Dim, Frame>;
     198              : };
     199              : 
     200              : /*!
     201              :  * \brief Identity which is analytically negative one half the spatial
     202              :  * derivative of the inverse conformal spatial metric
     203              :  *
     204              :  * \details We define:
     205              :  * \f{align}
     206              :  *     D_k{}^{ij} &=
     207              :  *         \tilde{\gamma}^{in} \tilde{\gamma}^{mj} D_{knm} =
     208              :  *         -\frac{1}{2} \partial_k \tilde{\gamma}^{ij}
     209              :  * \f}
     210              :  * where \f$\tilde{\gamma}^{ij}\f$ and \f$D_{ijk}\f$ are the inverse conformal
     211              :  * spatial metric and the CCZ4 auxiliary variable defined by
     212              :  * `Ccz4::Tags::FieldD`, respectively.
     213              :  */
     214              : template <typename DataType, size_t Dim, typename Frame>
     215            1 : struct FieldDUp : db::SimpleTag {
     216            0 :   using type = tnsr::iJJ<DataType, Dim, Frame>;
     217              : };
     218              : 
     219              : /*!
     220              :  * \brief The conformal spatial christoffel symbols of the second kind
     221              :  *
     222              :  * \details We define:
     223              :  * \f{align}
     224              :  *     \tilde{\Gamma}^k_{ij} &=
     225              :  *         \tilde{\gamma}^{kl} (D_{ijl} + D_{jil} - D_{lij})
     226              :  * \f}
     227              :  * where \f$\tilde{\gamma}^{ij}\f$ and \f$D_{ijk}\f$ are the inverse conformal
     228              :  * spatial metric and the CCZ4 auxiliary variable defined by
     229              :  * `Ccz4::Tags::InverseConformalMetric` and `Ccz4::Tags::FieldD`, respectively.
     230              :  */
     231              : template <typename DataType, size_t Dim, typename Frame>
     232            1 : struct ConformalChristoffelSecondKind : db::SimpleTag {
     233            0 :   using type = tnsr::Ijj<DataType, Dim, Frame>;
     234              : };
     235              : 
     236              : /*!
     237              :  * \brief The spatial derivative of the conformal spatial christoffel symbols
     238              :  * of the second kind
     239              :  *
     240              :  * \details We define:
     241              :  * \f{align}
     242              :  *     \partial_k \tilde{\Gamma}^m{}_{ij} &=
     243              :  *       -2 D_k{}^{ml} (D_{ijl} + D_{jil} - D_{lij}) +
     244              :  *       \tilde{\gamma}^{ml}(\partial_{(k} D_{i)jl} + \partial_{(k} D_{j)il} -
     245              :  *       \partial_{(k} D_{l)ij})
     246              :  * \f}
     247              :  * where \f$\tilde{\gamma}^{ij}\f$, \f$D_{ijk}\f$, \f$\partial_l D_{ijk}\f$, and
     248              :  * \f$D_k{}^{ij}\f$ are the inverse conformal spatial metric defined by
     249              :  * `Ccz4::Tags::InverseConformalMetric`, the CCZ4 auxiliary variable defined by
     250              :  * `Ccz4::Tags::FieldD`, its spatial derivative, and the CCZ4 identity defined
     251              :  * by `Ccz4::Tags::FieldDUp`.
     252              :  */
     253              : template <typename DataType, size_t Dim, typename Frame>
     254            1 : struct DerivConformalChristoffelSecondKind : db::SimpleTag {
     255            0 :   using type = tnsr::iJkk<DataType, Dim, Frame>;
     256              : };
     257              : 
     258              : /*!
     259              :  * \brief The spatial christoffel symbols of the second kind
     260              :  *
     261              :  * \details We define:
     262              :  * \f{align}
     263              :  *     \Gamma^k_{ij} &= \tilde{\Gamma}^k_{ij} -
     264              :  *         \tilde{\gamma}^{kl} (\tilde{\gamma}_{jl} P_i +
     265              :  *                              \tilde{\gamma}_{il} P_j -
     266              :  *                              \tilde{\gamma}_{ij} P_l)
     267              :  * \f}
     268              :  * where \f$\tilde{\gamma}^{ij}\f$, \f$\tilde{\gamma}_{ij}\f$,
     269              :  * \f$\tilde{\Gamma}^k_{ij}\f$, and \f$P_i\f$ are the conformal spatial metric,
     270              :  * the inverse conformal spatial metric, the conformal spatial christoffel
     271              :  * symbols of the second kind, and the CCZ4 auxiliary variable defined by
     272              :  * `Ccz4::Tags::ConformalMetric`, `Ccz4::Tags::InverseConformalMetric`,
     273              :  * `Ccz4::Tags::ConformalChristoffelSecondKind`, and `Ccz4::Tags::FieldP`,
     274              :  * respectively.
     275              :  */
     276              : template <typename DataType, size_t Dim, typename Frame>
     277            1 : struct ChristoffelSecondKind : db::SimpleTag {
     278            0 :   using type = tnsr::Ijj<DataType, Dim, Frame>;
     279              : };
     280              : 
     281              : /*!
     282              :  * \brief The spatial Ricci tensor
     283              :  *
     284              :  * \details See `Ccz4::spatial_ricci_tensor()` for details.
     285              :  */
     286              : template <typename DataType, size_t Dim, typename Frame>
     287            1 : struct Ricci : db::SimpleTag {
     288            0 :   using type = tnsr::ii<DataType, Dim, Frame>;
     289              : };
     290              : 
     291              : /*!
     292              :  * \brief The gradient of the gradient of the lapse
     293              :  *
     294              :  * \details We define:
     295              :  * \f{align}
     296              :  *     \nabla_i \nabla_j \alpha &= \alpha A_i A_j -
     297              :  *                 \alpha \Gamma^k{}_{ij} A_k + \alpha \partial_{(i} A_{j)}
     298              :  * \f}
     299              :  * where \f$\alpha\f$, \f$\Gamma^k{}_{ij}\f$, \f$A_i\f$, and
     300              :  * \f$\partial_j A_i\f$ are the lapse, spatial christoffel symbols of the second
     301              :  * kind, the CCZ4 auxiliary variable defined by `Ccz4::Tags::FieldA`, and its
     302              :  * spatial derivative, respectively.
     303              :  */
     304              : template <typename DataType, size_t Dim, typename Frame>
     305            1 : struct GradGradLapse : db::SimpleTag {
     306            0 :   using type = tnsr::ij<DataType, Dim, Frame>;
     307              : };
     308              : 
     309              : /*!
     310              :  * \brief The divergence of the lapse
     311              :  *
     312              :  * \details We define:
     313              :  * \f{align}
     314              :  *     \nabla^i \nabla_i \alpha &= \phi^2 \tilde{\gamma}^{ij}
     315              :  *         (\nabla_i \nabla_j \alpha)
     316              :  * \f}
     317              :  * where \f$\phi\f$, \f$\tilde{\gamma}^{ij}\f$, and
     318              :  * \f$\nabla_i \nabla_j \alpha\f$ are the conformal factor, inverse conformal
     319              :  * spatial metric, and the gradient of the gradient of the lapse defined by
     320              :  * `Ccz4::Tags::ConformalFactor`, `Ccz4::Tags::InverseConformalMetric`, and
     321              :  * `Ccz4::Tags::GradGradLapse`, respectively.
     322              :  */
     323              : template <typename DataType>
     324            1 : struct DivergenceLapse : db::SimpleTag {
     325            0 :   using type = Scalar<DataType>;
     326              : };
     327              : 
     328              : /*!
     329              :  * \brief The contraction of the conformal spatial Christoffel symbols of the
     330              :  * second kind
     331              :  *
     332              :  * \details See `Ccz4::contracted_conformal_christoffel_second_kind()` for
     333              :  * details.
     334              :  */
     335              : template <typename DataType, size_t Dim, typename Frame>
     336            1 : struct ContractedConformalChristoffelSecondKind : db::SimpleTag {
     337            0 :   using type = tnsr::I<DataType, Dim, Frame>;
     338              : };
     339              : 
     340              : /*!
     341              :  * \brief The spatial derivative of the contraction of the conformal spatial
     342              :  * Christoffel symbols of the second kind
     343              :  *
     344              :  * \details See `Ccz4::deriv_contracted_conformal_christoffel_second_kind()` for
     345              :  * details.
     346              :  */
     347              : template <typename DataType, size_t Dim, typename Frame>
     348            1 : struct DerivContractedConformalChristoffelSecondKind : db::SimpleTag {
     349            0 :   using type = tnsr::iJ<DataType, Dim, Frame>;
     350              : };
     351              : 
     352              : /*!
     353              :  * \brief The CCZ4 evolved variable \f$\hat{\Gamma}^i\f$
     354              :  *
     355              :  * \details This must satisfy the identity:
     356              :  *
     357              :  * \f{align}
     358              :  *     \hat{\Gamma}^i &= \tilde{\Gamma}^i + 2 \tilde{\gamma}^{ij} Z_j
     359              :  * \f}
     360              :  *
     361              :  * where \f$\tilde{\gamma}^{ij}\f$ is the inverse conformal spatial metric
     362              :  * defined by `Ccz4::Tags::InverseConformalMetric`, \f$Z_i\f$ is the spatial
     363              :  * part of the Z4 constraint defined by `Ccz4::Tags::SpatialZ4Constraint`, and
     364              :  * \f$\tilde{\Gamma}^i\f$ is the contraction of the conformal spatial
     365              :  * christoffel symbols of the second kind defined by
     366              :  * `Ccz4::Tags::ContractedConformalChristoffelSecondKind`.
     367              :  */
     368              : template <typename DataType, size_t Dim, typename Frame>
     369            1 : struct GammaHat : db::SimpleTag {
     370            0 :   using type = tnsr::I<DataType, Dim, Frame>;
     371              : };
     372              : 
     373              : /*!
     374              :  * \brief The spatial part of the Z4 constraint
     375              :  *
     376              :  * \details See `Ccz4::spatial_z4_constraint` for details.
     377              :  */
     378              : template <typename DataType, size_t Dim, typename Frame>
     379            1 : struct SpatialZ4Constraint : db::SimpleTag {
     380            0 :   using type = tnsr::i<DataType, Dim, Frame>;
     381              : };
     382              : 
     383              : /*!
     384              :  * \brief The spatial part of the upper Z4 constraint
     385              :  *
     386              :  * \details See `Ccz4::upper_spatial_z4_constraint` for details.
     387              :  */
     388              : template <typename DataType, size_t Dim, typename Frame>
     389            1 : struct SpatialZ4ConstraintUp : db::SimpleTag {
     390            0 :   using type = tnsr::I<DataType, Dim, Frame>;
     391              : };
     392              : 
     393              : /*!
     394              :  * \brief The gradient of the spatial part of the Z4 constraint
     395              :  *
     396              :  * \details See `Ccz4::grad_spatial_z4_constraint` for details.
     397              :  */
     398              : template <typename DataType, size_t Dim, typename Frame>
     399            1 : struct GradSpatialZ4Constraint : db::SimpleTag {
     400            0 :   using type = tnsr::ij<DataType, Dim, Frame>;
     401              : };
     402              : 
     403              : /*!
     404              :  * \brief The sum of the Ricci scalar and twice the divergence of the upper
     405              :  * spatial Z4 constraint
     406              :  *
     407              :  * \details See `Ccz4::ricci_scalar_plus_divergence_z4_constraint` for details.
     408              :  */
     409              : template <typename DataType>
     410            1 : struct RicciScalarPlusDivergenceZ4Constraint : db::SimpleTag {
     411            0 :   using type = Scalar<DataType>;
     412              : };
     413              : 
     414              : /*!
     415              :  * \brief The projection of the Z4 constraint vector along the normal direction.
     416              :  *
     417              :  *
     418              :  */
     419              : template <typename DataType>
     420            1 : struct Theta : db::SimpleTag {
     421            0 :   using type = Scalar<DataType>;
     422              : };
     423              : 
     424              : /*!
     425              :  * \brief Auxiliary variable b in the gamma-driver condition
     426              :  * eq. 12c of \cite Dumbser2017okk.
     427              :  */
     428              : template <typename DataType, size_t Dim, typename Frame>
     429            1 : struct AuxiliaryShiftB : db::SimpleTag {
     430            0 :   using type = tnsr::I<DataType, Dim, Frame>;
     431              : };
     432              : 
     433              : /*!
     434              :  * \brief The parameter f in the gamma-driver condition
     435              :  * eq. 12c of \cite Dumbser2017okk.
     436              :  *
     437              :  */
     438            1 : struct GammaDriverParam
     439              :     : db::SimpleTag {
     440            0 :   using type = double;
     441              : };
     442              : 
     443              : /*!
     444              :  * \brief Free parameter \f$ kappa_1 \f$ related to
     445              :  * constraint damping
     446              :  * in eq. 12f of \cite Dumbser2017okk.
     447              :  */
     448            1 : struct Kappa1 : db::SimpleTag {
     449            0 :   using type = double;
     450            0 :   using option_tags = tmpl::list<OptionTags::Kappa1>;
     451              : 
     452            0 :   static constexpr bool pass_metavariables = false;
     453            0 :   static type create_from_options(const double kappa_1) { return kappa_1; }
     454              : };
     455              : 
     456              : /*!
     457              :  * \brief Free parameter \f$ kappa_2 \f$ related to
     458              :  * constraint damping
     459              :  * in eq. 12f of \cite Dumbser2017okk.
     460              :  */
     461            1 : struct Kappa2 : db::SimpleTag {
     462            0 :   using type = double;
     463            0 :   using option_tags = tmpl::list<OptionTags::Kappa2>;
     464              : 
     465            0 :   static constexpr bool pass_metavariables = false;
     466            0 :   static type create_from_options(const double kappa_2) { return kappa_2; }
     467              : };
     468              : 
     469              : /*!
     470              :  * \brief Free parameter \f$ kappa_3 \f$ related to
     471              :  * constraint damping
     472              :  * in eq. 12h of \cite Dumbser2017okk.
     473              :  */
     474            1 : struct Kappa3 : db::SimpleTag {
     475            0 :   using type = double;
     476            0 :   using option_tags = tmpl::list<OptionTags::Kappa3>;
     477              : 
     478            0 :   static constexpr bool pass_metavariables = false;
     479            0 :   static type create_from_options(const double kappa_3) { return kappa_3; }
     480              : };
     481              : 
     482              : /*!
     483              :  * \brief Free parameter \f$ K_0 \f$ in 1+log slicing
     484              :  * in eq. 12b of \cite Dumbser2017okk.
     485              :  */
     486              : template <typename DataType>
     487            1 : struct K0 : db::SimpleTag {
     488            0 :   using type = Scalar<DataType>;
     489              : };
     490              : 
     491              : /*!
     492              :  * \brief The parameter \f$ \eta \f$ in the gamma-driver
     493              :  * condition eq. 12i of \cite Dumbser2017okk.
     494              :  *
     495              :  */
     496              : template <typename DataType>
     497            1 : struct Eta : db::SimpleTag {
     498            0 :   using type = Scalar<DataType>;
     499              : };
     500              : }  // namespace Tags
     501              : }  // namespace Ccz4
        

Generated by: LCOV version 2.0-1