SpECTRE Documentation Coverage Report
Current view: top level - Evolution/Systems/Cce - Tags.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 36.4 % 187 68
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 "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 2.0-1