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