SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Cce - Tags.hpp Hit Total Coverage
Commit: c3e43f8d41800b0ecefb9d1393f1de1d5a280c8f Lines: 68 187 36.4 %
Date: 2026-07-24 22:09:25
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 "DataStructures/DataBox/Prefixes.hpp"
       7             : #include "DataStructures/DataBox/Tag.hpp"
       8             : #include "DataStructures/DataBox/TagName.hpp"
       9             : #include "DataStructures/SpinWeighted.hpp"
      10             : #include "DataStructures/Tensor/Tensor.hpp"
      11             : #include "DataStructures/Tensor/TypeAliases.hpp"
      12             : #include "Evolution/Systems/Cce/InterfaceManagers/GhInterfaceManager.hpp"
      13             : #include "Evolution/Systems/Cce/InterfaceManagers/GhLockstep.hpp"
      14             : #include "NumericalAlgorithms/SpinWeightedSphericalHarmonics/SwshTags.hpp"
      15             : 
      16             : namespace Cce {
      17             : 
      18             : /// \cond
      19             : struct MetricWorldtubeDataManager;
      20             : template <typename ToInterpolate, typename Tag>
      21             : struct ScriPlusInterpolationManager;
      22             : /// \endcond
      23             : 
      24             : /// Tags for Cauchy Characteristic Extraction routines
      25             : namespace Tags {
      26             : 
      27             : // Bondi parameter tags
      28             : 
      29             : /// Bondi parameter \f$\beta\f$
      30           1 : struct BondiBeta : db::SimpleTag {
      31           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
      32             : };
      33             : 
      34             : /// Bondi parameter \f$J\f$
      35           1 : struct BondiJ : db::SimpleTag {
      36           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
      37           0 :   static std::string name() { return "J"; }
      38             : };
      39             : 
      40             : // The scalar field in scalar-tensor theory
      41           0 : struct KleinGordonPsi : db::SimpleTag {
      42           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
      43           0 :   static std::string name() { return "KGPsi"; }
      44             : };
      45             : 
      46             : }  // namespace Tags
      47             : }  // namespace Cce
      48             : 
      49             : namespace Tags {
      50             : /// \cond
      51             : template <>
      52             : struct dt<Cce::Tags::BondiJ> : db::PrefixTag, db::SimpleTag {
      53             :   static std::string name() { return "H"; }
      54             :   using type = Scalar<::SpinWeighted<ComplexDataVector, 2>>;
      55             :   using tag = Cce::Tags::BondiJ;
      56             : };
      57             : 
      58             : template <>
      59             : struct dt<Cce::Tags::KleinGordonPsi> : db::PrefixTag, db::SimpleTag {
      60             :   static std::string name() { return "KGPi"; }
      61             :   using type = Scalar<::SpinWeighted<ComplexDataVector, 0>>;
      62             :   using tag = Cce::Tags::KleinGordonPsi;
      63             : };
      64             : /// \endcond
      65             : }  // namespace Tags
      66             : 
      67             : namespace Cce {
      68             : namespace Tags {
      69             : /// \brief Bondi parameter \f$H = \partial_u J\f$.
      70             : /// \note The notation in the literature is not consistent regarding this
      71             : /// quantity, or whether it is denoted by an \f$H\f$ at all. The SpECTRE CCE
      72             : /// module consistently uses it to describe the (retarded) partial time
      73             : /// derivative of \f$J\f$ at fixed compactified radius \f$y\f$ (to be contrasted
      74             : /// with the physical Bondi radius, which is not directly used for numerical
      75             : /// grids).
      76           1 : using BondiH = ::Tags::dt<BondiJ>;
      77             : 
      78             : /// \brief Klein-Gordon variable \f$\Pi = \partial_u \psi\f$.
      79           1 : using KleinGordonPi = ::Tags::dt<KleinGordonPsi>;
      80             : 
      81             : /// Bondi parameter \f$\bar{J}\f$
      82           1 : struct BondiJbar : db::SimpleTag {
      83           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -2>>;
      84           0 :   static std::string name() { return "Jbar"; }
      85             : };
      86             : 
      87             : /// Bondi parameter \f$K = \sqrt{1 + J \bar{J}}\f$
      88           1 : struct BondiK : db::SimpleTag {
      89           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
      90           0 :   static std::string name() { return "K"; }
      91             : };
      92             : 
      93             : /// Bondi parameter \f$Q\f$
      94           1 : struct BondiQ : db::SimpleTag {
      95           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
      96           0 :   static std::string name() { return "Q"; }
      97             : };
      98             : 
      99             : /// Bondi parameter \f$\bar{Q}\f$
     100           1 : struct BondiQbar : db::SimpleTag {
     101           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     102           0 :   static std::string name() { return "Qbar"; }
     103             : };
     104             : 
     105             : /// Bondi parameter \f$U\f$
     106           1 : struct BondiU : db::SimpleTag {
     107           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
     108           0 :   static std::string name() { return "U"; }
     109             : };
     110             : 
     111             : /// The surface quantity of Bondi \f$U\f$ evaluated at the null spacetime
     112             : /// boundary \f$\mathcal I^+\f$
     113           1 : struct BondiUAtScri : db::SimpleTag {
     114           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
     115             : };
     116             : 
     117             : /// Bondi parameter \f$\bar{U}\f$
     118           1 : struct BondiUbar : db::SimpleTag {
     119           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     120           0 :   static std::string name() { return "Ubar"; }
     121             : };
     122             : 
     123             : /// Bondi parameter \f$W\f$
     124           1 : struct BondiW : db::SimpleTag {
     125           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     126           0 :   static std::string name() { return "W"; }
     127             : };
     128             : 
     129             : /// Bondi parameter \f$\bar{J}\f$ in the Cauchy frame
     130           1 : struct BondiJCauchyView : db::SimpleTag {
     131           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     132             : };
     133             : 
     134             : /// The derivative with respect to the numerical coordinate \f$y = 1 - 2R/r\f$,
     135             : /// where \f$R(u, \theta, \phi)\f$ is Bondi radius of the worldtube.
     136             : template <typename Tag>
     137           1 : struct Dy : db::PrefixTag, db::SimpleTag {
     138           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     139           0 :   using tag = Tag;
     140           0 :   static const size_t dimension_to_differentiate = 2;
     141             : };
     142             : 
     143             : /// The derivative with respect to Bondi \f$r\f$
     144             : template <typename Tag>
     145           1 : struct Dr : db::PrefixTag, db::SimpleTag {
     146           0 :   using type = typename Tag::type;
     147           0 :   using tag = Tag;
     148             : };
     149             : 
     150             : /// The derivative with respect to \f$\lambda\f$,
     151             : ///  where \f$\lambda\f$ is an affine parameter along \f$l\f$, see
     152             : ///  Eq. (19a) of \cite Moxon2020gha.
     153             : template <typename Tag>
     154           1 : struct Dlambda : db::PrefixTag, db::SimpleTag {
     155           0 :   using type = typename Tag::type;
     156           0 :   using tag = Tag;
     157             : };
     158             : 
     159             : /// The derivative with respect to Bondi retarded time \f$u\f$.
     160             : ///
     161             : /// \note The worldtube boundary tag `Du<Dr<BondiJ>>` is the time derivative
     162             : /// *following the worldtube* (at constant numerical coordinate
     163             : /// \f$\breve y = -1\f$), i.e.
     164             : /// \f$\partial_{\breve u}\partial_r J = \frac{d}{d u}(\partial_r J)\f$, not a
     165             : /// derivative at constant Bondi \f$r\f$. See
     166             : /// `BondiWorldtubeDataManager::populate_boundary_du_dr_j` and the fixed-\f$y\f$
     167             : /// vs. fixed-\f$r\f$ notes in `BoundaryData.hpp`.
     168             : template <typename Tag>
     169           1 : struct Du : db::PrefixTag, db::SimpleTag {
     170           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     171           0 :   using tag = Tag;
     172             : };
     173             : 
     174             : /// The spin-weight 2 angular Jacobian factor in the partially flat Bondi-like
     175             : /// coordinates, see Eq. (31a) of \cite Moxon2020gha
     176           1 : struct PartiallyFlatGaugeC : db::SimpleTag {
     177           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     178             : };
     179             : 
     180             : /// The spin-weight 0 angular Jacobian factor in the partially flat Bondi-like
     181             : /// coordinates, see Eq. (31b) of \cite Moxon2020gha
     182           1 : struct PartiallyFlatGaugeD : db::SimpleTag {
     183           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     184             : };
     185             : 
     186             : /// The spin-weight 2 angular Jacobian factor in the Cauchy coordinates, similar
     187             : /// to Eq. (31a) of \cite Moxon2020gha, but without hat.
     188           1 : struct CauchyGaugeC : db::SimpleTag {
     189           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     190             : };
     191             : 
     192             : /// The spin-weight 0 angular Jacobian factor in the Cauchy coordinates, similar
     193             : /// to Eq. (31b) of \cite Moxon2020gha, but without hat.
     194           1 : struct CauchyGaugeD : db::SimpleTag {
     195           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     196             : };
     197             : 
     198             : /// The conformal factor in the partially flat Bondi-like coordinates,
     199             : /// associated with an angular transformation, see Eq. (32) of
     200             : /// \cite Moxon2020gha
     201           1 : struct PartiallyFlatGaugeOmega : db::SimpleTag {
     202           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     203             : };
     204             : 
     205             : /// The conformal factor in the Cauchy coordinates, similar to Eq. (32) of
     206             : /// \cite Moxon2020gha, but without hat.
     207           1 : struct CauchyGaugeOmega : db::SimpleTag {
     208           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     209             : };
     210             : 
     211           0 : struct News : db::SimpleTag {
     212           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -2>>;
     213             : };
     214             : 
     215             : // For expressing the Cauchy angular coordinates for the worldtube data in terms
     216             : // of the evolution angular coordinates.
     217           0 : struct CauchyAngularCoords : db::SimpleTag {
     218           0 :   using type = tnsr::i<DataVector, 2, ::Frame::Spherical<::Frame::Inertial>>;
     219             : };
     220             : 
     221             : /// The angular coordinates for the partially flat Bondi-like coordinates.
     222           1 : struct PartiallyFlatAngularCoords : db::SimpleTag {
     223           0 :   using type = tnsr::i<DataVector, 2, ::Frame::Spherical<::Frame::Inertial>>;
     224             : };
     225             : 
     226             : // For expressing the Cauchy Cartesian coordinates for the worldtube data in
     227             : // terms of the evolution angular coordinates.
     228           0 : struct CauchyCartesianCoords : db::SimpleTag {
     229           0 :   using type = tnsr::i<DataVector, 3>;
     230             : };
     231             : 
     232             : /// The partially flat Bondi-like coordinates.
     233           1 : struct PartiallyFlatCartesianCoords : db::SimpleTag {
     234           0 :   using type = tnsr::i<DataVector, 3>;
     235             : };
     236             : 
     237             : /// The asymptotically inertial retarded time in terms of the evolution time
     238             : /// variable
     239           1 : struct InertialRetardedTime : db::SimpleTag {
     240           0 :   using type = Scalar<DataVector>;
     241             : };
     242             : 
     243             : /// Represents \f$\eth u_{\rm inertial}\f$, which is a useful quantity for
     244             : /// asymptotic coordinate transformations.
     245           1 : struct EthInertialRetardedTime : db::SimpleTag {
     246           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
     247             : };
     248             : 
     249             : /// Complex storage form for the asymptotically inertial retarded time, for
     250             : /// taking spin-weighted derivatives
     251           1 : struct ComplexInertialRetardedTime : db::SimpleTag {
     252           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     253             : };
     254             : 
     255             : // prefix tags associated with the integrands which are used as input to solvers
     256             : // for the CCE equations
     257             : 
     258             : /// A prefix tag representing a quantity that will appear on the right-hand side
     259             : /// of an explicitly regular differential equation
     260             : template <typename Tag>
     261           1 : struct Integrand : db::PrefixTag, db::SimpleTag {
     262           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     263           0 :   using tag = Tag;
     264             : };
     265             : 
     266             : /// A prefix tag representing the boundary data for a quantity on the extraction
     267             : /// surface.
     268             : template <typename Tag>
     269           1 : struct BoundaryValue : db::PrefixTag, db::SimpleTag {
     270           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     271           0 :   using tag = Tag;
     272             : };
     273             : 
     274             : /// A prefix tag representing the gauge-transformed boundary data for a quantity
     275             : /// on the extraction surface.
     276             : template <typename Tag>
     277           1 : struct EvolutionGaugeBoundaryValue : db::PrefixTag, db::SimpleTag {
     278           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     279           0 :   using tag = Tag;
     280             : };
     281             : 
     282             : /// A prefix tag representing the coefficient of a pole part of the right-hand
     283             : /// side of a singular differential equation
     284             : template <typename Tag>
     285           1 : struct PoleOfIntegrand : db::PrefixTag, db::SimpleTag {
     286           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     287           0 :   using tag = Tag;
     288             : };
     289             : 
     290             : /// A prefix tag representing the regular part of the right-hand side of a
     291             : /// regular differential equation
     292             : template <typename Tag>
     293           1 : struct RegularIntegrand : db::PrefixTag, db::SimpleTag {
     294           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     295           0 :   using tag = Tag;
     296             : };
     297             : 
     298             : /// A prefix tag representing a linear factor that acts on `Tag`. To determine
     299             : /// the spin weight, It is assumed that the linear factor plays the role of
     300             : /// \f$L\f$ in an equation of the form,
     301             : /// \f$ (y - 1) \partial_y H + L H + L^\prime \bar{H} = A + (1 - y) B \f$
     302             : template <typename Tag>
     303           1 : struct LinearFactor : db::PrefixTag, db::SimpleTag {
     304           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     305           0 :   using tag = Tag;
     306             : };
     307             : 
     308             : /// A prefix tag representing a linear factor that acts on `Tag`. To determine
     309             : /// the spin weight, it is assumed that the linear factor plays the role of
     310             : /// \f$L^\prime\f$ in an equation of the form,
     311             : /// \f$ (y - 1) \partial_y H + L H + L^\prime \bar{H} = A + (1 - y) B \f$
     312             : template <typename Tag>
     313           1 : struct LinearFactorForConjugate : db::PrefixTag, db::SimpleTag {
     314           0 :   using type =
     315             :       Scalar<SpinWeighted<ComplexDataVector, 2 * Tag::type::type::spin>>;
     316           0 :   using tag = Tag;
     317             : };
     318             : 
     319             : // Below are additional tags for values which are frequently used in CCE
     320             : // calculations, and therefore worth caching
     321             : 
     322             : /// Coordinate value \f$(1 - y)\f$, which will be cached and sent to the
     323             : /// implementing functions
     324           1 : struct OneMinusY : db::SimpleTag {
     325           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     326             : };
     327             : 
     328             : /// A tag for the first time derivative of the worldtube parameter
     329             : /// \f$\partial_u R\f$, where \f$R(u, \theta, \phi)\f$ is Bondi
     330             : /// radius of the worldtube.
     331           1 : struct DuR : db::SimpleTag {
     332           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     333             : };
     334             : 
     335             : /// The value \f$\partial_u R / R\f$, where \f$R(u, \theta, \phi)\f$ is Bondi
     336             : /// radius of the worldtube.
     337           1 : struct DuRDividedByR : db::SimpleTag {
     338           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     339             : };
     340             : 
     341             : /// The value \f$\eth R / R\f$, where \f$R(u, \theta, \phi)\f$ is Bondi
     342             : /// radius of the worldtube.
     343           1 : struct EthRDividedByR : db::SimpleTag {
     344           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
     345           0 :   using derivative_kind = Spectral::Swsh::Tags::Eth;
     346           0 :   static constexpr int spin = 1;
     347             : };
     348             : 
     349             : /// The value \f$\eth \eth R / R\f$, where \f$R(u, \theta, \phi)\f$ is Bondi
     350             : /// radius of the worldtube.
     351           1 : struct EthEthRDividedByR : db::SimpleTag {
     352           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     353           0 :   using derivative_kind = Spectral::Swsh::Tags::EthEth;
     354           0 :   static constexpr int spin = 2;
     355             : };
     356             : 
     357             : /// The value \f$\eth \bar{\eth} R / R\f$, where \f$R(u, \theta, \phi)\f$ is
     358             : /// Bondi radius of the worldtube.
     359           1 : struct EthEthbarRDividedByR : db::SimpleTag {
     360           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     361           0 :   using derivative_kind = Spectral::Swsh::Tags::EthEthbar;
     362           0 :   static constexpr int spin = 0;
     363             : };
     364             : 
     365             : /// The value \f$\exp(2\beta)\f$.
     366           1 : struct Exp2Beta : db::SimpleTag {
     367           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     368             : };
     369             : 
     370             : /// The value \f$ \bar{J} (Q - 2 \eth \beta ) \f$.
     371           1 : struct JbarQMinus2EthBeta : db::SimpleTag {
     372           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     373             : };
     374             : 
     375             : /// The Bondi radius \f$R(u, \theta, \phi)\f$ is of the worldtube.
     376           1 : struct BondiR : db::SimpleTag {
     377           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     378           0 :   static std::string name() { return "R"; }
     379             : };
     380             : 
     381           0 : struct EndTime : db::SimpleTag {
     382           0 :   using type = double;
     383             : };
     384             : 
     385           0 : struct StartTime : db::SimpleTag {
     386           0 :   using type = double;
     387             : };
     388             : 
     389           0 : using LMax = Spectral::Swsh::Tags::LMax;
     390           0 : using NumberOfRadialPoints = Spectral::Swsh::Tags::NumberOfRadialPoints;
     391             : 
     392             : /// The (adapted) Newman-Penrose spin coefficient $\alpha^{SW}$. See
     393             : /// documentation of `newman_penrose_alpha()` for definition.
     394           1 : struct NewmanPenroseAlpha : db::SimpleTag {
     395           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     396             : };
     397             : 
     398             : /// The (adapted) Newman-Penrose spin coefficient $\beta_{NP}^{SW}$. See
     399             : /// documentation of `newman_penrose_beta()` for definition.
     400           1 : struct NewmanPenroseBeta : db::SimpleTag {
     401           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, +1>>;
     402             : };
     403             : 
     404             : /// The (adapted) Newman-Penrose spin coefficient $\gamma^{SW}$. See
     405             : /// documentation of `newman_penrose_gamma()` for definition.
     406           1 : struct NewmanPenroseGamma : db::SimpleTag {
     407           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     408             : };
     409             : 
     410             : /// The (adapted) Newman-Penrose spin coefficient $\epsilon^{SW}$. See
     411             : /// documentation of `newman_penrose_epsilon()` for definition.
     412           1 : struct NewmanPenroseEpsilon : db::SimpleTag {
     413           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     414             : };
     415             : 
     416             : /// The Newman-Penrose spin coefficient $\kappa$. In the choice of tetrad of
     417             : /// \cite Moxon2020gha, $\kappa=0$. Therefore, this tag should never actually be
     418             : /// used.  It is declared here so it does not seem like it is "missing", and to
     419             : /// document that any calculation involving $\kappa$ should be simplified with
     420             : /// $\kappa=0$.
     421           1 : struct NewmanPenroseKappa : db::SimpleTag {
     422           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, +1>>;
     423             : };
     424             : 
     425             : /// The Newman-Penrose spin coefficient $\tau$. See documentation of
     426             : /// `newman_penrose_tau()` for definition.
     427           1 : struct NewmanPenroseTau : db::SimpleTag {
     428           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, +1>>;
     429             : };
     430             : 
     431             : /// The Newman-Penrose spin coefficient $\sigma$. See documentation of
     432             : /// `newman_penrose_sigma()` for definition.
     433           1 : struct NewmanPenroseSigma : db::SimpleTag {
     434           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, +2>>;
     435             : };
     436             : 
     437             : /// The Newman-Penrose spin coefficient $\rho$. See documentation of
     438             : /// `newman_penrose_rho()` for definition.
     439           1 : struct NewmanPenroseRho : db::SimpleTag {
     440           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     441             : };
     442             : 
     443             : /// The Newman-Penrose spin coefficient $\pi$. See documentation of
     444             : /// `newman_penrose_pi()` for definition.
     445           1 : struct NewmanPenrosePi : db::SimpleTag {
     446           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     447             : };
     448             : 
     449             : /// The Newman-Penrose spin coefficient $\nu$. See documentation of
     450             : /// `newman_penrose_nu()` for definition.
     451           1 : struct NewmanPenroseNu : db::SimpleTag {
     452           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     453             : };
     454             : 
     455             : /// The Newman-Penrose spin coefficient $\mu$. See documentation of
     456             : /// `newman_penrose_mu()` for definition.
     457           1 : struct NewmanPenroseMu : db::SimpleTag {
     458           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     459             : };
     460             : 
     461             : /// The Newman-Penrose spin coefficient $\lambda$. See documentation of
     462             : /// `newman_penrose_lambda()` for definition.
     463           1 : struct NewmanPenroseLambda : db::SimpleTag {
     464           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -2>>;
     465             : };
     466             : 
     467             : /// The Weyl scalar \f$\Psi_0\f$
     468           1 : struct Psi0 : db::SimpleTag {
     469           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     470             : };
     471             : 
     472             : /// The Weyl scalar \f$\Psi_0\f$ for matching (in the Cauchy frame)
     473           1 : struct Psi0Match : db::SimpleTag {
     474           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 2>>;
     475             : };
     476             : /// The Weyl scalar \f$\Psi_1\f$
     477           1 : struct Psi1 : db::SimpleTag {
     478           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 1>>;
     479             : };
     480             : 
     481             : /// The Weyl scalar \f$\Psi_2\f$
     482           1 : struct Psi2 : db::SimpleTag {
     483           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     484             : };
     485             : 
     486             : /// The Weyl scalar \f$\Psi_3\f$
     487           1 : struct Psi3 : db::SimpleTag {
     488           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -1>>;
     489             : };
     490             : 
     491             : /// The Weyl scalar \f$\Psi_4\f$
     492           1 : struct Psi4 : db::SimpleTag {
     493           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -2>>;
     494             : };
     495             : 
     496             : /// The gravitational wave strain \f$h\f$
     497           1 : struct Strain : db::SimpleTag {
     498           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, -2>>;
     499             : };
     500             : 
     501             : /// A prefix tag representing the time integral of the value it prefixes
     502             : template <typename Tag>
     503           1 : struct TimeIntegral : db::PrefixTag, db::SimpleTag {
     504           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     505           0 :   using tag = Tag;
     506             : };
     507             : 
     508             : /// A prefix tag representing the value at \f$\mathcal I^+\f$
     509             : template <typename Tag>
     510           1 : struct ScriPlus : db::PrefixTag, db::SimpleTag {
     511           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     512           0 :   using tag = Tag;
     513             : };
     514             : 
     515             : /// A prefix tag representing an additional correction factor necessary to
     516             : /// compute the quantity at \f$\mathcal I^+\f$
     517             : template <typename Tag>
     518           1 : struct ScriPlusFactor : db::PrefixTag, db::SimpleTag {
     519           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, 0>>;
     520           0 :   using tag = Tag;
     521             : };
     522             : 
     523             : /// A prefix tag representing Klein-Gordon sources in Cce hypersurface equations
     524             : template <typename Tag>
     525           1 : struct KleinGordonSource : db::PrefixTag, db::SimpleTag {
     526           0 :   using type = Scalar<SpinWeighted<ComplexDataVector, Tag::type::type::spin>>;
     527           0 :   using tag = Tag;
     528             : };
     529             : 
     530             : template <typename ToInterpolate, typename ObservationTag>
     531           0 : struct InterpolationManager : db::SimpleTag {
     532           0 :   using type = ScriPlusInterpolationManager<ToInterpolate, ObservationTag>;
     533           0 :   static std::string name() {
     534             :     return "InterpolationManager(" + db::tag_name<ObservationTag>() + ")";
     535             :   }
     536             : };
     537             : 
     538             : /// During self-start, we must be in lockstep with the GH system (if running
     539             : /// concurrently), because the step size is unchangable during self-start.
     540           1 : struct SelfStartGhInterfaceManager : db::SimpleTag {
     541           0 :   using type = InterfaceManagers::GhLockstep;
     542           0 :   using option_tags = tmpl::list<>;
     543             : 
     544           0 :   static constexpr bool pass_metavariables = false;
     545           0 :   static InterfaceManagers::GhLockstep create_from_options() {
     546             :     return Cce::InterfaceManagers::GhLockstep();
     547             :   }
     548             : };
     549             : }  // namespace Tags
     550             : }  // namespace Cce

Generated by: LCOV version 1.14