36 std::vector<QCollection<q_dim>>
37 translate(
const QCollection<q_dim> &q_collection)
39 std::vector<QCollection<q_dim>> q_collections;
41 q_collections.reserve(q_collection.size());
42 for (
unsigned int q = 0; q < q_collection.size(); ++q)
43 q_collections.emplace_back(q_collection[q]);
54 translate(
const std::vector<QCollection<q_dim>> &q_collections)
56 QCollection<q_dim> result;
58 for (
unsigned int q = 0; q < q_collections.size(); ++q)
59 result.push_back(q_collections[q][0]);
67 template <
int dim,
int q_dim,
typename FEValuesType>
74 : fe_collection(&fe_collection)
75 , mapping_collection(&mapping_collection)
76 , q_collection(q_collection)
77 , q_collections(translate(q_collection))
78 , fe_values_table(fe_collection.
size(),
79 mapping_collection.
size(),
81 , present_fe_values_index(
numbers::invalid_unsigned_int,
84 , update_flags(update_flags)
74 : fe_collection(&fe_collection) {
…}
87 template <
int dim,
int q_dim,
typename FEValuesType>
94 : fe_collection(&fe_collection)
95 , mapping_collection(&mapping_collection)
96 , q_collection(translate(q_collections))
97 , q_collections(q_collections)
98 , fe_values_table(fe_collection.
size(),
99 mapping_collection.
size(),
101 , present_fe_values_index(
numbers::invalid_unsigned_int,
104 , update_flags(update_flags)
108 template <
int dim,
int q_dim,
typename FEValuesType>
122 template <
int dim,
int q_dim,
typename FEValuesType>
137 template <
int dim,
int q_dim,
typename FEValuesType>
141 , fe_collection(other.fe_collection)
142 , mapping_collection(other.mapping_collection)
143 , q_collection(other.q_collection)
144 , q_collections(other.q_collections)
145 , fe_values_table(other.fe_values_table.
size(0),
146 other.fe_values_table.
size(1),
147 other.fe_values_table.
size(2))
148 , present_fe_values_index(other.present_fe_values_index)
149 , update_flags(other.update_flags)
155 for (
unsigned int fe_index = 0; fe_index < other.
fe_values_table.size(0);
157 for (
unsigned int m_index = 0; m_index < other.
fe_values_table.size(1);
159 for (
unsigned int q_index = 0; q_index < other.
fe_values_table.size(2);
176 template <
int dim,
int q_dim,
typename FEValuesType>
179 const unsigned int fe_index,
180 const unsigned int mapping_index,
181 const unsigned int q_index)
189 present_fe_values_index = {fe_index, mapping_index, q_index};
193 if (fe_values_table(present_fe_values_index).get() ==
nullptr)
194 fe_values_table(present_fe_values_index) =
195 std::make_unique<FEValuesType>((*mapping_collection)[mapping_index],
196 (*fe_collection)[fe_index],
197 q_collections[q_index],
201 return *fe_values_table(present_fe_values_index);
197 q_collections[q_index], {
…}
206 template <
int dim,
int q_dim,
typename FEValuesType>
209 const std::vector<unsigned int> &fe_indices,
210 const std::vector<unsigned int> &mapping_indices,
211 const std::vector<unsigned int> &q_indices)
217 for (
unsigned int i = 0; i < fe_indices.size(); ++i)
219 const unsigned int fe_index = fe_indices[i],
220 mapping_index = mapping_indices[i],
221 q_index = q_indices[i];
229 fe_values_table[fe_index][mapping_index][q_index] =
230 std::make_unique<FEValuesType>(
231 (*mapping_collection)[mapping_index],
232 (*fe_collection)[fe_index],
233 q_collections[q_index],
243 template <
int dim,
int q_dim,
typename FEValuesType>
247 const unsigned int size = fe_collection->size();
248 std::vector<unsigned int> indices(
size);
249 std::iota(indices.begin(), indices.end(), 0);
251 precalculate_fe_values(indices,
253 (mapping_collection->size() > 1) ?
255 std::vector<unsigned int>(
size, 0),
257 (q_collections.size() > 1) ?
259 std::vector<unsigned int>(
size, 0));
269 template <
int dim,
int spacedim>
282 template <
int dim,
int spacedim>
293 template <
int dim,
int spacedim>
298 const unsigned int q_index,
299 const unsigned int mapping_index,
300 const unsigned int fe_index)
303 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
304 real_fe_index = fe_index;
308 if (this->q_collections.size() > 1)
309 real_q_index = cell->active_fe_index();
316 if (this->mapping_collection->size() > 1)
317 real_mapping_index = cell->active_fe_index();
319 real_mapping_index = 0;
323 real_fe_index = cell->active_fe_index();
331 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
337 template <
int dim,
int spacedim>
341 const unsigned int q_index,
342 const unsigned int mapping_index,
343 const unsigned int fe_index)
346 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
347 real_fe_index = fe_index;
353 real_mapping_index = 0;
364 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
372 template <
int dim,
int spacedim>
385 template <
int dim,
int spacedim>
399 template <
int dim,
int spacedim>
411 template <
int dim,
int spacedim>
423 template <
int dim,
int spacedim>
428 const unsigned int face_no,
429 const unsigned int q_index,
430 const unsigned int mapping_index,
431 const unsigned int fe_index)
435 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
436 real_fe_index = fe_index;
440 if (this->q_collections.size() > 1)
441 real_q_index = cell->active_fe_index();
448 if (this->mapping_collection->size() > 1)
449 real_mapping_index = cell->active_fe_index();
451 real_mapping_index = 0;
455 real_fe_index = cell->active_fe_index();
463 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
464 .reinit(cell, face_no);
469 template <
int dim,
int spacedim>
475 const unsigned int q_index,
476 const unsigned int mapping_index,
477 const unsigned int fe_index)
479 const auto face_n = cell->face_iterator_to_index(face);
480 reinit(cell, face_n, q_index, mapping_index, fe_index);
485 template <
int dim,
int spacedim>
489 const unsigned int face_no,
490 const unsigned int q_index,
491 const unsigned int mapping_index,
492 const unsigned int fe_index)
496 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
497 real_fe_index = fe_index;
503 real_mapping_index = 0;
514 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
515 .reinit(cell, face_no);
520 template <
int dim,
int spacedim>
525 const unsigned int q_index,
526 const unsigned int mapping_index,
527 const unsigned int fe_index)
529 const auto face_n = cell->face_iterator_to_index(face);
530 reinit(cell, face_n, q_index, mapping_index, fe_index);
537 template <
int dim,
int spacedim>
551 template <
int dim,
int spacedim>
563 template <
int dim,
int spacedim>
568 const unsigned int face_no,
569 const unsigned int subface_no,
570 const unsigned int q_index,
571 const unsigned int mapping_index,
572 const unsigned int fe_index)
575 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
576 real_fe_index = fe_index;
580 if (this->q_collections.size() > 1)
581 real_q_index = cell->active_fe_index();
588 if (this->mapping_collection->size() > 1)
589 real_mapping_index = cell->active_fe_index();
591 real_mapping_index = 0;
595 real_fe_index = cell->active_fe_index();
603 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
604 .reinit(cell, face_no, subface_no);
609 template <
int dim,
int spacedim>
613 const unsigned int face_no,
614 const unsigned int subface_no,
615 const unsigned int q_index,
616 const unsigned int mapping_index,
617 const unsigned int fe_index)
620 unsigned int real_q_index = q_index, real_mapping_index = mapping_index,
621 real_fe_index = fe_index;
627 real_mapping_index = 0;
638 this->select_fe_values(real_fe_index, real_mapping_index, real_q_index)
639 .reinit(cell, face_no, subface_no);
645#include "hp/fe_values.inst"
108 template <
int dim,
int q_dim,
typename FEValuesType> {
…}
98 , fe_values_table(fe_collection.
size(), {
…}
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