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 <map> 8 : #include <tuple> 9 : 10 : #include "DataStructures/DynamicVector.hpp" 11 : #include "NumericalAlgorithms/Convergence/HasConverged.hpp" 12 : #include "Parallel/InboxInserters.hpp" 13 : #include "Utilities/TMPL.hpp" 14 : 15 : namespace LinearSolver::gmres::detail::Tags { 16 : 17 : template <typename OptionsGroup> 18 : struct InitialOrthogonalization 19 : : Parallel::InboxInserters::Value<InitialOrthogonalization<OptionsGroup>> { 20 : using temporal_id = size_t; 21 : using type = 22 : std::map<temporal_id, std::tuple<double, Convergence::HasConverged>>; 23 : }; 24 : 25 : template <typename OptionsGroup, typename ValueType> 26 : struct Orthogonalization : Parallel::InboxInserters::Value< 27 : Orthogonalization<OptionsGroup, ValueType>> { 28 : using temporal_id = size_t; 29 : using type = std::map<temporal_id, ValueType>; 30 : }; 31 : 32 : template <typename OptionsGroup, typename ValueType> 33 : struct FinalOrthogonalization 34 : : Parallel::InboxInserters::Value< 35 : FinalOrthogonalization<OptionsGroup, ValueType>> { 36 : using temporal_id = size_t; 37 : using type = 38 : std::map<temporal_id, std::tuple<double, blaze::DynamicVector<ValueType>, 39 : Convergence::HasConverged>>; 40 : }; 41 : 42 : } // namespace LinearSolver::gmres::detail::Tags