ryujin 2.1.1 revision b04fb4aba7bd97ddfa5994a6b4b6e8586eb15db2
Loading...
Searching...
No Matches
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 - 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
10#include "discretization.h"
11#include "error_evaluation.h"
12#include "hyperbolic_module.h"
13#include "initial_values.h"
14#include "mesh_adaptor.h"
15#include "mpi_ensemble.h"
17#include "offline_data.h"
18#include "parabolic_module.h"
19#include "postprocessor.h"
20#include "quantities.h"
21#include "solution_transfer.h"
22#include "time_integrator.h"
23#include "vtu_output.h"
24
25#include <deal.II/base/parameter_acceptor.h>
26
27#include <fstream>
28
29namespace ryujin
30{
36 template <typename HyperbolicDescription,
37 typename ParabolicDescription,
38 int dim,
39 typename Number = double>
40 class TimeLoop final : public dealii::ParameterAcceptor
41 {
42 public:
47
50
51 using View = typename HyperbolicSystem::template View<dim, Number>;
52
53 using ScalarNumber = typename View::ScalarNumber;
54
55 static constexpr auto problem_dimension = View::problem_dimension;
56
57 static constexpr auto n_precomputed_values = View::n_precomputed_values;
58
60
64
68 TimeLoop(const MPI_Comm &mpi_comm);
69
73 void run();
74
75 private:
77
81
82 std::string base_name_;
83 std::string base_name_ensemble_;
84
85 std::string debug_command_;
86 std::string debug_filename_;
87
88 Number t_final_;
89 bool enforce_t_final_;
90 Number timer_granularity_;
91
92 bool enable_output_full_;
93 bool enable_output_levelsets_;
94 bool enable_compute_error_;
95 bool enable_compute_quantities_;
96 bool enable_mesh_adaptivity_;
97
98 unsigned int timer_output_full_multiplier_;
99 unsigned int timer_output_levelsets_multiplier_;
100 unsigned int timer_compute_error_multiplier_;
101 unsigned int timer_compute_quantities_multiplier_;
102
103 bool resume_;
104 bool resume_at_time_zero_;
105
106 Number terminal_update_interval_;
107 bool terminal_correct_for_hypertreadhing_;
108
109 Number checkpoint_update_interval_;
110
112
116
117 MPIEnsemble mpi_ensemble_;
118
121 Discretization<dim> discretization_;
122 OfflineData<dim, Number> offline_data_;
124 initial_values_;
127 parabolic_module_;
129 time_integrator_;
136
137 dealii::types::global_dof_index n_global_dofs_;
138 unsigned int n_devices_;
139
140 std::ofstream logfile_; /* log file */
141
143
147
154 template <typename Callable>
155 void read_checkpoint(StateVector<Number> &state_vector,
156 const std::string &base_name,
157 Number &t,
158 unsigned int &output_cycle,
159 const Callable &prepare_compute_kernels);
160
170 void write_checkpoint(const StateVector<Number> &state_vector,
171 const std::string &base_name,
172 const Number &t,
173 const unsigned int &output_cycle);
174
180 template <typename Callable>
181 void adapt_mesh_and_transfer_state_vector(
182 StateVector<Number> &state_vector,
183 const Callable &prepare_compute_kernels);
184
191 void interpolate_analytic_solution(StateVector<Number> &analytic, Number t);
192
193 void output(const StateVector<Number> &state_vector,
194 const std::string &name,
195 const Number t,
196 const unsigned int cycle);
197
198 void print_parameters(std::ostream &stream);
199 void print_mpi_partition(std::ostream &stream);
200 void print_device_information(std::ostream &stream);
201
202 void print_info(const std::string &header);
203
204 void print_head(const std::string &header,
205 const std::string &secondary,
206 std::ostream &stream);
207
208 void print_information(unsigned int output_cycle,
209 Number last_checkpoint,
210 std::ostream &stream,
211 bool final_time = false);
212 void print_memory_statistics(std::ostream &stream);
213 void print_timers(std::ostream &stream);
214 void print_throughput(unsigned int cycle,
215 Number t,
216 std::ostream &stream,
217 bool final_time = false);
218
219 void print_cycle_statistics(unsigned int cycle,
220 Number t,
221 unsigned int output_cycle,
222 Number last_checkpoint,
223 bool write_to_logfile = false,
224 bool final_time = false);
225
227 };
228
229} // namespace ryujin
typename HyperbolicSystem::template View< dim, Number > View
Definition time_loop.h:51
typename HyperbolicDescription::HyperbolicSystem HyperbolicSystem
Definition time_loop.h:48
typename ParabolicDescription::ParabolicSystem ParabolicSystem
Definition time_loop.h:49
static constexpr auto n_precomputed_values
Definition time_loop.h:57
typename View::ScalarNumber ScalarNumber
Definition time_loop.h:53
static constexpr auto problem_dimension
Definition time_loop.h:55
typename ParabolicDescription::template ParabolicModule< HyperbolicDescription, dim, Number > ParabolicModule
Euler::HyperbolicDescription HyperbolicDescription
StubParabolicDescription ParabolicDescription
Definition instantiate.h:19