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 :
8 : #include "DataStructures/DataBox/Tag.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "Utilities/TMPL.hpp"
11 :
12 : /// \cond
13 : class ComplexDataVector;
14 : class DataVector;
15 : /// \endcond
16 :
17 : namespace Cce {
18 0 : namespace Frame {
19 : /// The frame for the spherical metric in which the radial coordinate is an
20 : /// affine parameter along outward-pointing null geodesics.
21 1 : struct RadialNull {};
22 : } // namespace Frame
23 :
24 : // tensor aliases for brevity
25 0 : using SphericaliCartesianJ = Tensor<
26 : DataVector, tmpl::integral_list<std::int32_t, 2, 1>,
27 : index_list<SpatialIndex<3, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial>>,
28 : SpatialIndex<3, UpLo::Lo, ::Frame::Inertial>>>;
29 :
30 0 : using CartesianiSphericalJ =
31 : Tensor<DataVector, tmpl::integral_list<std::int32_t, 2, 1>,
32 : index_list<SpatialIndex<3, UpLo::Lo, ::Frame::Inertial>,
33 : SpatialIndex<3, UpLo::Up,
34 : ::Frame::Spherical<::Frame::Inertial>>>>;
35 :
36 0 : using AngulariCartesianA = Tensor<
37 : DataVector, tmpl::integral_list<std::int32_t, 2, 1>,
38 : index_list<SpatialIndex<2, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial>>,
39 : SpacetimeIndex<3, UpLo::Lo, ::Frame::Inertial>>>;
40 :
41 0 : using SphericaliCartesianjj = Tensor<
42 : DataVector, tmpl::integral_list<std::int32_t, 2, 1, 1>,
43 : index_list<SpatialIndex<3, UpLo::Lo, ::Frame::Spherical<::Frame::Inertial>>,
44 : SpatialIndex<3, UpLo::Lo, ::Frame::Inertial>,
45 : SpatialIndex<3, UpLo::Lo, ::Frame::Inertial>>>;
46 :
47 : namespace Tags {
48 : namespace detail {
49 : // this provides a set of tags for the purposes of allocating once in the entire
50 : // Boundary data computation; these tags are currently not used outside
51 : // intermediate steps of the procedure in `BoundaryData.hpp`
52 :
53 : struct CosPhi : db::SimpleTag {
54 : using type = Scalar<DataVector>;
55 : };
56 :
57 : struct CosTheta : db::SimpleTag {
58 : using type = Scalar<DataVector>;
59 : };
60 :
61 : struct SinPhi : db::SimpleTag {
62 : using type = Scalar<DataVector>;
63 : };
64 :
65 : struct SinTheta : db::SimpleTag {
66 : using type = Scalar<DataVector>;
67 : };
68 :
69 : struct CartesianCoordinates : db::SimpleTag {
70 : using type = tnsr::I<DataVector, 3>;
71 : };
72 :
73 : struct CartesianToSphericalJacobian : db::SimpleTag {
74 : using type = SphericaliCartesianJ;
75 : };
76 :
77 : struct InverseCartesianToSphericalJacobian : db::SimpleTag {
78 : using type = CartesianiSphericalJ;
79 : };
80 :
81 : struct WorldtubeNormal : db::SimpleTag {
82 : using type = tnsr::I<DataVector, 3>;
83 : };
84 :
85 : struct UpDyad : db::SimpleTag {
86 : using type = tnsr::I<ComplexDataVector, 2, Frame::RadialNull>;
87 : };
88 :
89 : struct DownDyad : db::SimpleTag {
90 : using type = tnsr::i<ComplexDataVector, 2, Frame::RadialNull>;
91 : };
92 :
93 : struct RealBondiR : db::SimpleTag {
94 : using type = Scalar<DataVector>;
95 : };
96 :
97 : struct AngularDNullL : db::SimpleTag {
98 : using type = AngulariCartesianA;
99 : };
100 :
101 : struct NullL : db::SimpleTag {
102 : using type = tnsr::A<DataVector, 3>;
103 : };
104 :
105 : template <typename Tag>
106 : struct DLambda : db::SimpleTag {
107 : using type = typename Tag::type;
108 : };
109 :
110 : } // namespace detail
111 : } // namespace Tags
112 : } // namespace Cce
|