Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <array>
7 :
8 : #include "DataStructures/DataBox/DataBoxTag.hpp"
9 : #include "DataStructures/DataBox/Prefixes.hpp"
10 : #include "DataStructures/DataVector.hpp"
11 : #include "DataStructures/Tensor/Tensor.hpp"
12 : #include "Evolution/Systems/RadiationTransport/M1Grey/Fluxes.hpp"
13 : #include "Evolution/Systems/RadiationTransport/M1Grey/Sources.hpp"
14 : #include "Evolution/Systems/RadiationTransport/M1Grey/Tags.hpp"
15 : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
16 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
17 : #include "Utilities/Gsl.hpp"
18 : #include "Utilities/TMPL.hpp"
19 :
20 : namespace RadiationTransport::M1Grey {
21 : template <typename... NeutrinoSpecies>
22 0 : struct TimeDerivativeTerms {
23 0 : struct TildeSUp : db::SimpleTag {
24 0 : using type = tnsr::I<DataVector, 3, Frame::Inertial>;
25 : };
26 :
27 0 : using temporary_tags =
28 : tmpl::list<TildeSUp, gr::Tags::InverseSpatialMetric<DataVector, 3>>;
29 0 : using argument_tags = tmpl::list<
30 : Tags::TildeE<Frame::Inertial, NeutrinoSpecies>...,
31 : Tags::TildeS<Frame::Inertial, NeutrinoSpecies>...,
32 : Tags::TildeP<Frame::Inertial, NeutrinoSpecies>...,
33 : gr::Tags::Lapse<DataVector>, gr::Tags::Shift<DataVector, 3>,
34 : gr::Tags::SpatialMetric<DataVector, 3>,
35 : gr::Tags::InverseSpatialMetric<DataVector, 3>,
36 :
37 : Tags::M1HydroCouplingNormal<NeutrinoSpecies>...,
38 : Tags::M1HydroCouplingSpatial<Frame::Inertial, NeutrinoSpecies>...,
39 : ::Tags::deriv<gr::Tags::Lapse<DataVector>, tmpl::size_t<3>,
40 : Frame::Inertial>,
41 : ::Tags::deriv<gr::Tags::Shift<DataVector, 3>, tmpl::size_t<3>,
42 : Frame::Inertial>,
43 : ::Tags::deriv<gr::Tags::SpatialMetric<DataVector, 3>, tmpl::size_t<3>,
44 : Frame::Inertial>,
45 : gr::Tags::ExtrinsicCurvature<DataVector, 3>>;
46 :
47 0 : static void apply(
48 : const gsl::not_null<typename Tags::TildeE<
49 : Frame::Inertial,
50 : NeutrinoSpecies>::type*>... non_flux_terms_dt_tilde_e,
51 : const gsl::not_null<typename Tags::TildeS<
52 : Frame::Inertial,
53 : NeutrinoSpecies>::type*>... non_flux_terms_dt_tilde_s,
54 :
55 : const gsl::not_null<typename ::Tags::Flux<
56 : Tags::TildeE<Frame::Inertial, NeutrinoSpecies>, tmpl::size_t<3>,
57 : Frame::Inertial>::type*>... tilde_e_flux,
58 : const gsl::not_null<typename ::Tags::Flux<
59 : Tags::TildeS<Frame::Inertial, NeutrinoSpecies>, tmpl::size_t<3>,
60 : Frame::Inertial>::type*>... tilde_s_flux,
61 :
62 : const gsl::not_null<tnsr::I<DataVector, 3, Frame::Inertial>*> tilde_s_M,
63 : const gsl::not_null<tnsr::II<DataVector, 3, Frame::Inertial>*>
64 : temp_inv_spatial_metric,
65 :
66 : const typename Tags::TildeE<Frame::Inertial,
67 : NeutrinoSpecies>::type&... tilde_e,
68 : const typename Tags::TildeS<Frame::Inertial,
69 : NeutrinoSpecies>::type&... tilde_s,
70 : const typename Tags::TildeP<Frame::Inertial,
71 : NeutrinoSpecies>::type&... tilde_p,
72 : const Scalar<DataVector>& lapse,
73 : const tnsr::I<DataVector, 3, Frame::Inertial>& shift,
74 : const tnsr::ii<DataVector, 3, Frame::Inertial>& spatial_metric,
75 : const tnsr::II<DataVector, 3, Frame::Inertial>& inv_spatial_metric,
76 :
77 : const typename Tags::M1HydroCouplingNormal<
78 : NeutrinoSpecies>::type&... source_n,
79 : const typename Tags::M1HydroCouplingSpatial<
80 : Frame::Inertial, NeutrinoSpecies>::type&... source_i,
81 : const tnsr::i<DataVector, 3>& d_lapse,
82 : const tnsr::iJ<DataVector, 3>& d_shift,
83 : const tnsr::ijj<DataVector, 3>& d_spatial_metric,
84 : const tnsr::ii<DataVector, 3>& extrinsic_curvature) {
85 : *temp_inv_spatial_metric = inv_spatial_metric;
86 : EXPAND_PACK_LEFT_TO_RIGHT(detail::compute_fluxes_impl(
87 : tilde_e_flux, tilde_s_flux, tilde_s_M, tilde_e, tilde_s, tilde_p, lapse,
88 : shift, spatial_metric, inv_spatial_metric));
89 : EXPAND_PACK_LEFT_TO_RIGHT(detail::compute_sources_impl(
90 : non_flux_terms_dt_tilde_e, non_flux_terms_dt_tilde_s, tilde_e, tilde_s,
91 : tilde_p, source_n, source_i, lapse, d_lapse, d_shift, d_spatial_metric,
92 : inv_spatial_metric, extrinsic_curvature));
93 : }
94 : };
95 : } // namespace RadiationTransport::M1Grey
|