ryujin 2.1.1 revision d1a5601757449924e68a428cfd892dfe8915810d
vtu_output.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 "convenience_macros.h"
11#include "hyperbolic_module.h"
12#include "offline_data.h"
13#include "postprocessor.h"
14
15#include <deal.II/base/parameter_acceptor.h>
16#include <deal.II/grid/intergrid_map.h>
17#include <deal.II/multigrid/mg_transfer_matrix_free.h>
18
19namespace ryujin
20{
21
29 template <typename Description, int dim, typename Number = double>
30 class VTUOutput final : public dealii::ParameterAcceptor
31 {
32 public:
37
39
40 using View =
41 typename Description::template HyperbolicSystemView<dim, Number>;
42
43 static constexpr auto problem_dimension = View::problem_dimension;
44
45 using state_type = typename View::state_type;
46
47 static constexpr auto n_precomputed_values = View::n_precomputed_values;
48
49 using precomputed_type = typename View::precomputed_type;
50
52
54
56
60
65 const MPI_Comm &mpi_communicator,
66 const OfflineData<dim, Number> &offline_data,
67 const HyperbolicModule<Description, dim, Number> &hyperbolic_module,
68 const Postprocessor<Description, dim, Number> &postprocessor,
69 const std::string &subsection = "/VTUOutput");
70
78 void prepare();
79
97 void schedule_output(const StateVector &state_vector,
98 std::string name,
99 Number t,
100 unsigned int cycle,
101 bool output_full = true,
102 bool output_cutplanes = true);
103
111
112 private:
117
118 bool use_mpi_io_;
119
120 std::vector<std::string> manifolds_;
121
122 std::vector<std::string> vtu_output_quantities_;
123
125
129
130 const MPI_Comm &mpi_communicator_;
131
132 dealii::SmartPointer<const OfflineData<dim, Number>> offline_data_;
133 dealii::SmartPointer<const HyperbolicModule<Description, dim, Number>>
134 hyperbolic_module_;
135 dealii::SmartPointer<const Postprocessor<Description, dim, Number>>
136 postprocessor_;
137
138 bool need_to_prepare_step_;
139
140 std::vector<ScalarVector> quantities_;
141
142 std::vector<
143 std::tuple<std::string /*name*/,
144 std::function<void(ScalarVector & /*result*/,
145 const StateVector & /*state_vector*/)>>>
146 quantities_mapping_;
147
149 };
150
151} /* namespace ryujin */
auto & need_to_prepare_step() const
Definition: vtu_output.h:110
VTUOutput(const MPI_Comm &mpi_communicator, const OfflineData< dim, Number > &offline_data, const HyperbolicModule< Description, dim, Number > &hyperbolic_module, const Postprocessor< Description, dim, Number > &postprocessor, const std::string &subsection="/VTUOutput")
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: vtu_output.h:41
typename View::StateVector StateVector
Definition: vtu_output.h:51
void schedule_output(const StateVector &state_vector, std::string name, Number t, unsigned int cycle, bool output_full=true, bool output_cutplanes=true)
typename View::precomputed_type precomputed_type
Definition: vtu_output.h:49
typename Description::HyperbolicSystem HyperbolicSystem
Definition: vtu_output.h:38
typename View::state_type state_type
Definition: vtu_output.h:45
Vectors::ScalarVector< Number > ScalarVector
Definition: vtu_output.h:53
static constexpr auto n_precomputed_values
Definition: vtu_output.h:47
static constexpr auto problem_dimension
Definition: vtu_output.h:43
#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