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