Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "DataStructures/Variables.hpp"
7 : #include "Evolution/Systems/GrMhd/ValenciaDivClean/Fluxes.hpp"
8 : #include "Utilities/Gsl.hpp"
9 : #include "Utilities/TMPL.hpp"
10 :
11 1 : namespace grmhd::ValenciaDivClean::subcell {
12 : namespace detail {
13 : template <typename TagsList, typename... ReturnTags, typename... ArgumentTags>
14 : void compute_fluxes_impl(const gsl::not_null<Variables<TagsList>*> vars,
15 : tmpl::list<ReturnTags...> /*meta*/,
16 : tmpl::list<ArgumentTags...> /*meta*/) {
17 : grmhd::ValenciaDivClean::ComputeFluxes::apply(
18 : make_not_null(&get<ReturnTags>(*vars))..., get<ArgumentTags>(*vars)...);
19 : }
20 : } // namespace detail
21 :
22 : /*!
23 : * \brief Helper function that calls `ComputeFluxes` by retrieving the return
24 : * and argument tags from `vars`.
25 : */
26 : template <typename TagsList>
27 1 : void compute_fluxes(const gsl::not_null<Variables<TagsList>*> vars) {
28 : detail::compute_fluxes_impl(
29 : vars, typename grmhd::ValenciaDivClean::ComputeFluxes::return_tags{},
30 : typename grmhd::ValenciaDivClean::ComputeFluxes::argument_tags{});
31 : }
32 : } // namespace grmhd::ValenciaDivClean::subcell
|