ryujin 2.1.1 revision 1c453cc82f1d29edf537280cd96267402ac73e60
quantities.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2020 - 2024 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "offline_data.h"
11
12#include <deal.II/base/parameter_acceptor.h>
13#include <deal.II/base/timer.h>
14#include <deal.II/lac/la_parallel_block_vector.h>
15#include <deal.II/lac/sparse_matrix.templates.h>
16#include <deal.II/lac/vector.h>
17
18namespace ryujin
19{
25 template <typename Description, int dim, typename Number = double>
26 class Quantities final : public dealii::ParameterAcceptor
27 {
28 public:
33
35
36 using View =
37 typename Description::template HyperbolicSystemView<dim, Number>;
38
39 using state_type = typename View::state_type;
40
42
44
51 Quantities(const MPI_Comm &mpi_communicator,
52 const HyperbolicSystem &hyperbolic_system,
53 const OfflineData<dim, Number> &offline_data,
54 const std::string &subsection = "/Quantities");
55
67 void prepare(const std::string &name, unsigned int cycle);
68
74 void accumulate(const StateVector &state_vector, const Number t);
75
79 void write_out(const StateVector &state_vector,
80 const Number t,
81 unsigned int cycle);
82
84
85 private:
90
91 std::vector<std::tuple<std::string, std::string, std::string>>
92 interior_manifolds_;
93
94 std::vector<std::tuple<std::string, std::string, std::string>>
95 boundary_manifolds_;
96
97 bool clear_temporal_statistics_on_writeout_;
98
100
104
105 const MPI_Comm &mpi_communicator_;
106
107 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
108 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
109
118 using boundary_point =
119 std::tuple<dealii::types::global_dof_index /*local dof index*/,
120 dealii::Tensor<1, dim, Number> /*normal*/,
121 Number /*normal mass*/,
122 Number /*boundary mass*/,
123 dealii::types::boundary_id /*id*/,
124 dealii::Point<dim>> /*position*/;
125
129 std::map<std::string, std::vector<boundary_point>> boundary_maps_;
130
136 using boundary_value =
137 std::tuple<state_type /* primitive state */,
138 state_type /* primitive state second moment */>;
139
143 using boundary_statistic =
144 std::tuple<std::vector<boundary_value> /* values old */,
145 std::vector<boundary_value> /* values new */,
146 std::vector<boundary_value> /* values sum */,
147 Number /* t old */,
148 Number /* t new */,
149 Number /* t sum */>;
150
154 std::map<std::string, boundary_statistic> boundary_statistics_;
155 std::map<std::string, std::vector<std::tuple<Number, boundary_value>>>
156 boundary_time_series_;
157
162 using interior_point =
163 std::tuple<dealii::types::global_dof_index /*local dof index*/,
164 Number /*mass*/,
165 dealii::Point<dim>> /*position*/;
166
170 std::map<std::string, std::vector<interior_point>> interior_maps_;
171
176 using interior_value =
177 std::tuple<state_type /* primitive state */,
178 state_type /* primitive state second moment */>;
179
183 using interior_statistic =
184 std::tuple<std::vector<interior_value> /* values old */,
185 std::vector<interior_value> /* values new */,
186 std::vector<interior_value> /* values sum */,
187 Number /* t old */,
188 Number /* t new */,
189 Number /* t sum */>;
190
194 std::map<std::string, interior_statistic> interior_statistics_;
195 std::map<std::string, std::vector<std::tuple<Number, interior_value>>>
196 interior_time_series_;
197
198 std::string base_name_;
199 unsigned int time_series_cycle_;
200 bool first_cycle_;
201
203
207
208 void clear_statistics();
209
210 std::string header_;
211
212 template <typename point_type, typename value_type>
213 value_type internal_accumulate(const StateVector &state_vector,
214 const std::vector<point_type> &interior_map,
215 std::vector<value_type> &new_val);
216
217 template <typename value_type>
218 void internal_write_out(std::ostream &output,
219 const std::vector<value_type> &values,
220 const Number scale);
221
222 template <typename value_type>
223 void internal_write_out_time_series(
224 std::ostream &output,
225 const std::vector<std::tuple<Number, value_type>> &values,
226 bool append);
227
229 };
230
231} /* namespace ryujin */
typename Description::HyperbolicSystem HyperbolicSystem
Definition: quantities.h:34
void write_out(const StateVector &state_vector, const Number t, unsigned int cycle)
typename View::StateVector StateVector
Definition: quantities.h:41
void accumulate(const StateVector &state_vector, const Number t)
typename View::state_type state_type
Definition: quantities.h:39
Quantities(const MPI_Comm &mpi_communicator, const HyperbolicSystem &hyperbolic_system, const OfflineData< dim, Number > &offline_data, const std::string &subsection="/Quantities")
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: quantities.h:37
void prepare(const std::string &name, unsigned int cycle)
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockVector< Number > > StateVector
Definition: state_vector.h:45
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:32