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/EagerMath/Magnitude.hpp"
9 : #include "DataStructures/VariablesTag.hpp"
10 : #include "Evolution/Systems/GeneralizedHarmonic/System.hpp"
11 : #include "Evolution/Systems/GrMhd/GhValenciaDivClean/BoundaryConditions/BoundaryCondition.hpp"
12 : #include "Evolution/Systems/GrMhd/GhValenciaDivClean/Characteristics.hpp"
13 : #include "Evolution/Systems/GrMhd/GhValenciaDivClean/System.hpp"
14 : #include "Evolution/Systems/GrMhd/GhValenciaDivClean/Tags.hpp"
15 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/ConservativeFromPrimitive.hpp"
16 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/NewmanHamlin.hpp"
17 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/PrimitiveFromConservative.hpp"
18 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/System.hpp"
19 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/Tags.hpp"
20 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/TimeDerivativeTerms.hpp"
21 : #include "Evolution/Systems/RadiationTransport/M1Grey/System.hpp"
22 : #include "PointwiseFunctions/GeneralRelativity/Tags.hpp"
23 : #include "PointwiseFunctions/Hydro/Tags.hpp"
24 : #include "Utilities/TMPL.hpp"
25 :
26 : /// Namespace associated with utilities for the combined Generalized Harmonic,
27 : /// Valencia formulation of ideal GRMHD with divergence cleaning, and M1Grey
28 : /// neutrino systems.
29 : namespace grmhd::GhValenciaDivClean {
30 : /// \cond
31 : struct TimeDerivativeTerms;
32 : /// \endcond
33 :
34 : template <typename... NeutrinoSpecies>
35 0 : struct System<
36 : RadiationTransport::M1Grey::System<tmpl::list<NeutrinoSpecies...>>> {
37 : // Will need M1 BCs on top of existing
38 0 : using boundary_conditions_base = BoundaryConditions::BoundaryCondition;
39 0 : static constexpr bool has_primitive_and_conservative_vars = true;
40 0 : static constexpr size_t volume_dim = 3;
41 0 : using grmhd_system = grmhd::ValenciaDivClean::System;
42 0 : using gh_system = gh::System<3_st>;
43 0 : using neutrino_transport_system =
44 : RadiationTransport::M1Grey::System<tmpl::list<NeutrinoSpecies...>>;
45 :
46 : static_assert(std::is_same_v<Tags::spacetime_reconstruction_tags,
47 : typename gh_system::variables_tag::tags_list>);
48 :
49 0 : using variables_tag = ::Tags::Variables<tmpl::append<
50 : typename gh_system::variables_tag::tags_list,
51 : typename grmhd_system::variables_tag::tags_list,
52 : typename neutrino_transport_system::variables_tag::tags_list>>;
53 0 : using non_conservative_variables =
54 : typename gh_system::variables_tag::tags_list;
55 0 : using flux_variables =
56 : tmpl::append<typename gh_system::flux_variables,
57 : typename grmhd_system::flux_variables,
58 : typename neutrino_transport_system::flux_variables>;
59 0 : using gradient_variables =
60 : tmpl::append<typename gh_system::gradient_variables,
61 : typename grmhd_system::gradient_variables,
62 : typename neutrino_transport_system::gradient_variables>;
63 0 : using gradients_tags = gradient_variables;
64 0 : static constexpr bool is_in_flux_conservative_form = false;
65 :
66 : // might need to filter duplicate tags
67 0 : using primitive_variables_tag =
68 : tmpl::append<typename grmhd_system::primitive_variables_tag,
69 : typename neutrino_transport_system::primitive_variables_tag>;
70 :
71 : // contains required metric and metric derivatives for Gh system as well
72 0 : using spacetime_variables_tags =
73 : typename neutrino_transport_system::spacetime_variables_tag;
74 :
75 0 : using compute_volume_time_derivative_terms = TimeDerivativeTerms;
76 :
77 0 : using conservative_from_primitive =
78 : typename grmhd_system::conservative_from_primitive;
79 : template <typename OrderedListOfPrimitiveRecoverySchemes>
80 0 : using primitive_from_conservative =
81 : typename grmhd_system::template primitive_from_conservative<
82 : OrderedListOfPrimitiveRecoverySchemes>;
83 :
84 0 : using compute_largest_characteristic_speed =
85 : Tags::ComputeLargestCharacteristicSpeed<>;
86 :
87 0 : using inverse_spatial_metric_tag =
88 : typename gh_system::inverse_spatial_metric_tag;
89 : };
90 : } // namespace grmhd::GhValenciaDivClean
|