Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <iomanip>
7 : #include <sstream>
8 : #include <string>
9 :
10 : #include "DataStructures/Variables.hpp"
11 : #include "Parallel/InboxInserters.hpp"
12 : #include "Time/TimeStepId.hpp"
13 :
14 : namespace Cce {
15 : /// \brief Tags used by CCE for communication.
16 1 : namespace ReceiveTags {
17 :
18 : /// A receive tag for the data sent to the CCE evolution component from the CCE
19 : /// boundary component
20 : template <typename CommunicationTagList>
21 1 : struct BoundaryData
22 : : Parallel::InboxInserters::Value<BoundaryData<CommunicationTagList>> {
23 0 : using temporal_id = TimeStepId;
24 0 : using type = std::unordered_map<temporal_id, Variables<CommunicationTagList>>;
25 :
26 0 : static std::string output_inbox(const type& inbox,
27 : const size_t padding_size) {
28 : std::stringstream ss{};
29 : const std::string pad(padding_size, ' ');
30 :
31 : ss << std::scientific << std::setprecision(16);
32 : ss << pad << "CceBoundaryDataInbox:\n";
33 : // We don't really care about the variables, just the times
34 : for (const auto& [current_time_step_id, variables] : inbox) {
35 : (void)variables;
36 : ss << pad << " Time: " << current_time_step_id << "\n";
37 : }
38 :
39 : return ss.str();
40 : }
41 : };
42 :
43 : } // namespace ReceiveTags
44 : } // namespace Cce
|