Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include "DataStructures/TaggedTuple.hpp"
7 : #include "Parallel/GlobalCache.hpp"
8 : #include "Parallel/ParallelComponentHelpers.hpp"
9 : #include "Parallel/PhaseControl/PhaseControlTags.hpp"
10 : #include "Utilities/Gsl.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
|