SpECTRE Documentation Coverage Report
Current view: top level - Evolution/DiscontinuousGalerkin/Initialization - SpectralFilters.hpp Hit Total Coverage
Commit: a18e59fda1a195609825c55450f7d61ad20a91a4 Lines: 2 10 20.0 %
Date: 2026-06-11 22:10:41
Legend: Lines: hit not hit

          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 <memory>
       8             : #include <vector>
       9             : 
      10             : #include "Domain/Tags.hpp"
      11             : #include "NumericalAlgorithms/LinearOperators/Filters/Tag.hpp"
      12             : #include "Utilities/TMPL.hpp"
      13             : 
      14             : /// \cond
      15             : template <size_t Dim>
      16             : class Element;
      17             : template <size_t Dim>
      18             : class Mesh;
      19             : namespace gsl {
      20             : template <typename T>
      21             : class not_null;
      22             : }  // namespace gsl
      23             : namespace Filters {
      24             : template <size_t Dim, typename TagList>
      25             : class Filter;
      26             : }  // namespace Filters
      27             : /// \endcond
      28             : 
      29             : namespace evolution::dg::Initialization {
      30             : /*!
      31             :  * \brief Initialization mutator that selects the spectral filter for each
      32             :  * element and stores it as `Filters::Tags::SpectralFilter` in the DataBox.
      33             :  *
      34             :  * \details Used with `Initialization::Actions::InitializeItems`. For each
      35             :  * element, `apply` scans the GlobalCache list
      36             :  * `Filters::Tags::SpectralFilters<Dim, TagList>` and selects the unique filter
      37             :  * `f` for which `f->supports_mesh(mesh)` returns `true` AND either
      38             :  * `f->blocks_to_filter()` is `std::nullopt` (the filter applies to every
      39             :  * block) or the element's block id is contained in
      40             :  * `f->blocks_to_filter().value()`. The selected filter is deep-copied via
      41             :  * `Filters::Filter::get_clone` and stored in
      42             :  * `Filters::Tags::SpectralFilter<Dim, TagList>`.
      43             :  *
      44             :  * Errors if more than one filter in the list matches an element, or if no
      45             :  * filter matches (specify a `None` filter to disable filtering in an element).
      46             :  *
      47             :  * Uses:
      48             :  * - GlobalCache:
      49             :  *   - `Filters::Tags::SpectralFilters<Dim, TagList>`
      50             :  * - DataBox:
      51             :  *   - `domain::Tags::Element<Dim>`
      52             :  *   - `domain::Tags::Mesh<Dim>`
      53             :  *
      54             :  * DataBox changes:
      55             :  * - Adds:
      56             :  *   - `Filters::Tags::SpectralFilter<Dim, TagList>`
      57             :  * - Removes: nothing
      58             :  * - Modifies: nothing
      59             :  *
      60             :  * \tparam Dim Spatial dimension of the element mesh.
      61             :  * \tparam TagList `tmpl::list` of tensor tags in the `Variables` to filter.
      62             :  */
      63             : template <size_t Dim, typename TagList>
      64           1 : struct SpectralFilters {
      65           0 :   using const_global_cache_tags =
      66             :       tmpl::list<Filters::Tags::SpectralFilters<Dim, TagList>>;
      67           0 :   using mutable_global_cache_tags = tmpl::list<>;
      68           0 :   using simple_tags_from_options = tmpl::list<>;
      69           0 :   using simple_tags = tmpl::list<Filters::Tags::SpectralFilter<Dim, TagList>>;
      70           0 :   using compute_tags = tmpl::list<>;
      71             : 
      72           0 :   using return_tags = simple_tags;
      73           0 :   using argument_tags =
      74             :       tmpl::list<Filters::Tags::SpectralFilters<Dim, TagList>,
      75             :                  domain::Tags::Element<Dim>, domain::Tags::Mesh<Dim>>;
      76             : 
      77             :   /// Sets `spectral_filter` to a clone of the unique filter from
      78             :   /// `spectral_filters` that supports `mesh` and applies to `element`'s block.
      79           1 :   static void apply(
      80             :       gsl::not_null<std::unique_ptr<Filters::Filter<Dim, TagList>>*>
      81             :           spectral_filter,
      82             :       const std::vector<std::unique_ptr<Filters::Filter<Dim, TagList>>>&
      83             :           spectral_filters,
      84             :       const Element<Dim>& element, const Mesh<Dim>& mesh);
      85             : };
      86             : }  // namespace evolution::dg::Initialization

Generated by: LCOV version 1.14