SpECTRE Documentation Coverage Report
Current view: top level - ParallelAlgorithms/LinearSolver/ConjugateGradient - InitializeElement.hpp Hit Total Coverage
Commit: 8a30970c95b504394e26ac2f71f8d3dacf8a8e8f Lines: 0 1 0.0 %
Date: 2024-04-19 21:29:46
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 <limits>
       8             : #include <optional>
       9             : #include <tuple>
      10             : #include <utility>
      11             : 
      12             : #include "DataStructures/DataBox/DataBox.hpp"
      13             : #include "DataStructures/DataBox/PrefixHelpers.hpp"
      14             : #include "NumericalAlgorithms/Convergence/HasConverged.hpp"
      15             : #include "NumericalAlgorithms/Convergence/Tags.hpp"
      16             : #include "Parallel/AlgorithmExecution.hpp"
      17             : #include "ParallelAlgorithms/Initialization/MutateAssign.hpp"
      18             : #include "ParallelAlgorithms/LinearSolver/Tags.hpp"
      19             : 
      20             : /// \cond
      21             : namespace Parallel {
      22             : template <typename Metavariables>
      23             : struct GlobalCache;
      24             : }  // namespace Parallel
      25             : namespace tuples {
      26             : template <typename...>
      27             : class TaggedTuple;
      28             : }  // namespace tuples
      29             : /// \endcond
      30             : 
      31             : namespace LinearSolver::cg::detail {
      32             : 
      33             : template <typename FieldsTag, typename OptionsGroup>
      34             : struct InitializeElement {
      35             :  private:
      36             :   using fields_tag = FieldsTag;
      37             :   using operator_applied_to_fields_tag =
      38             :       db::add_tag_prefix<LinearSolver::Tags::OperatorAppliedTo, fields_tag>;
      39             :   using operand_tag =
      40             :       db::add_tag_prefix<LinearSolver::Tags::Operand, fields_tag>;
      41             :   using operator_applied_to_operand_tag =
      42             :       db::add_tag_prefix<LinearSolver::Tags::OperatorAppliedTo, operand_tag>;
      43             :   using residual_tag =
      44             :       db::add_tag_prefix<LinearSolver::Tags::Residual, fields_tag>;
      45             : 
      46             :  public:
      47             :   using simple_tags =
      48             :       tmpl::list<Convergence::Tags::IterationId<OptionsGroup>,
      49             :                  operator_applied_to_fields_tag, operand_tag,
      50             :                  operator_applied_to_operand_tag, residual_tag,
      51             :                  Convergence::Tags::HasConverged<OptionsGroup>>;
      52             :   using compute_tags = tmpl::list<>;
      53             : 
      54             :   template <typename DbTagsList, typename... InboxTags, typename Metavariables,
      55             :             typename ArrayIndex, typename ActionList,
      56             :             typename ParallelComponent>
      57             :   static Parallel::iterable_action_return_t apply(
      58             :       db::DataBox<DbTagsList>& box,
      59             :       const tuples::TaggedTuple<InboxTags...>& /*inboxes*/,
      60             :       const Parallel::GlobalCache<Metavariables>& /*cache*/,
      61             :       const ArrayIndex& /*array_index*/, const ActionList /*meta*/,
      62             :       const ParallelComponent* const /*meta*/) {
      63             :     // The `PrepareSolve` action populates these tags with initial
      64             :     // values, except for `operator_applied_to_fields_tag` which is
      65             :     // expected to be filled at that point and
      66             :     // `operator_applied_to_operand_tag` which is expected to be updated
      67             :     // in every iteration of the algorithm.
      68             :     Initialization::mutate_assign<
      69             :         tmpl::list<Convergence::Tags::IterationId<OptionsGroup>>>(
      70             :         make_not_null(&box), std::numeric_limits<size_t>::max());
      71             :     return {Parallel::AlgorithmExecution::Continue, std::nullopt};
      72             :   }
      73             : };
      74             : 
      75             : }  // namespace LinearSolver::cg::detail

Generated by: LCOV version 1.14