Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include "Parallel/GlobalCache.hpp" 7 : #include "Parallel/ParallelComponentHelpers.hpp" 8 : #include "Parallel/PhaseControl/PhaseControlTags.hpp" 9 : #include "Utilities/Gsl.hpp" 10 : #include "Utilities/TaggedTuple.hpp" 11 : 12 : namespace PhaseControl { 13 : /*! 14 : * \brief Initialize the Main chare's `phase_change_decision_data` for the 15 : * option-selected `PhaseChange`s. 16 : */ 17 : template <typename... DecisionTags, typename Metavariables> 18 1 : void initialize_phase_change_decision_data( 19 : const gsl::not_null<tuples::TaggedTuple<DecisionTags...>*> 20 : phase_change_decision_data, 21 : const Parallel::GlobalCache<Metavariables>& cache) { 22 : tuples::get<TagsAndCombines::UsePhaseChangeArbitration>( 23 : *phase_change_decision_data) = false; 24 : if constexpr (Parallel::is_in_global_cache<Metavariables, 25 : Tags::PhaseChangeAndTriggers>) { 26 : const auto& phase_change_and_triggers = 27 : Parallel::get<Tags::PhaseChangeAndTriggers>(cache); 28 : for (const auto& trigger_and_phase_changes : phase_change_and_triggers) { 29 : for (const auto& phase_change : trigger_and_phase_changes.phase_changes) { 30 : phase_change->template initialize_phase_data<Metavariables>( 31 : phase_change_decision_data); 32 : } 33 : } 34 : } 35 : } 36 : } // namespace PhaseControl