ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
Loading...
Searching...
No Matches
postprocessor.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2020 - 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "mpi_ensemble.h"
11#include "observer_pointer.h"
12#include "offline_data.h"
13
14#include <deal.II/base/parameter_acceptor.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 = typename HyperbolicSystem::template View<dim, Number>;
53
54 static constexpr auto problem_dimension = View::problem_dimension;
55
56 using state_type = typename View::state_type;
57
58 template <typename T>
59 using grad_type = dealii::Tensor<1, dim, T>;
60
61 template <typename T>
62 using curl_type = dealii::Tensor<1, dim == 2 ? 1 : dim, T>;
63
64 using StateVector = typename View::StateVector;
65
67
71
75 Postprocessor(const MPIEnsemble &mpi_ensemble,
76 const OfflineData<dim, Number> &offline_data,
77 const HyperbolicSystem &hyperbolic_system,
78 const ParabolicSystem &parabolic_system,
79 const std::string &subsection = "/Postprocessor");
80
88 void prepare();
89
91
95
108 void compute(const StateVector &state_vector) const;
109
115 void reset_bounds() const
116 {
117 bounds_.clear();
118 }
119
121
125
129 unsigned int n_quantities() const
130 {
131 return quantities_.size();
132 }
133
137 const std::vector<std::string> component_names() const
138 {
139 return component_names_;
140 }
141
147
148 private:
150
154
155 bool recompute_bounds_;
156 Number beta_;
157
158 std::vector<std::string> schlieren_quantities_;
159 std::vector<std::string> vorticity_quantities_;
160
162
166
167 const MPIEnsemble &mpi_ensemble_;
168
169 dealii::ObserverPointer<const OfflineData<dim, Number>> offline_data_;
170 dealii::ObserverPointer<const HyperbolicSystem> hyperbolic_system_;
171 dealii::ObserverPointer<const ParabolicSystem> parabolic_system_;
172
173 std::vector<std::string> component_names_;
174 std::vector<std::pair<bool /*primitive*/, unsigned int>> schlieren_indices_;
175 std::vector<std::pair<bool /*primitive*/, unsigned int>> vorticity_indices_;
176
177 mutable std::vector<std::pair<Number, Number>> bounds_;
178 using ScalarHostVector = Vectors::ScalarHostVector<Number>;
179 mutable std::vector<ScalarHostVector> quantities_;
180
182 };
183
184} // namespace ryujin
const std::vector< std::string > component_names() const
const auto & quantities() const
typename Description::HyperbolicSystem HyperbolicSystem
typename Description::ParabolicSystem ParabolicSystem
void reset_bounds() const
dealii::Tensor< 1, dim==2 ? 1 :dim, T > curl_type
unsigned int n_quantities() const
typename View::state_type state_type
dealii::Tensor< 1, dim, T > grad_type
static constexpr auto problem_dimension
void compute(const StateVector &state_vector) const
typename View::StateVector StateVector
typename HyperbolicSystem::template View< dim, Number > View
#define ACCESSOR_READ_ONLY(member)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarHostVector
Euler::HyperbolicSystem HyperbolicSystem
Definition description.h:34
ryujin::StubParabolicSystem ParabolicSystem
Definition description.h:36