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/VariablesTag.hpp"
9 : #include "Evolution/Systems/ScalarAdvection/BoundaryConditions/BoundaryCondition.hpp"
10 : #include "Evolution/Systems/ScalarAdvection/Characteristics.hpp"
11 : #include "Evolution/Systems/ScalarAdvection/Tags.hpp"
12 : #include "Evolution/Systems/ScalarAdvection/TimeDerivativeTerms.hpp"
13 : #include "Utilities/TMPL.hpp"
14 :
15 : /*!
16 : * \ingroup EvolutionSystemsGroup
17 : * \brief Items related to evolving the scalar advection equation.
18 : *
19 : * \f{align*}
20 : * \partial_t U + \nabla \cdot (v U) = 0
21 : * \f}
22 : *
23 : * Since the ScalarAdvection system is only used for testing limiters in the
24 : * current implementation, the velocity field \f$v\f$ is fixed throughout time.
25 : */
26 : namespace ScalarAdvection {
27 : template <size_t Dim>
28 0 : struct System {
29 0 : static std::string name() { return "ScalarAdvection"; }
30 :
31 0 : static constexpr bool is_in_flux_conservative_form = true;
32 0 : static constexpr bool has_primitive_and_conservative_vars = false;
33 0 : static constexpr size_t volume_dim = Dim;
34 :
35 0 : using boundary_conditions_base = BoundaryConditions::BoundaryCondition<Dim>;
36 :
37 0 : using variables_tag = ::Tags::Variables<tmpl::list<Tags::U>>;
38 0 : using flux_variables = tmpl::list<Tags::U>;
39 0 : using gradient_variables = tmpl::list<>;
40 :
41 0 : using compute_volume_time_derivative_terms = TimeDerivativeTerms<Dim>;
42 :
43 0 : using compute_largest_characteristic_speed =
44 : Tags::LargestCharacteristicSpeedCompute<Dim>;
45 : };
46 : } // namespace ScalarAdvection
|