ryujin 2.5.0 revision c64172211cf21344cb9b9b0f3a1266aa6400d392
Loading...
Searching...
No Matches
simulation.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <ryujin/base/compile_time_options.h>
24
25#include <memory>
26
27namespace ryujin
28{
29 namespace Interface
30 {
46 template <int dim, typename Number = double>
47 class Simulation : public Task<Number>
48 {
49 public:
53 virtual ~Simulation() = default;
54
59
60 ACCESSOR_READ_ONLY(mpi_ensemble)
61
62 ACCESSOR(discretization)
63
64 ACCESSOR_READ_ONLY(discretization)
65
66 ACCESSOR_READ_ONLY(offline_data)
67
68 ACCESSOR_READ_ONLY(hyperbolic_system)
69
70 ACCESSOR_READ_ONLY(parabolic_system)
71
72 ACCESSOR_READ_ONLY(initial_values)
73
74 ACCESSOR_READ_ONLY(hyperbolic_module)
75
76 ACCESSOR_READ_ONLY(parabolic_module)
77
78 ACCESSOR_READ_ONLY(time_integrator)
79
80 ACCESSOR_READ_ONLY(postprocessor)
81
82 ACCESSOR(solution_transfer)
83
84 ACCESSOR(state_vector)
85
86 ACCESSOR_READ_ONLY(state_vector)
87
88 //@}
93
101 Number t) const
102 {
104 "time step [X] - interpolate data vectors");
105
106 hyperbolic_module_->reinit_state_vector(analytic);
107 parabolic_module_->reinit_state_vector(analytic);
108 analytic.state = initial_values_->interpolate_hyperbolic_vector(t);
109
110 /* Populate precomputed values (without boundary conditions): */
111 hyperbolic_module_->fill_precomputed_values(analytic);
112 }
113
115
116 protected:
121 : Task<Number>("time integration", TaskPhase::step)
122 {
123 }
124
125 std::unique_ptr<MPIEnsemble> mpi_ensemble_;
126 std::unique_ptr<Discretization<dim>> discretization_;
127 std::unique_ptr<OfflineData<dim, Number>> offline_data_;
128
137
138 std::unique_ptr<HyperbolicModule<dim, Number>> hyperbolic_module_;
139 std::unique_ptr<ParabolicModule<dim, Number>> parabolic_module_;
140 std::unique_ptr<TimeIntegrator<dim, Number>> time_integrator_;
141 std::unique_ptr<Postprocessor<dim, Number>> postprocessor_;
142 std::unique_ptr<SolutionTransfer<dim, Number>> solution_transfer_;
143
145 };
146 } // namespace Interface
147} // namespace ryujin
std::unique_ptr< ParabolicModule< dim, Number > > parabolic_module_
Definition simulation.h:139
std::unique_ptr< MPIEnsemble > mpi_ensemble_
Definition simulation.h:125
std::unique_ptr< Discretization< dim > > discretization_
Definition simulation.h:126
std::unique_ptr< TimeIntegrator< dim, Number > > time_integrator_
Definition simulation.h:140
const ParabolicSystem * parabolic_system_
Definition simulation.h:135
std::unique_ptr< Postprocessor< dim, Number > > postprocessor_
Definition simulation.h:141
const InitialValues< dim, Number > * initial_values_
Definition simulation.h:136
std::unique_ptr< OfflineData< dim, Number > > offline_data_
Definition simulation.h:127
std::unique_ptr< SolutionTransfer< dim, Number > > solution_transfer_
Definition simulation.h:142
std::unique_ptr< HyperbolicModule< dim, Number > > hyperbolic_module_
Definition simulation.h:138
virtual ~Simulation()=default
StateVector< Number > state_vector_
Definition simulation.h:144
const HyperbolicSystem * hyperbolic_system_
Definition simulation.h:134
void interpolate_analytic_solution(StateVector< Number > &analytic, Number t) const
Definition simulation.h:100
TaskPhase
Definition task.h:33
#define ACCESSOR(member)
#define ACCESSOR_READ_ONLY(member)