36 std::vector<QCollection<q_dim>>
37 translate(
const QCollection<q_dim> &q_collection)
39 std::vector<QCollection<q_dim>> q_collections;
41 for (
unsigned int q = 0; q < q_collection.size(); ++q)
42 q_collections.emplace_back(q_collection[q]);
53 translate(
const std::vector<QCollection<q_dim>> &q_collections)
55 QCollection<q_dim> result;
57 for (
unsigned int q = 0; q < q_collections.size(); ++q)
58 result.push_back(q_collections[q][0]);
66 template <
int dim,
int q_dim,
typename FEValuesType>
73 : fe_collection(&fe_collection)
74 , mapping_collection(&mapping_collection)
75 , q_collection(q_collection)
76 , q_collections(translate(q_collection))
77 , fe_values_table(fe_collection.
size(),
78 mapping_collection.
size(),
80 , present_fe_values_index(
numbers::invalid_unsigned_int,
83 , update_flags(update_flags)
74 , mapping_collection(&mapping_collection) {
…}
86 template <
int dim,
int q_dim,
typename FEValuesType>
93 : fe_collection(&fe_collection)
94 , mapping_collection(&mapping_collection)
95 , q_collection(translate(q_collections))
96 , q_collections(q_collections)
97 , fe_values_table(fe_collection.
size(),
100 , present_fe_values_index(
numbers::invalid_unsigned_int,
103 , update_flags(update_flags)
107 template <
int dim,
int q_dim,
typename FEValuesType>
121 template <
int dim,
int q_dim,
typename FEValuesType>
136 template <
int dim,
int q_dim,
typename FEValuesType>
140 , fe_collection(other.fe_collection)
141 , mapping_collection(other.mapping_collection)
142 , q_collection(other.q_collection)
143 , q_collections(other.q_collections)
144 , fe_values_table(other.fe_values_table.
size(0),
145 other.fe_values_table.
size(1),
146 other.fe_values_table.
size(2))
147 , present_fe_values_index(other.present_fe_values_index)
148 , update_flags(other.update_flags)
154 for (
unsigned int fe_index = 0; fe_index < other.
fe_values_table.size(0);
156 for (
unsigned int m_index = 0; m_index < other.
fe_values_table.size(1);
158 for (
unsigned int q_index = 0; q_index < other.
fe_values_table.size(2);
175 template <
int dim,
int q_dim,
typename FEValuesType>
178 const unsigned int fe_index,
179 const unsigned int mapping_index,
180 const unsigned int q_index)
188 present_fe_values_index = {fe_index, mapping_index, q_index};
192 if (fe_values_table(present_fe_values_index).get() ==
nullptr)
193 fe_values_table(present_fe_values_index) =
194 std::make_unique<FEValuesType>((*mapping_collection)[mapping_index],
195 (*fe_collection)[fe_index],
196 q_collections[q_index],
200 return *fe_values_table(present_fe_values_index);
205 template <
int dim,
int q_dim,
typename FEValuesType>
208 const std::vector<unsigned int> &fe_indices,
209 const std::vector<unsigned int> &mapping_indices,
210 const std::vector<unsigned int> &q_indices)
216 for (
unsigned int i = 0; i < fe_indices.size(); ++i)
218 const unsigned int fe_index = fe_indices[i],
219 mapping_index = mapping_indices[i],
220 q_index = q_indices[i];
228 fe_values_table[fe_index][mapping_index][q_index] =
229 std::make_unique<FEValuesType>(
230 (*mapping_collection)[mapping_index],
231 (*fe_collection)[fe_index],
232 q_collections[q_index],
242 template <
int dim,
int q_dim,
typename FEValuesType>
246 const unsigned int size = fe_collection->size();
247 std::vector<unsigned int> indices(
size);
248 std::iota(indices.begin(), indices.end(), 0);
250 precalculate_fe_values(indices,
252 (mapping_collection->size() > 1) ?
254 std::vector<unsigned int>(
size, 0),
256 (q_collections.size() > 1) ?
258 std::vector<unsigned int>(
size, 0));
268 template <
int dim,
int spacedim>
281 template <
int dim,
int spacedim>
292 template <
int dim,
int spacedim>
297 const unsigned int q_index,
298 const unsigned int mapping_index,
299 const unsigned int fe_index)
302 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
303 real_fe_index = fe_index;
307 if (this->q_collections.size() > 1)
308 real_q_index = cell->active_fe_index();
315 if (this->mapping_collection->size() > 1)
316 real_mapping_index = cell->active_fe_index();
318 real_mapping_index = 0;
322 real_fe_index = cell->active_fe_index();
330 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
336 template <
int dim,
int spacedim>
340 const unsigned int q_index,
341 const unsigned int mapping_index,
342 const unsigned int fe_index)
345 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
346 real_fe_index = fe_index;
352 real_mapping_index = 0;
363 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
371 template <
int dim,
int spacedim>
384 template <
int dim,
int spacedim>
398 template <
int dim,
int spacedim>
410 template <
int dim,
int spacedim>
422 template <
int dim,
int spacedim>
427 const unsigned int face_no,
428 const unsigned int q_index,
429 const unsigned int mapping_index,
430 const unsigned int fe_index)
434 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
435 real_fe_index = fe_index;
439 if (this->q_collections.size() > 1)
440 real_q_index = cell->active_fe_index();
447 if (this->mapping_collection->size() > 1)
448 real_mapping_index = cell->active_fe_index();
450 real_mapping_index = 0;
454 real_fe_index = cell->active_fe_index();
462 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
463 .reinit(cell, face_no);
468 template <
int dim,
int spacedim>
474 const unsigned int q_index,
475 const unsigned int mapping_index,
476 const unsigned int fe_index)
478 const auto face_n = cell->face_iterator_to_index(face);
479 reinit(cell, face_n, q_index, mapping_index, fe_index);
484 template <
int dim,
int spacedim>
488 const unsigned int face_no,
489 const unsigned int q_index,
490 const unsigned int mapping_index,
491 const unsigned int fe_index)
495 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
496 real_fe_index = fe_index;
502 real_mapping_index = 0;
513 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
514 .reinit(cell, face_no);
519 template <
int dim,
int spacedim>
524 const unsigned int q_index,
525 const unsigned int mapping_index,
526 const unsigned int fe_index)
528 const auto face_n = cell->face_iterator_to_index(face);
529 reinit(cell, face_n, q_index, mapping_index, fe_index);
536 template <
int dim,
int spacedim>
550 template <
int dim,
int spacedim>
562 template <
int dim,
int spacedim>
567 const unsigned int face_no,
568 const unsigned int subface_no,
569 const unsigned int q_index,
570 const unsigned int mapping_index,
571 const unsigned int fe_index)
574 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
575 real_fe_index = fe_index;
579 if (this->q_collections.size() > 1)
580 real_q_index = cell->active_fe_index();
587 if (this->mapping_collection->size() > 1)
588 real_mapping_index = cell->active_fe_index();
590 real_mapping_index = 0;
594 real_fe_index = cell->active_fe_index();
602 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
603 .reinit(cell, face_no, subface_no);
608 template <
int dim,
int spacedim>
612 const unsigned int face_no,
613 const unsigned int subface_no,
614 const unsigned int q_index,
615 const unsigned int mapping_index,
616 const unsigned int fe_index)
619 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
620 real_fe_index = fe_index;
626 real_mapping_index = 0;
637 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
638 .reinit(cell, face_no, subface_no);
644#include "hp/fe_values.inst"
86 template <
int dim,
int q_dim,
typename FEValuesType> {
…}
FEValuesBase(const unsigned int n_q_points, const unsigned int dofs_per_cell, const UpdateFlags update_flags, const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int face_no, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
FEFaceValues(const hp::MappingCollection< dim, spacedim > &mapping_collection, const hp::FECollection< dim, spacedim > &fe_collection, const hp::QCollection< dim - 1 > &q_collection, const UpdateFlags update_flags)
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int face_no, const unsigned int subface_no, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
FESubfaceValues(const hp::MappingCollection< dim, spacedim > &mapping_collection, const hp::FECollection< dim, spacedim > &fe_collection, const hp::QCollection< dim - 1 > &q_collection, const UpdateFlags update_flags)
const ObserverPointer< const FECollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > fe_collection
FEValuesBase(const MappingCollection< dim, FEValuesType::space_dimension > &mapping_collection, const FECollection< dim, FEValuesType::space_dimension > &fe_collection, const QCollection< q_dim > &q_collection, const UpdateFlags update_flags)
const std::vector< QCollection< q_dim > > q_collections
FEValuesType & select_fe_values(const unsigned int fe_index, const unsigned int mapping_index, const unsigned int q_index)
const ObserverPointer< const MappingCollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > mapping_collection
Table< 3, std::unique_ptr< FEValuesType > > fe_values_table
void precalculate_fe_values()
const UpdateFlags update_flags
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
FEValues(const MappingCollection< dim, spacedim > &mapping_collection, const FECollection< dim, spacedim > &fe_collection, const QCollection< dim > &q_collection, const UpdateFlags update_flags)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define AssertDimension(dim1, dim2)
#define AssertIndexRange(index, range)
Task< RT > new_task(const std::function< RT()> &function)
constexpr unsigned int invalid_unsigned_int