10 #include "DataStructures/DataBox/PrefixHelpers.hpp"
15 #include "Elliptic/FirstOrderComputeTags.hpp"
16 #include "Elliptic/Tags.hpp"
17 #include "NumericalAlgorithms/DiscontinuousGalerkin/NormalDotFlux.hpp"
18 #include "NumericalAlgorithms/LinearOperators/Divergence.tpp"
20 #include "ParallelAlgorithms/Initialization/MutateAssign.hpp"
25 template <
typename Metavariables>
29 template <
typename... Tags>
46 template <
size_t Dim,
typename FluxesComputer,
typename SourcesComputer,
47 typename VariablesTag,
typename PrimalVariables,
48 typename AuxiliaryVariables>
51 static constexpr
size_t volume_dim = Dim;
52 using vars_tag = VariablesTag;
62 template <
typename Directions>
64 tmpl::list<domain::Tags::Slice<Directions, vars_tag>,
75 vars_tag, PrimalVariables,
78 Dim, SourcesComputer, vars_tag, PrimalVariables, AuxiliaryVariables>;
80 using exterior_tags = tmpl::list<
95 using simple_tags = tmpl::list<exterior_vars_tag>;
96 using compute_tags = tmpl::flatten<tmpl::list<
99 face_tags<domain::Tags::InternalDirections<volume_dim>>,
100 face_tags<domain::Tags::BoundaryDirectionsInterior<volume_dim>>,
103 template <
typename DbTagsList,
typename... InboxTags,
typename Metavariables,
104 typename ArrayIndex,
typename ActionList,
105 typename ParallelComponent>
106 static auto apply(db::DataBox<DbTagsList>& box,
111 const ParallelComponent*
const ) noexcept {
115 const auto& mesh = db::get<domain::Tags::Mesh<volume_dim>>(box);
117 .external_boundaries()) {
118 exterior_boundary_vars[direction] =
typename vars_tag::type{
119 mesh.slice_away(direction.dimension()).number_of_grid_points()};
121 Initialization::mutate_assign<simple_tags>(
123 return std::make_tuple(std::move(box));
Definition: IndexType.hpp:44
Definition: ElementReceiveInterpPoints.hpp:15
const auto & get(const DataBox< TagList > &box) noexcept
Retrieve the item with tag Tag from the DataBox.
Definition: DataBox.hpp:969
Functionality related to discontinuous Galerkin schemes.
Definition: ComputeNonconservativeBoundaryFluxes.hpp:23
Compute tag for representing a compute item that slices data from the volume to a set of interfaces.
Definition: InterfaceComputeTags.hpp:114
An associative container that is indexed by structs.
Definition: TaggedTuple.hpp:271
Tag which is either a SimpleTag for quantities on an interface, base tag to a compute item which acts...
Definition: Tags.hpp:365
Compute tag for representing items computed on a set of interfaces. Can be retrieved using Tags::Inte...
Definition: InterfaceComputeTags.hpp:66
Functionality related to solving elliptic partial differential equations.
Definition: InitializeAnalyticSolution.hpp:29
gsl::not_null< T * > make_not_null(T *ptr) noexcept
Construct a not_null from a pointer. Often this will be done as an implicit conversion,...
Definition: Gsl.hpp:880
Initialize DataBox tags for building the first-order elliptic DG operator.
Definition: InitializeFirstOrderOperator.hpp:49