ryujin 2.1.1 revision d1a5601757449924e68a428cfd892dfe8915810d
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 <offline_data.h>
10
11#include <deal.II/base/parameter_acceptor.h>
12
13namespace ryujin
14{
37 template <typename Description, int dim, typename Number = double>
38 class Postprocessor final : public dealii::ParameterAcceptor
39 {
40 public:
45
47
48 using View =
49 typename Description::template HyperbolicSystemView<dim, Number>;
50
51 static constexpr auto problem_dimension = View::problem_dimension;
52
53 using state_type = typename View::state_type;
54
55 template <typename T>
56 using grad_type = dealii::Tensor<1, dim, T>;
57
58 template <typename T>
59 using curl_type = dealii::Tensor<1, dim == 2 ? 1 : dim, T>;
60
62
64
66
70
74 Postprocessor(const MPI_Comm &mpi_communicator,
75 const HyperbolicSystem &hyperbolic_system,
76 const OfflineData<dim, Number> &offline_data,
77 const std::string &subsection = "/Postprocessor");
78
86 void prepare();
87
91 unsigned int n_quantities() const
92 {
93 return quantities_.size();
94 }
95
99 const std::vector<std::string> component_names() const
100 {
101 return component_names_;
102 }
103
109 void reset_bounds() const
110 {
111 bounds_.clear();
112 }
113
126 void compute(const StateVector &state_vector) const;
127
132 ACCESSOR_READ_ONLY(quantities)
133
134
135 private:
140
141 bool recompute_bounds_;
142 Number beta_;
143
144 std::vector<std::string> schlieren_quantities_;
145 std::vector<std::string> vorticity_quantities_;
146
148
152
153 const MPI_Comm &mpi_communicator_;
154
155 dealii::SmartPointer<const HyperbolicSystem> hyperbolic_system_;
156 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
157
158 std::vector<std::string> component_names_;
159 std::vector<std::pair<bool /*primitive*/, unsigned int>> schlieren_indices_;
160 std::vector<std::pair<bool /*primitive*/, unsigned int>> vorticity_indices_;
161
162 mutable std::vector<std::pair<Number, Number>> bounds_;
163 mutable std::vector<ScalarVector> quantities_;
165 };
166
167} // namespace ryujin
const std::vector< std::string > component_names() const
Definition: postprocessor.h:99
Vectors::ScalarVector< Number > ScalarVector
Definition: postprocessor.h:63
typename Description::HyperbolicSystem HyperbolicSystem
Definition: postprocessor.h:46
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: postprocessor.h:49
void reset_bounds() const
dealii::Tensor< 1, dim==2 ? 1 :dim, T > curl_type
Definition: postprocessor.h:59
unsigned int n_quantities() const
Definition: postprocessor.h:91
typename View::state_type state_type
Definition: postprocessor.h:53
dealii::Tensor< 1, dim, T > grad_type
Definition: postprocessor.h:56
static constexpr auto problem_dimension
Definition: postprocessor.h:51
void compute(const StateVector &state_vector) const
typename View::StateVector StateVector
Definition: postprocessor.h:61
Postprocessor(const MPI_Comm &mpi_communicator, const HyperbolicSystem &hyperbolic_system, const OfflineData< dim, Number > &offline_data, const std::string &subsection="/Postprocessor")
#define ACCESSOR_READ_ONLY(member)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarVector
Definition: state_vector.h:25
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