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/Prefixes.hpp"
9 : #include "DataStructures/Tensor/Tensor.hpp"
10 : #include "Elliptic/Systems/Xcts/Tags.hpp"
11 : #include "PointwiseFunctions/AnalyticData/Xcts/CommonVariables.hpp"
12 : #include "PointwiseFunctions/GeneralRelativity/TagsDeclarations.hpp"
13 : #include "Utilities/Gsl.hpp"
14 :
15 1 : namespace Xcts::Solutions {
16 :
17 : /// Tags for variables that solutions can share
18 : template <typename DataType>
19 1 : using common_tags = tmpl::push_back<
20 : AnalyticData::common_tags<DataType>,
21 : // Solved variables
22 : Tags::ConformalFactorMinusOne<DataType>, Tags::ConformalFactor<DataType>,
23 : Tags::LapseTimesConformalFactorMinusOne<DataType>,
24 : Tags::LapseTimesConformalFactor<DataType>,
25 : Tags::ShiftExcess<DataType, 3, Frame::Inertial>,
26 : // ADM variables
27 : gr::Tags::Lapse<DataType>, gr::Tags::Shift<DataType, 3>,
28 : gr::Tags::SpatialMetric<DataType, 3>,
29 : gr::Tags::InverseSpatialMetric<DataType, 3>,
30 : ::Tags::deriv<gr::Tags::SpatialMetric<DataType, 3>, tmpl::size_t<3>,
31 : Frame::Inertial>,
32 : gr::Tags::ExtrinsicCurvature<DataType, 3>,
33 : // Derivatives of solved variables
34 : ::Tags::deriv<Tags::ConformalFactorMinusOne<DataType>, tmpl::size_t<3>,
35 : Frame::Inertial>,
36 : ::Tags::deriv<Tags::LapseTimesConformalFactorMinusOne<DataType>,
37 : tmpl::size_t<3>, Frame::Inertial>,
38 : ::Tags::deriv<Tags::ShiftExcess<DataType, 3, Frame::Inertial>,
39 : tmpl::size_t<3>, Frame::Inertial>,
40 : Tags::ShiftStrain<DataType, 3, Frame::Inertial>,
41 : // Fluxes
42 : ::Tags::Flux<Tags::ConformalFactorMinusOne<DataType>, tmpl::size_t<3>,
43 : Frame::Inertial>,
44 : ::Tags::Flux<Tags::LapseTimesConformalFactorMinusOne<DataType>,
45 : tmpl::size_t<3>, Frame::Inertial>,
46 : Tags::LongitudinalShiftExcess<DataType, 3, Frame::Inertial>,
47 : // Background quantities for subsets of the XCTS equations
48 : Tags::LongitudinalShiftMinusDtConformalMetricSquare<DataType>,
49 : Tags::LongitudinalShiftMinusDtConformalMetricOverLapseSquare<DataType>,
50 : Tags::ShiftDotDerivExtrinsicCurvatureTrace<DataType>>;
51 :
52 : /// Tags for hydro variables that are typically retrieved from a hydro solution
53 : template <typename DataType>
54 1 : using hydro_tags = AnalyticData::hydro_tags<DataType>;
55 :
56 : /// Implementations for variables that solutions can share
57 : template <typename DataType, typename Cache>
58 1 : struct CommonVariables : AnalyticData::CommonVariables<DataType, Cache> {
59 0 : static constexpr size_t Dim = 3;
60 0 : using Base = AnalyticData::CommonVariables<DataType, Cache>;
61 : using Base::Base;
62 : using Base::operator();
63 :
64 0 : virtual void operator()(
65 : gsl::not_null<Scalar<DataType>*> conformal_factor_minus_one,
66 : gsl::not_null<Cache*> cache,
67 : Tags::ConformalFactorMinusOne<DataType> /*meta*/) const = 0;
68 0 : virtual void operator()(gsl::not_null<Scalar<DataType>*> conformal_factor,
69 : gsl::not_null<Cache*> cache,
70 : Tags::ConformalFactor<DataType> /*meta*/) const;
71 0 : virtual void operator()(
72 : gsl::not_null<Scalar<DataType>*> lapse_times_conformal_factor_minus_one,
73 : gsl::not_null<Cache*> cache,
74 : Tags::LapseTimesConformalFactorMinusOne<DataType> /*meta*/) const = 0;
75 0 : virtual void operator()(
76 : gsl::not_null<Scalar<DataType>*> lapse_times_conformal_factor,
77 : gsl::not_null<Cache*> cache,
78 : Tags::LapseTimesConformalFactor<DataType> /*meta*/) const;
79 0 : virtual void operator()(
80 : gsl::not_null<tnsr::I<DataType, Dim>*> shift_excess,
81 : gsl::not_null<Cache*> cache,
82 : Tags::ShiftExcess<DataType, Dim, Frame::Inertial> /*meta*/) const = 0;
83 0 : virtual void operator()(gsl::not_null<Scalar<DataType>*> lapse,
84 : gsl::not_null<Cache*> cache,
85 : gr::Tags::Lapse<DataType> /*meta*/) const = 0;
86 0 : virtual void operator()(
87 : gsl::not_null<tnsr::ii<DataType, Dim>*> spatial_metric,
88 : gsl::not_null<Cache*> cache,
89 : gr::Tags::SpatialMetric<DataType, Dim> /*meta*/) const;
90 0 : virtual void operator()(
91 : gsl::not_null<tnsr::II<DataType, Dim>*> inv_spatial_metric,
92 : gsl::not_null<Cache*> cache,
93 : gr::Tags::InverseSpatialMetric<DataType, Dim> /*meta*/) const;
94 0 : virtual void operator()(
95 : gsl::not_null<tnsr::ijj<DataType, Dim>*> deriv_spatial_metric,
96 : gsl::not_null<Cache*> cache,
97 : ::Tags::deriv<gr::Tags::SpatialMetric<DataType, Dim>, tmpl::size_t<Dim>,
98 : Frame::Inertial> /*meta*/) const;
99 0 : virtual void operator()(
100 : gsl::not_null<tnsr::i<DataType, Dim>*> deriv_conformal_factor,
101 : gsl::not_null<Cache*> cache,
102 : ::Tags::deriv<Tags::ConformalFactorMinusOne<DataType>, tmpl::size_t<Dim>,
103 : Frame::Inertial> /*meta*/) const = 0;
104 0 : virtual void operator()(
105 : gsl::not_null<tnsr::i<DataType, Dim>*> deriv_lapse_times_conformal_factor,
106 : gsl::not_null<Cache*> cache,
107 : ::Tags::deriv<Tags::LapseTimesConformalFactorMinusOne<DataType>,
108 : tmpl::size_t<Dim>, Frame::Inertial> /*meta*/) const = 0;
109 0 : virtual void operator()(
110 : gsl::not_null<tnsr::iJ<DataType, Dim>*> deriv_shift_excess,
111 : gsl::not_null<Cache*> cache,
112 : ::Tags::deriv<Tags::ShiftExcess<DataType, 3, Frame::Inertial>,
113 : tmpl::size_t<3>, Frame::Inertial> /*meta*/) const = 0;
114 0 : virtual void operator()(
115 : gsl::not_null<tnsr::ii<DataType, Dim>*> shift_strain,
116 : gsl::not_null<Cache*> cache,
117 : Tags::ShiftStrain<DataType, Dim, Frame::Inertial> /*meta*/) const;
118 0 : virtual void operator()(
119 : gsl::not_null<tnsr::I<DataType, Dim>*> conformal_factor_flux,
120 : gsl::not_null<Cache*> cache,
121 : ::Tags::Flux<Tags::ConformalFactorMinusOne<DataType>, tmpl::size_t<Dim>,
122 : Frame::Inertial> /*meta*/) const;
123 0 : virtual void operator()(
124 : gsl::not_null<tnsr::I<DataType, Dim>*> lapse_times_conformal_factor_flux,
125 : gsl::not_null<Cache*> cache,
126 : ::Tags::Flux<Tags::LapseTimesConformalFactorMinusOne<DataType>,
127 : tmpl::size_t<Dim>, Frame::Inertial> /*meta*/) const;
128 0 : virtual void operator()(
129 : gsl::not_null<tnsr::II<DataType, Dim>*> longitudinal_shift_excess,
130 : gsl::not_null<Cache*> cache,
131 : Tags::LongitudinalShiftExcess<DataType, Dim, Frame::Inertial> /*meta*/)
132 : const;
133 0 : virtual void operator()(gsl::not_null<tnsr::I<DataType, Dim>*> shift,
134 : gsl::not_null<Cache*> cache,
135 : gr::Tags::Shift<DataType, Dim> /*meta*/) const;
136 0 : virtual void operator()(
137 : gsl::not_null<tnsr::ii<DataType, Dim>*> extrinsic_curvature,
138 : gsl::not_null<Cache*> cache,
139 : gr::Tags::ExtrinsicCurvature<DataType, Dim> /*meta*/) const = 0;
140 0 : virtual void operator()(
141 : gsl::not_null<Scalar<DataType>*>
142 : longitudinal_shift_minus_dt_conformal_metric_square,
143 : gsl::not_null<Cache*> cache,
144 : Tags::LongitudinalShiftMinusDtConformalMetricSquare<DataType> /*meta*/)
145 : const;
146 0 : virtual void operator()(
147 : gsl::not_null<Scalar<DataType>*>
148 : longitudinal_shift_minus_dt_conformal_metric_over_lapse_square,
149 : gsl::not_null<Cache*> cache,
150 : Tags::LongitudinalShiftMinusDtConformalMetricOverLapseSquare<
151 : DataType> /*meta*/) const;
152 0 : virtual void operator()(
153 : gsl::not_null<Scalar<DataType>*>
154 : shift_dot_deriv_extrinsic_curvature_trace,
155 : gsl::not_null<Cache*> cache,
156 : Tags::ShiftDotDerivExtrinsicCurvatureTrace<DataType> /*meta*/) const;
157 : };
158 :
159 : } // namespace Xcts::Solutions
|