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