SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/Amr/Criteria - DriveToTarget.hpp Coverage Total Hit
Commit: 0d1d717af84a81fb1284a20c4013708fe85cc2f0 Lines: 13.6 % 22 3
Test Date: 2026-10-22 17:29:42
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 <array>
       7              : #include <cstddef>
       8              : #include <pup.h>
       9              : 
      10              : #include "Domain/Amr/Flag.hpp"
      11              : #include "Domain/Tags.hpp"
      12              : #include "ParallelAlgorithms/Amr/Criteria/Criterion.hpp"
      13              : #include "ParallelAlgorithms/Amr/Criteria/Type.hpp"
      14              : #include "Utilities/TMPL.hpp"
      15              : 
      16              : /// \cond
      17              : template <size_t>
      18              : class ElementId;
      19              : template <size_t>
      20              : class Mesh;
      21              : /// \endcond
      22              : 
      23              : namespace amr::Criteria {
      24              : /*!
      25              :  * \brief Refine the grid towards the target number of grid points and
      26              :  * refinement levels in each dimension and then oscillate about the target.
      27              :  *
      28              :  * \details If the grid is at neither target in a given dimension, the
      29              :  * flag chosen will be in the priority order Split, IncreaseResolution,
      30              :  * DecreaseResolution, Join.
      31              :  *
      32              :  * \note To remain at the target, set the OscillationAtTarget Flags to
      33              :  * DoNothing.
      34              :  *
      35              :  * \note This criterion is primarily for testing the mechanics of refinement.
      36              :  */
      37              : template <size_t Dim, Type CriteriaType>
      38            1 : class DriveToTarget : public Criterion {
      39              :  public:
      40              :   /// The target (number of grid points or refinement level) in each dimension
      41            1 :   struct Target {
      42            0 :     using type = std::array<size_t, Dim>;
      43            0 :     static constexpr Options::String help = {
      44              :         CriteriaType == Type::p
      45              :             ? "The target number of grid points in each dimension."
      46              :             : "The target refinement level in each dimension."};
      47              :   };
      48              : 
      49              :   /// The AMR flags chosen when the target in each dimension is reached
      50            1 :   struct OscillationAtTarget {
      51            0 :     using type = std::array<Flag, Dim>;
      52            0 :     static constexpr Options::String help = {
      53              :         "The flags returned when at the target."};
      54              :   };
      55              : 
      56            0 :   using options = tmpl::list<Target, OscillationAtTarget>;
      57              : 
      58            0 :   static constexpr Options::String help = {
      59              :       "Refine the grid towards the Target, and then oscillate about them by "
      60              :       "applying OscillationAtTarget."};
      61              : 
      62            0 :   DriveToTarget() = default;
      63              : 
      64            0 :   DriveToTarget(const std::array<size_t, Dim>& target,
      65              :                 const std::array<Flag, Dim>& flags_at_target);
      66              : 
      67              :   /// \cond
      68              :   explicit DriveToTarget(CkMigrateMessage* msg);
      69              :   using PUP::able::register_constructor;
      70              :   WRAPPED_PUPable_decl_template(DriveToTarget);  // NOLINT
      71              :   /// \endcond
      72              : 
      73            0 :   static std::string name() {
      74              :     return CriteriaType == Type::p ? "DriveToTargetNumberOfGridPoints"
      75              :                                    : "DriveToTargetRefinementLevels";
      76              :   }
      77              : 
      78            0 :   Type type() override { return CriteriaType; }
      79              : 
      80            0 :   std::string observation_name() override { return "DriveToTarget"; }
      81              : 
      82            0 :   using compute_tags_for_observation_box = tmpl::list<>;
      83              : 
      84            0 :   using argument_tags = tmpl::list<::domain::Tags::Mesh<Dim>>;
      85              : 
      86              :   template <typename Metavariables>
      87            0 :   auto operator()(const Mesh<Dim>& current_mesh,
      88              :                   Parallel::GlobalCache<Metavariables>& /*cache*/,
      89              :                   const ElementId<Dim>& element_id) const;
      90              : 
      91            0 :   void pup(PUP::er& p) override;
      92              : 
      93              :  private:
      94            0 :   std::array<Flag, Dim> impl(const Mesh<Dim>& current_mesh,
      95              :                              const ElementId<Dim>& element_id) const;
      96              : 
      97            0 :   std::array<size_t, Dim> target_{};
      98            0 :   std::array<Flag, Dim> flags_at_target_{};
      99              : };
     100              : 
     101              : template <size_t Dim, Type CriteriaType>
     102              : template <typename Metavariables>
     103              : auto DriveToTarget<Dim, CriteriaType>::operator()(
     104              :     const Mesh<Dim>& current_mesh,
     105              :     Parallel::GlobalCache<Metavariables>& /*cache*/,
     106              :     const ElementId<Dim>& element_id) const {
     107              :   return impl(current_mesh, element_id);
     108              : }
     109              : }  // namespace amr::Criteria
        

Generated by: LCOV version 2.0-1