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 : #include <tuple>
8 :
9 : #include "DataStructures/Tensor/TypeAliases.hpp"
10 : #include "Domain/Tags.hpp"
11 : #include "Evolution/DgSubcell/RdmpTciData.hpp"
12 : #include "Evolution/DgSubcell/Tags/DataForRdmpTci.hpp"
13 : #include "Evolution/DgSubcell/Tags/Mesh.hpp"
14 : #include "Evolution/DgSubcell/Tags/SubcellOptions.hpp"
15 : #include "Evolution/Systems/ScalarAdvection/Subcell/TciOptions.hpp"
16 : #include "Evolution/Systems/ScalarAdvection/Tags.hpp"
17 : #include "Utilities/TMPL.hpp"
18 :
19 : /// \cond
20 : class DataVector;
21 : template <size_t Dim>
22 : class Mesh;
23 : /// \endcond
24 :
25 : namespace ScalarAdvection::subcell {
26 : /*!
27 : * \brief The troubled-cell indicator run on the DG grid to check if the
28 : * solution is admissible.
29 : *
30 : * Applies 1) the RDMP TCI to \f$U\f$ and 2) the Persson TCI to \f$U\f$ if the
31 : * \f$\max(|U|)\f$ on the DG grid is greater than `tci_options.u_cutoff`.
32 : */
33 : template <size_t Dim>
34 1 : struct TciOnDgGrid {
35 : public:
36 0 : using return_tags = tmpl::list<>;
37 0 : using argument_tags =
38 : tmpl::list<ScalarAdvection::Tags::U, ::domain::Tags::Mesh<Dim>,
39 : evolution::dg::subcell::Tags::Mesh<Dim>,
40 : evolution::dg::subcell::Tags::DataForRdmpTci,
41 : evolution::dg::subcell::Tags::SubcellOptions<Dim>,
42 : Tags::TciOptions>;
43 :
44 0 : static std::tuple<bool, evolution::dg::subcell::RdmpTciData> apply(
45 : const Scalar<DataVector>& dg_u, const Mesh<Dim>& dg_mesh,
46 : const Mesh<Dim>& subcell_mesh,
47 : const evolution::dg::subcell::RdmpTciData& past_rdmp_tci_data,
48 : const evolution::dg::subcell::SubcellOptions& subcell_options,
49 : const TciOptions& tci_options, double persson_exponent,
50 : bool element_stays_on_dg);
51 : };
52 : } // namespace ScalarAdvection::subcell
|