ryujin 2.1.1 revision d1a5601757449924e68a428cfd892dfe8915810d
time_loop.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 "discretization.h"
11#include "hyperbolic_module.h"
12#include "initial_values.h"
13#include "offline_data.h"
14#include "parabolic_module.h"
15#include "postprocessor.h"
16#include "quantities.h"
17#include "time_integrator.h"
18#include "vtu_output.h"
19
20#include <deal.II/base/parameter_acceptor.h>
21#include <deal.II/base/timer.h>
22
23#include <fstream>
24
25namespace ryujin
26{
27
33 template <typename Description, int dim, typename Number = double>
34 class TimeLoop final : public dealii::ParameterAcceptor
35 {
36 public:
41
43
44 using View =
45 typename Description::template HyperbolicSystemView<dim, Number>;
46
48
50 typename Description::template ParabolicSolver<dim, Number>;
51
52 using ScalarNumber = typename View::ScalarNumber;
53
54 static constexpr auto problem_dimension = View::problem_dimension;
55
56 static constexpr auto n_precomputed_values = View::n_precomputed_values;
57
59
61
63
67
71 TimeLoop(const MPI_Comm &mpi_comm);
72
76 void run();
77
78 protected:
83
84 void compute_error(const StateVector &state_vector, Number t);
85
86 void output(StateVector &state_vector,
87 const std::string &name,
88 Number t,
89 unsigned int cycle);
90
91 void print_parameters(std::ostream &stream);
92 void print_mpi_partition(std::ostream &stream);
93 void print_memory_statistics(std::ostream &stream);
94 void print_timers(std::ostream &stream);
95 void print_throughput(unsigned int cycle,
96 Number t,
97 std::ostream &stream,
98 bool final_time = false);
99
100 void print_info(const std::string &header);
101 void print_head(const std::string &header,
102 const std::string &secondary,
103 std::ostream &stream);
104
105 void print_cycle_statistics(unsigned int cycle,
106 Number t,
107 unsigned int output_cycle,
108 bool write_to_logfile = false,
109 bool final_time = false);
111
112 private:
117
118 std::string base_name_;
119
120 Number t_final_;
121 std::vector<Number> t_refinements_;
122
123 Number output_granularity_;
124
125 bool enable_checkpointing_;
126 bool enable_output_full_;
127 bool enable_output_levelsets_;
128 bool enable_compute_error_;
129 bool enable_compute_quantities_;
130
131 unsigned int output_checkpoint_multiplier_;
132 unsigned int output_full_multiplier_;
133 unsigned int output_levelsets_multiplier_;
134 unsigned int output_quantities_multiplier_;
135
136 std::vector<std::string> error_quantities_;
137 bool error_normalize_;
138
139 bool resume_;
140 bool resume_at_time_zero_;
141
142 Number terminal_update_interval_;
143 bool terminal_show_rank_throughput_;
144
146
150
151 const MPI_Comm &mpi_communicator_;
152
153 std::map<std::string, dealii::Timer> computing_timer_;
154
155 HyperbolicSystem hyperbolic_system_;
156 ParabolicSystem parabolic_system_;
157 Discretization<dim> discretization_;
158 OfflineData<dim, Number> offline_data_;
166
167 const unsigned int mpi_rank_;
168 const unsigned int n_mpi_processes_;
169
170 std::ofstream logfile_; /* log file */
171
173 };
174
175} // namespace ryujin
Vectors::ScalarVector< Number > ScalarVector
Definition: time_loop.h:60
typename Description::template HyperbolicSystemView< dim, Number > View
Definition: time_loop.h:45
typename Description::HyperbolicSystem HyperbolicSystem
Definition: time_loop.h:42
void print_timers(std::ostream &stream)
static constexpr auto problem_dimension
Definition: time_loop.h:54
typename Description::ParabolicSystem ParabolicSystem
Definition: time_loop.h:47
void print_memory_statistics(std::ostream &stream)
void print_mpi_partition(std::ostream &stream)
void print_parameters(std::ostream &stream)
TimeLoop(const MPI_Comm &mpi_comm)
static constexpr auto n_precomputed_values
Definition: time_loop.h:56
typename View::StateVector StateVector
Definition: time_loop.h:58
void compute_error(const StateVector &state_vector, Number t)
void print_head(const std::string &header, const std::string &secondary, std::ostream &stream)
void print_throughput(unsigned int cycle, Number t, std::ostream &stream, bool final_time=false)
typename Description::template ParabolicSolver< dim, Number > ParabolicSolver
Definition: time_loop.h:50
void print_cycle_statistics(unsigned int cycle, Number t, unsigned int output_cycle, bool write_to_logfile=false, bool final_time=false)
void output(StateVector &state_vector, const std::string &name, Number t, unsigned int cycle)
void print_info(const std::string &header)
typename View::ScalarNumber ScalarNumber
Definition: time_loop.h:52
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::ParabolicSystem ParabolicSystem
Definition: description.h:37
Euler::HyperbolicSystem HyperbolicSystem
Definition: description.h:32