ryujin 2.1.1 revision ef0fcd4010d109b860652ece4a7b8963fb7d46b1
postprocessor.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 "mpi_ensemble.h"
11#include "offline_data.h"
12
13#include <deal.II/base/parameter_acceptor.h>
14#include <deal.II/base/smartpointer.h>
15
16namespace ryujin
17{
40 template <typename Description, int dim, typename Number = double>
41 class Postprocessor final : public dealii::ParameterAcceptor
42 {
43 public:
48
51
52 using View =
53 typename Description::template HyperbolicSystemView<dim, Number>;
54
55 static constexpr auto problem_dimension = View::problem_dimension;
56
57 using state_type = typename View::state_type;
58
59 template <typename T>
60 using grad_type = dealii::Tensor<1, dim, T>;
61
62 template <typename T>
63 using curl_type = dealii::Tensor<1, dim == 2 ? 1 : dim, T>;
64
66
68
70
74
78 Postprocessor(const MPIEnsemble &mpi_ensemble,
79 const OfflineData<dim, Number> &offline_data,
80 const HyperbolicSystem &hyperbolic_system,
81 const ParabolicSystem &parabolic_system,
82 const std::string &subsection = "/Postprocessor");
83
91 void prepare();
92
96 unsigned int n_quantities() const
97 {
98 return quantities_.size();
99 }
100
104 const std::vector<std::string> component_names() const
105 {
106 return component_names_;
107 }
108
114 void reset_bounds() const
115 {
116 bounds_.clear();
117 }
118
131 void compute(const StateVector &state_vector) const;
132
138
139
140 private:
145
146 bool recompute_bounds_;
147 Number beta_;
148
149 std::vector<std::string> schlieren_quantities_;
150 std::vector<std::string> vorticity_quantities_;
151
153
157
158 const MPIEnsemble &mpi_ensemble_;
159
160 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
161 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
162 dealii::SmartPointer<const ParabolicSystem> parabolic_system_;
163
164 std::vector<std::string> component_names_;
165 std::vector<std::pair<bool /*primitive*/, unsigned int>> schlieren_indices_;
166 std::vector<std::pair<bool /*primitive*/, unsigned int>> vorticity_indices_;
167
168 mutable std::vector<std::pair<Number, Number>> bounds_;
169 mutable std::vector<ScalarVector> quantities_;
171 };
172
173} // namespace ryujin
const std::vector< std::string > component_names() const
const auto & quantities() const
Vectors::ScalarVector< Number > ScalarVector
Definition: postprocessor.h:67
typename Description::HyperbolicSystem HyperbolicSystem
Definition: postprocessor.h:49
Postprocessor(const MPIEnsemble &mpi_ensemble, const OfflineData< dim, Number > &offline_data, const HyperbolicSystem &hyperbolic_system, const ParabolicSystem &parabolic_system, const std::string &subsection="/Postprocessor")
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: postprocessor.h:53
typename Description::ParabolicSystem ParabolicSystem
Definition: postprocessor.h:50
void reset_bounds() const
dealii::Tensor< 1, dim==2 ? 1 :dim, T > curl_type
Definition: postprocessor.h:63
unsigned int n_quantities() const
Definition: postprocessor.h:96
typename View::state_type state_type
Definition: postprocessor.h:57
dealii::Tensor< 1, dim, T > grad_type
Definition: postprocessor.h:60
static constexpr auto problem_dimension
Definition: postprocessor.h:55
void compute(const StateVector &state_vector) const
typename View::StateVector StateVector
Definition: postprocessor.h:65
#define ACCESSOR_READ_ONLY(member)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarVector
Definition: state_vector.h:33
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockVector< Number > > StateVector
Definition: state_vector.h:53
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:34
ryujin::StubParabolicSystem ParabolicSystem
Definition: description.h:39