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 "Elliptic/Systems/ScalarGaussBonnet/Tags.hpp" 10 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp" 11 : 12 : namespace sgb { 13 : /// @{ 14 : /*! 15 : * \brief Compute the momentum $\Pi$ assuming quasi-stationarity in sGB gravity. 16 : * 17 : * This expression can be obtained by simply demanding $\partial_t \Psi = 0$, 18 : * yielding 19 : * 20 : * \begin{equation} 21 : * \Pi \equiv -n^{a} \partial_a = \alpha^{-1} \beta^{i} \partial_i \Psi 22 : * \end{equation} 23 : */ 24 : 25 1 : void scalar_momentum(gsl::not_null<Scalar<DataVector>*> result, 26 : const tnsr::i<DataVector, 3, Frame::Inertial>& deriv, 27 : const tnsr::I<DataVector, 3>& shift, 28 : const Scalar<DataVector>& lapse); 29 : 30 1 : Scalar<DataVector> scalar_momentum( 31 : const tnsr::i<DataVector, 3, Frame::Inertial>& deriv, 32 : const tnsr::I<DataVector, 3>& shift, const Scalar<DataVector>& lapse); 33 : /// @{ 34 : 35 : namespace Tags { 36 : 37 : /*! 38 : * \brief Re-compute the momentum Pi, assuming quasi-stationarity. 39 : */ 40 : template <typename ShiftTag, typename OutputTag> 41 1 : struct PiCompute : OutputTag, db::ComputeTag { 42 : public: 43 0 : using base = OutputTag; 44 0 : using return_type = typename base::type; 45 0 : static constexpr auto function = 46 : static_cast<void (*)(gsl::not_null<return_type*>, 47 : const tnsr::i<DataVector, 3, Frame::Inertial>&, 48 : const tnsr::I<DataVector, 3>&, 49 : const Scalar<DataVector>&)>(&scalar_momentum); 50 0 : using argument_tags = 51 : tmpl::list<::Tags::deriv<Psi, tmpl::size_t<3>, Frame::Inertial>, ShiftTag, 52 : gr::Tags::Lapse<DataVector>>; 53 : }; 54 : 55 : } // namespace Tags 56 : } // namespace sgb