36 std::vector<QCollection<q_dim>>
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]);
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)
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),
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);
158 for (
unsigned int q_index = 0; q_index <
other.fe_values_table.size(2);
160 if (
other.fe_values_table[fe_index][
m_index][q_index].get() !=
175 template <
int dim,
int q_dim,
typename FEValuesType>
178 const unsigned int fe_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>
210 const std::vector<unsigned int> &
q_indices)
216 for (
unsigned int i = 0; i <
fe_indices.size(); ++i)
229 std::make_unique<FEValuesType>(
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,
299 const unsigned int fe_index)
307 if (this->q_collections.size() > 1)
315 if (this->mapping_collection->size() > 1)
336 template <
int dim,
int spacedim>
340 const unsigned int q_index,
342 const unsigned int fe_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>
428 const unsigned int q_index,
430 const unsigned int fe_index)
439 if (this->q_collections.size() > 1)
447 if (this->mapping_collection->size() > 1)
468 template <
int dim,
int spacedim>
474 const unsigned int q_index,
476 const unsigned int fe_index)
478 const auto face_n = cell->face_iterator_to_index(face);
484 template <
int dim,
int spacedim>
489 const unsigned int q_index,
491 const unsigned int fe_index)
519 template <
int dim,
int spacedim>
524 const unsigned int q_index,
526 const unsigned int fe_index)
528 const auto face_n = cell->face_iterator_to_index(face);
536 template <
int dim,
int spacedim>
550 template <
int dim,
int spacedim>
562 template <
int dim,
int spacedim>
569 const unsigned int q_index,
571 const unsigned int fe_index)
579 if (this->q_collections.size() > 1)
587 if (this->mapping_collection->size() > 1)
608 template <
int dim,
int spacedim>
614 const unsigned int q_index,
616 const unsigned int fe_index)
644#include "hp/fe_values.inst"
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