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/DataBox/Tag.hpp"
10 : #include "DataStructures/DataVector.hpp"
11 : #include "DataStructures/Tensor/TypeAliases.hpp"
12 : #include "Evolution/Systems/GeneralizedHarmonic/ConstraintDamping/Tags.hpp"
13 : #include "Evolution/Systems/GeneralizedHarmonic/Constraints.hpp"
14 : #include "Evolution/Systems/GeneralizedHarmonic/Tags.hpp"
15 : #include "Evolution/Systems/ScalarTensor/Tags.hpp"
16 : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp"
17 : #include "Utilities/Gsl.hpp"
18 : #include "Utilities/TMPL.hpp"
19 :
20 : namespace ScalarTensor::Tags {
21 : /*!
22 : * \brief Compute item to get the F-constraint for the generalized harmonic
23 : * evolution system with an scalar field stress-energy source.
24 : *
25 : * \details See `gh::f_constraint()`. Can be retrieved using
26 : * `gh::Tags::FConstraint`.
27 : */
28 : template <size_t SpatialDim, typename Frame>
29 1 : struct FConstraintCompute
30 : : gh::Tags::FConstraint<DataVector, SpatialDim, Frame>,
31 : db::ComputeTag {
32 0 : using argument_tags = tmpl::list<
33 : gh::Tags::GaugeH<DataVector, SpatialDim, Frame>,
34 : gh::Tags::SpacetimeDerivGaugeH<DataVector, SpatialDim, Frame>,
35 : gr::Tags::SpacetimeNormalOneForm<DataVector, SpatialDim, Frame>,
36 : gr::Tags::SpacetimeNormalVector<DataVector, SpatialDim, Frame>,
37 : gr::Tags::InverseSpatialMetric<DataVector, SpatialDim, Frame>,
38 : gr::Tags::InverseSpacetimeMetric<DataVector, SpatialDim, Frame>,
39 : gh::Tags::Pi<DataVector, SpatialDim, Frame>,
40 : gh::Tags::Phi<DataVector, SpatialDim, Frame>,
41 : ::Tags::deriv<gh::Tags::Pi<DataVector, SpatialDim, Frame>,
42 : tmpl::size_t<SpatialDim>, Frame>,
43 : ::Tags::deriv<gh::Tags::Phi<DataVector, SpatialDim, Frame>,
44 : tmpl::size_t<SpatialDim>, Frame>,
45 : ::gh::ConstraintDamping::Tags::ConstraintGamma2,
46 : gh::Tags::ThreeIndexConstraint<DataVector, SpatialDim, Frame>,
47 : Tags::TraceReversedStressEnergy<DataVector, SpatialDim, Frame>>;
48 :
49 0 : using return_type = tnsr::a<DataVector, SpatialDim, Frame>;
50 :
51 0 : static constexpr auto function = static_cast<void (*)(
52 : gsl::not_null<tnsr::a<DataVector, SpatialDim, Frame>*>,
53 : const tnsr::a<DataVector, SpatialDim, Frame>&,
54 : const tnsr::ab<DataVector, SpatialDim, Frame>&,
55 : const tnsr::a<DataVector, SpatialDim, Frame>&,
56 : const tnsr::A<DataVector, SpatialDim, Frame>&,
57 : const tnsr::II<DataVector, SpatialDim, Frame>&,
58 : const tnsr::AA<DataVector, SpatialDim, Frame>&,
59 : const tnsr::aa<DataVector, SpatialDim, Frame>&,
60 : const tnsr::iaa<DataVector, SpatialDim, Frame>&,
61 : const tnsr::iaa<DataVector, SpatialDim, Frame>&,
62 : const tnsr::ijaa<DataVector, SpatialDim, Frame>&,
63 : const Scalar<DataVector>&,
64 : const tnsr::iaa<DataVector, SpatialDim, Frame>&,
65 : const tnsr::aa<DataVector, SpatialDim, Frame>&)>(
66 : &gh::f_constraint<DataVector, SpatialDim, Frame>);
67 :
68 0 : using base = gh::Tags::FConstraint<DataVector, SpatialDim, Frame>;
69 : };
70 : } // namespace ScalarTensor::Tags
|