ryujin 2.1.1 revision 71cdc42292164f8095c0bd62c4ea75ebcfac58fa
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 Description, int dim, typename Number = double>
37 class TimeLoop final : public dealii::ParameterAcceptor
38 {
39 public:
44
47
48 using View = typename HyperbolicSystem::template View<dim, Number>;
49
50 using ScalarNumber = typename View::ScalarNumber;
51
52 static constexpr auto problem_dimension = View::problem_dimension;
53
54 static constexpr auto n_precomputed_values = View::n_precomputed_values;
55
56 using StateVector = typename View::StateVector;
57
59
63
67 TimeLoop(const MPI_Comm &mpi_comm);
68
72 void run();
73
74 private:
76
80
81 std::string base_name_;
82 std::string base_name_ensemble_;
83
84 std::string debug_command_;
85 std::string debug_filename_;
86
87 Number t_final_;
88 bool enforce_t_final_;
89 Number timer_granularity_;
90
91 bool enable_output_full_;
92 bool enable_output_levelsets_;
93 bool enable_compute_error_;
94 bool enable_compute_quantities_;
95 bool enable_mesh_adaptivity_;
96
97 unsigned int timer_output_full_multiplier_;
98 unsigned int timer_output_levelsets_multiplier_;
99 unsigned int timer_compute_error_multiplier_;
100 unsigned int timer_compute_quantities_multiplier_;
101
102 bool resume_;
103 bool resume_at_time_zero_;
104
105 Number terminal_update_interval_;
106 bool terminal_correct_for_hypertreadhing_;
107
108 Number checkpoint_update_interval_;
109
111
115
116 MPIEnsemble mpi_ensemble_;
117
120 Discretization<dim> discretization_;
121 OfflineData<dim, Number> offline_data_;
123 initial_values_;
133
134 dealii::types::global_dof_index n_global_dofs_;
135 unsigned int n_devices_;
136
137 std::ofstream logfile_; /* log file */
138
140
144
151 template <typename Callable>
152 void read_checkpoint(StateVector &state_vector,
153 const std::string &base_name,
154 Number &t,
155 unsigned int &output_cycle,
156 const Callable &prepare_compute_kernels);
157
167 void write_checkpoint(const StateVector &state_vector,
168 const std::string &base_name,
169 const Number &t,
170 const unsigned int &output_cycle);
171
177 template <typename Callable>
178 void adapt_mesh_and_transfer_state_vector(
179 StateVector &state_vector, const Callable &prepare_compute_kernels);
180
187 void interpolate_analytic_solution(StateVector &analytic, Number t);
188
189 void output(const StateVector &state_vector,
190 const std::string &name,
191 const Number t,
192 const unsigned int cycle);
193
194 void print_parameters(std::ostream &stream);
195 void print_mpi_partition(std::ostream &stream);
196 void print_device_information(std::ostream &stream);
197
198 void print_info(const std::string &header);
199
200 void print_head(const std::string &header,
201 const std::string &secondary,
202 std::ostream &stream);
203
204 void print_information(unsigned int output_cycle,
205 Number last_checkpoint,
206 std::ostream &stream,
207 bool final_time = false);
208 void print_memory_statistics(std::ostream &stream);
209 void print_timers(std::ostream &stream);
210 void print_throughput(unsigned int cycle,
211 Number t,
212 std::ostream &stream,
213 bool final_time = false);
214
215 void print_cycle_statistics(unsigned int cycle,
216 Number t,
217 unsigned int output_cycle,
218 Number last_checkpoint,
219 bool write_to_logfile = false,
220 bool final_time = false);
221
223 };
224
225} // namespace ryujin
typename Description::HyperbolicSystem HyperbolicSystem
Definition time_loop.h:45
static constexpr auto problem_dimension
Definition time_loop.h:52
typename Description::ParabolicSystem ParabolicSystem
Definition time_loop.h:46
static constexpr auto n_precomputed_values
Definition time_loop.h:54
typename View::StateVector StateVector
Definition time_loop.h:56
typename HyperbolicSystem::template View< dim, Number > View
Definition time_loop.h:48
typename View::ScalarNumber ScalarNumber
Definition time_loop.h:50
typename Description::template ParabolicModule< dim, Number > ParabolicModule
Euler::HyperbolicSystem HyperbolicSystem
Definition description.h:34
ryujin::StubParabolicSystem ParabolicSystem
Definition description.h:36