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
|