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/DataBox/Tag.hpp"
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "Domain/Structure/Direction.hpp"
11 : #include "Domain/Structure/DirectionalId.hpp"
12 : #include "Domain/Structure/DirectionalIdMap.hpp"
13 : #include "Domain/Structure/ElementId.hpp"
14 : #include "Domain/Tags.hpp"
15 : #include "Evolution/DgSubcell/ActiveGrid.hpp"
16 : #include "Evolution/DgSubcell/Tags/ActiveGrid.hpp"
17 : #include "Evolution/DgSubcell/Tags/Mesh.hpp"
18 : #include "Utilities/Gsl.hpp"
19 :
20 : /// \cond
21 : class DataVector;
22 : template <size_t Dim>
23 : class Mesh;
24 : /// \endcond
25 :
26 : namespace evolution::dg::subcell::Tags {
27 : /// Stores the status of the troubled cell indicator in the element as an `int`.
28 : ///
29 : /// A non-zero value indicates the TCI decided the element is troubled.
30 1 : struct TciDecision : db::SimpleTag {
31 0 : using type = int;
32 : };
33 :
34 : /// The TCI decision of neighboring elements.
35 : template <size_t Dim>
36 1 : struct NeighborTciDecisions : db::SimpleTag {
37 0 : using type = DirectionalIdMap<Dim, int>;
38 : };
39 :
40 : /// Stores the status of the troubled cell indicator in the element
41 : /// (TciDecision) as a `Scalar<DataVector>` so it can be observed.
42 1 : struct TciStatus : db::SimpleTag {
43 0 : using type = Scalar<DataVector>;
44 : };
45 :
46 : /// Compute tag to get a `TciStatus` from a `TciDecision`.
47 : template <size_t Dim>
48 1 : struct TciStatusCompute : db::ComputeTag, TciStatus {
49 0 : using base = TciStatus;
50 0 : using return_type = typename base::type;
51 0 : using argument_tags = tmpl::list<Tags::TciDecision, Tags::ActiveGrid,
52 : Tags::Mesh<Dim>, ::domain::Tags::Mesh<Dim>>;
53 0 : static void function(gsl::not_null<return_type*> result, int tci_decision,
54 : subcell::ActiveGrid active_grid,
55 : const ::Mesh<Dim>& subcell_mesh,
56 : const ::Mesh<Dim>& dg_mesh);
57 : };
58 : } // namespace evolution::dg::subcell::Tags
|