ryujin 2.5.0 revision 3a6c8d57210175dea14d8116e1fe878f349f8c1c
Loading...
Searching...
No Matches
offline_data.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 <ryujin/base/compile_time_options.h>
10#include <ryujin/base/gpu.h>
17
18#include <deal.II/base/parameter_acceptor.h>
19#include <deal.II/dofs/dof_handler.h>
20
21namespace ryujin
22{
46 template <int dim, typename Number = double>
47 class OfflineData final : public Interface::OfflineData<dim, Number>
48 {
49 public:
54
56
58
60
62
64
68
72 OfflineData(const MPIEnsemble &mpi_ensemble,
73 const Interface::Discretization<dim> &discretization,
74 const std::string &subsection = "/OfflineData");
75
84 void prepare(const unsigned int problem_dimension,
85 const unsigned int n_precomputed_values) override;
86
88
89 private:
94
95 bool treat_fe_nothing_as_boundary_;
96 double incidence_relaxation_even_;
97 double incidence_relaxation_odd_;
98
100
104
105 const MPIEnsemble &mpi_ensemble_;
106
108
112
116 dealii::DoFHandler<dim> &writable_dof_handler()
117 {
118 if (this->discretization_->have_discontinuous_ansatz()) {
119 Assert(this->dof_handler_dg_, dealii::ExcInternalError());
120 return *this->dof_handler_dg_;
121 } else {
122 Assert(this->dof_handler_cg_, dealii::ExcInternalError());
123 return *this->dof_handler_cg_;
124 }
125 }
126
132 void create_dof_handlers();
133
140 void renumber_for_simd();
141
148 void create_constraints_and_sparsity_pattern();
149
157 void ensure_simd_stride_consistency();
158
164 void create_partitioner_and_simd_sparsity(
165 const unsigned int problem_dimension,
166 const unsigned int n_precomputed_values);
167
173 void create_matrices();
174
180 void create_multigrid_data();
181
185 template <typename ITERATOR1, typename ITERATOR2>
186 BoundaryMap construct_boundary_map(
187 const ITERATOR1 &begin,
188 const ITERATOR2 &end,
189 const dealii::Utilities::MPI::Partitioner &partitioner) const;
190
195 template <typename ITERATOR1, typename ITERATOR2>
196 CouplingBoundaryPairs collect_coupling_boundary_pairs(
197 const ITERATOR1 &begin,
198 const ITERATOR2 &end,
199 const dealii::Utilities::MPI::Partitioner &partitioner) const;
200
202 };
203
204} // namespace ryujin
dealii::ObserverPointer< const Discretization< dim > > discretization_
std::tuple< unsigned int, dealii::Tensor< 1, dim, Number >, Number, Number, dealii::types::boundary_id, dealii::Point< dim > > BoundaryDescription
std::unique_ptr< dealii::DoFHandler< dim > > dof_handler_dg_
std::unique_ptr< dealii::DoFHandler< dim > > dof_handler_cg_
std::vector< BoundaryDescription > BoundaryMap
std::vector< CouplingDescription > CouplingBoundaryPairs
OfflineData(const MPIEnsemble &mpi_ensemble, const Interface::Discretization< dim > &discretization, const std::string &subsection="/OfflineData")
void prepare(const unsigned int problem_dimension, const unsigned int n_precomputed_values) override