Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "DataStructures/Tensor/TypeAliases.hpp" 7 : #include "DataStructures/Variables.hpp" 8 : #include "Evolution/Systems/ScalarWave/Tags.hpp" 9 : #include "NumericalAlgorithms/LinearOperators/PartialDerivatives.hpp" 10 : #include "Utilities/TMPL.hpp" 11 : 12 : /// \cond 13 : namespace gsl { 14 : template <typename T> 15 : class not_null; 16 : } // namespace gsl 17 : 18 : class DataVector; 19 : /// \endcond 20 : 21 : namespace ScalarWave { 22 : /*! 23 : * \brief Compute the time derivatives for scalar wave system 24 : */ 25 : template <size_t Dim> 26 1 : struct TimeDerivative { 27 0 : using temporary_tags = tmpl::list<Tags::ConstraintGamma2>; 28 0 : using argument_tags = 29 : tmpl::list<Tags::Pi, Tags::Phi<Dim>, Tags::ConstraintGamma2>; 30 : 31 0 : static void apply( 32 : // Time derivatives returned by reference. All the tags in the 33 : // variables_tag in the system struct. 34 : gsl::not_null<Scalar<DataVector>*> dt_psi, 35 : gsl::not_null<Scalar<DataVector>*> dt_pi, 36 : gsl::not_null<tnsr::i<DataVector, Dim, Frame::Inertial>*> dt_phi, 37 : 38 : gsl::not_null<Scalar<DataVector>*> result_gamma2, 39 : 40 : // Partial derivative arguments. Listed in the system struct as 41 : // gradient_variables. 42 : const tnsr::i<DataVector, Dim, Frame::Inertial>& d_psi, 43 : const tnsr::i<DataVector, Dim, Frame::Inertial>& d_pi, 44 : const tnsr::ij<DataVector, Dim, Frame::Inertial>& d_phi, 45 : 46 : // Terms list in argument_tags above 47 : const Scalar<DataVector>& pi, 48 : const tnsr::i<DataVector, Dim, Frame::Inertial>& phi, 49 : const Scalar<DataVector>& gamma2); 50 : }; 51 : } // namespace ScalarWave