deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
mapping_info.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2012 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13
14#ifndef dealii_matrix_free_mapping_info_h
15#define dealii_matrix_free_mapping_info_h
16
17
18#include <deal.II/base/config.h>
19
23
24#include <deal.II/fe/fe.h>
25#include <deal.II/fe/mapping.h>
26
28
31
34
35#include <memory>
36
37
39
40
41namespace internal
42{
43 namespace MatrixFreeFunctions
44 {
51 template <int dim, typename Number, typename VectorizedArrayType>
53 {
62 void
64 const ::Triangulation<dim> &tria,
65 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
66 const FaceInfo<VectorizedArrayType::size()> &face_info,
67 const std::vector<unsigned int> &active_fe_index,
68 const std::shared_ptr<::hp::MappingCollection<dim>> &mapping,
69 const std::vector<::hp::QCollection<dim>> &quad,
74 const bool piola_transform);
75
82 void
84 const ::Triangulation<dim> &tria,
85 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
86 const FaceInfo<VectorizedArrayType::size()> &face_info,
87 const std::vector<unsigned int> &active_fe_index,
88 const std::shared_ptr<::hp::MappingCollection<dim>> &mapping);
89
94 get_cell_type(const unsigned int cell_chunk_no) const;
95
99 void
101
105 std::size_t
107
112 template <typename StreamType>
113 void
115 const TaskInfo &task_info) const;
116
121
127
133
139
146 std::vector<GeometryType> cell_type;
147
155 std::vector<GeometryType> face_type;
156
164 std::vector<std::array<GeometryType, GeometryInfo<dim>::faces_per_cell>>
166
170 std::vector<MappingInfoStorage<dim, dim, VectorizedArrayType>> cell_data;
171
175 std::vector<MappingInfoStorage<dim - 1, dim, VectorizedArrayType>>
177
182 std::vector<MappingInfoStorage<dim - 1, dim, VectorizedArrayType>>
184
188 std::shared_ptr<::hp::MappingCollection<dim>> mapping_collection;
189
194
199 std::vector<std::vector<ReferenceCell<dim>>> reference_cell_types;
200
222 void
224 const ::Triangulation<dim> &tria,
225 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
226 const FaceInfo<VectorizedArrayType::size()> &face_info);
227
232 void
234 const ::Triangulation<dim> &tria,
235 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
236 const std::vector<unsigned int> &active_fe_index,
237 const ::hp::MappingCollection<dim> &mapping);
238
243 void
245 const ::Triangulation<dim> &tria,
246 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
247 const std::vector<FaceToCellTopology<VectorizedArrayType::size()>>
248 &faces,
249 const std::vector<unsigned int> &active_fe_index,
250 const ::hp::MappingCollection<dim> &mapping);
251
256 void
258 const ::Triangulation<dim> &tria,
259 const std::vector<std::pair<unsigned int, unsigned int>> &cells,
260 const std::vector<unsigned int> &active_fe_index,
261 const FaceInfo<VectorizedArrayType::size()> &face_info,
262 const ::hp::MappingCollection<dim> &mapping);
263 };
264
265
266
271 template <int, typename, bool, typename>
273
274 template <int dim, typename Number, typename VectorizedArrayType>
275 struct MappingInfoCellsOrFaces<dim, Number, false, VectorizedArrayType>
276 {
279 const unsigned int quadrature_index)
280 {
281 AssertIndexRange(quadrature_index, mapping_info.cell_data.size());
282 return mapping_info.cell_data[quadrature_index];
283 }
284 };
285
286 template <int dim, typename Number, typename VectorizedArrayType>
287 struct MappingInfoCellsOrFaces<dim, Number, true, VectorizedArrayType>
288 {
289 static const MappingInfoStorage<dim - 1, dim, VectorizedArrayType> &
291 const unsigned int quadrature_index)
292 {
293 AssertIndexRange(quadrature_index, mapping_info.face_data.size());
294 return mapping_info.face_data[quadrature_index];
295 }
296 };
297
298
299 /* ------------------- inline functions ----------------------------- */
300
301 template <int dim, typename Number, typename VectorizedArrayType>
302 inline GeometryType
304 const unsigned int cell_no) const
305 {
306 AssertIndexRange(cell_no, cell_type.size());
307 return cell_type[cell_no];
308 }
309
310 } // end of namespace MatrixFreeFunctions
311} // end of namespace internal
312
314
315#endif
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
#define AssertIndexRange(index, range)
UpdateFlags
static const MappingInfoStorage< dim, dim, VectorizedArrayType > & get(const MappingInfo< dim, Number, VectorizedArrayType > &mapping_info, const unsigned int quadrature_index)
static const MappingInfoStorage< dim - 1, dim, VectorizedArrayType > & get(const MappingInfo< dim, Number, VectorizedArrayType > &mapping_info, const unsigned int quadrature_index)
void compute_mapping_q(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const FaceInfo< VectorizedArrayType::size()> &face_info)
void initialize_faces(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const std::vector< FaceToCellTopology< VectorizedArrayType::size()> > &faces, const std::vector< unsigned int > &active_fe_index, const ::hp::MappingCollection< dim > &mapping)
std::shared_ptr<::hp::MappingCollection< dim > > mapping_collection
GeometryType get_cell_type(const unsigned int cell_chunk_no) const
ObserverPointer< const Mapping< dim > > mapping
void initialize_cells(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const std::vector< unsigned int > &active_fe_index, const ::hp::MappingCollection< dim > &mapping)
std::vector< GeometryType > cell_type
std::vector< std::vector< ReferenceCell< dim > > > reference_cell_types
std::vector< GeometryType > face_type
std::vector< std::array< GeometryType, GeometryInfo< dim >::faces_per_cell > > faces_by_cells_type
void initialize(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const FaceInfo< VectorizedArrayType::size()> &face_info, const std::vector< unsigned int > &active_fe_index, const std::shared_ptr<::hp::MappingCollection< dim > > &mapping, const std::vector<::hp::QCollection< dim > > &quad, const UpdateFlags update_flags_cells, const UpdateFlags update_flags_boundary_faces, const UpdateFlags update_flags_inner_faces, const UpdateFlags update_flags_faces_by_cells, const bool piola_transform)
std::vector< MappingInfoStorage< dim, dim, VectorizedArrayType > > cell_data
void update_mapping(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const FaceInfo< VectorizedArrayType::size()> &face_info, const std::vector< unsigned int > &active_fe_index, const std::shared_ptr<::hp::MappingCollection< dim > > &mapping)
void print_memory_consumption(StreamType &out, const TaskInfo &task_info) const
void initialize_faces_by_cells(const ::Triangulation< dim > &tria, const std::vector< std::pair< unsigned int, unsigned int > > &cells, const std::vector< unsigned int > &active_fe_index, const FaceInfo< VectorizedArrayType::size()> &face_info, const ::hp::MappingCollection< dim > &mapping)
std::vector< MappingInfoStorage< dim - 1, dim, VectorizedArrayType > > face_data_by_cells
std::vector< MappingInfoStorage< dim - 1, dim, VectorizedArrayType > > face_data