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 : #include <string>
8 :
9 : #include "DataStructures/VariablesTag.hpp"
10 : #include "Domain/BoundaryVariablesTag.hpp"
11 : #include "Evolution/DiscontinuousGalerkin/BoundaryEvolvedVariables.hpp"
12 : #include "Evolution/Systems/SecondOrderScalarWave/BoundaryConditions/BoundaryCondition.hpp"
13 : #include "Evolution/Systems/SecondOrderScalarWave/Characteristics.hpp"
14 : #include "Evolution/Systems/SecondOrderScalarWave/Tags.hpp"
15 : #include "Evolution/Systems/SecondOrderScalarWave/TimeDerivative.hpp"
16 : #include "Utilities/TMPL.hpp"
17 :
18 : /*!
19 : * \ingroup EvolutionSystemsGroup
20 : * \brief Items related to evolving the second-order scalar wave equations.
21 : *
22 : * \f{align*}
23 : * \partial_t \Psi &= -\Pi \\
24 : * \partial_t \Pi &= -\delta^{ij}\partial_i \partial_j \Psi
25 : * \f}
26 : */
27 : namespace SecondOrderScalarWave {
28 :
29 : template <size_t Dim>
30 0 : struct System {
31 0 : static std::string name() { return "SecondOrderScalarWave"; }
32 :
33 0 : using boundary_conditions_base = BoundaryConditions::BoundaryCondition<Dim>;
34 :
35 0 : static constexpr bool is_in_flux_conservative_form = false;
36 0 : static constexpr bool has_primitive_and_conservative_vars = false;
37 0 : static constexpr size_t volume_dim = Dim;
38 :
39 0 : using volume_vars = tmpl::list<Tags::Psi, Tags::Pi>;
40 0 : using boundary_vars =
41 : tmpl::list<evolution::dg::Tags::BoundaryValue<Tags::Psi>>;
42 0 : using variables_tag =
43 : tmpl::list<::Tags::Variables<volume_vars>,
44 : ::Tags::BoundaryVariables<Dim, boundary_vars>>;
45 0 : using flux_variables = tmpl::list<>;
46 0 : using auxiliary_variables = tmpl::list<Tags::Phi<Dim>>;
47 : // The time derivative reads only the derivative of Phi, but the evolved
48 : // variables must also be listed: `volume_terms` unconditionally instantiates
49 : // reads of every evolved variable's derivative for the moving-mesh term, so
50 : // a nonconservative system's `gradient_variables` must contain its evolved
51 : // variables.
52 0 : using gradient_variables = tmpl::list<Tags::Psi, Tags::Pi, Tags::Phi<Dim>>;
53 :
54 0 : using compute_volume_time_derivative_terms = TimeDerivative<Dim>;
55 :
56 0 : using compute_largest_characteristic_speed =
57 : Tags::ComputeLargestCharacteristicSpeed;
58 : };
59 : } // namespace SecondOrderScalarWave
|