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/Tensor/TypeAliases.hpp" 9 : #include "Evolution/DiscontinuousGalerkin/TimeDerivativeDecisions.hpp" 10 : #include "Evolution/Systems/SecondOrderScalarWave/Tags.hpp" 11 : #include "Utilities/TMPL.hpp" 12 : 13 : /// \cond 14 : namespace gsl { 15 : template <typename T> 16 : class not_null; 17 : } // namespace gsl 18 : 19 : class DataVector; 20 : /// \endcond 21 : 22 : namespace SecondOrderScalarWave { 23 : /*! 24 : * \brief Compute the time derivatives for the second-order scalar wave system 25 : */ 26 : template <size_t Dim> 27 1 : struct TimeDerivative { 28 0 : using temporary_tags = tmpl::list<>; 29 : 30 0 : using argument_tags = tmpl::list<Tags::Pi>; 31 : 32 0 : static evolution::dg::TimeDerivativeDecisions<Dim> apply( 33 : gsl::not_null<Scalar<DataVector>*> dt_psi, 34 : gsl::not_null<Scalar<DataVector>*> dt_pi, 35 : 36 : // Partial derivative arguments. Listed in the system struct as 37 : // gradient_variables. Only the derivative of Phi enters the time 38 : // derivatives; the evolved variables' derivatives are in 39 : // gradient_variables solely for the framework's moving-mesh term. 40 : const tnsr::i<DataVector, Dim, Frame::Inertial>& /*d_psi*/, 41 : const tnsr::i<DataVector, Dim, Frame::Inertial>& /*d_pi*/, 42 : const tnsr::ij<DataVector, Dim, Frame::Inertial>& d_phi, 43 : 44 : // Terms list in argument_tags above 45 : const Scalar<DataVector>& pi); 46 : }; 47 : } // namespace SecondOrderScalarWave