35 std::vector<QCollection<q_dim>>
38 std::vector<QCollection<q_dim>> q_collections;
40 for (
unsigned int q = 0;
q < q_collection.
size(); ++
q)
41 q_collections.emplace_back(q_collection[
q]);
56 for (
unsigned int q = 0;
q < q_collections.
size(); ++
q)
57 result.push_back(q_collections[
q][0]);
65 template <
int dim,
int q_dim,
class FEValuesType>
72 : fe_collection(&fe_collection)
73 , mapping_collection(&mapping_collection)
74 , q_collection(q_collection)
75 , q_collections(translate(q_collection))
76 , fe_values_table(fe_collection.size(),
77 mapping_collection.size(),
79 , present_fe_values_index(
numbers::invalid_unsigned_int,
82 , update_flags(update_flags)
85 template <
int dim,
int q_dim,
class FEValuesType>
92 : fe_collection(&fe_collection)
93 , mapping_collection(&mapping_collection)
94 , q_collection(translate(q_collections))
95 , q_collections(q_collections)
96 , fe_values_table(fe_collection.size(),
97 mapping_collection.size(),
99 , present_fe_values_index(
numbers::invalid_unsigned_int,
102 , update_flags(update_flags)
106 template <
int dim,
int q_dim,
class FEValuesType>
120 template <
int dim,
int q_dim,
class FEValuesType>
135 template <
int dim,
int q_dim,
class FEValuesType>
139 , fe_collection(
other.fe_collection)
140 , mapping_collection(
other.mapping_collection)
141 , q_collection(
other.q_collection)
142 , q_collections(
other.q_collections)
143 , fe_values_table(
other.fe_values_table.size(0),
144 other.fe_values_table.size(1),
145 other.fe_values_table.size(2))
146 , present_fe_values_index(
other.present_fe_values_index)
147 , update_flags(
other.update_flags)
153 for (
unsigned int fe_index = 0; fe_index <
other.fe_values_table.
size(0);
157 for (
unsigned int q_index = 0; q_index <
other.fe_values_table.
size(2);
159 if (
other.fe_values_table[fe_index][
m_index][q_index].get() !=
174 template <
int dim,
int q_dim,
class FEValuesType>
177 const unsigned int fe_index,
179 const unsigned int q_index)
187 present_fe_values_index = {fe_index,
mapping_index, q_index};
191 if (fe_values_table(present_fe_values_index).get() ==
nullptr)
192 fe_values_table(present_fe_values_index) =
193 std::make_unique<FEValuesType>((*mapping_collection)[
mapping_index],
194 (*fe_collection)[fe_index],
195 q_collections[q_index],
199 return *fe_values_table(present_fe_values_index);
204 template <
int dim,
int q_dim,
class FEValuesType>
209 const std::vector<unsigned int> &
q_indices)
228 std::make_unique<FEValuesType>(
230 (*fe_collection)[fe_index],
231 q_collections[q_index],
241 template <
int dim,
int q_dim,
class FEValuesType>
245 const unsigned int size = fe_collection->size();
246 std::vector<unsigned int> indices(size);
247 std::iota(indices.begin(), indices.end(), 0);
249 precalculate_fe_values(indices,
251 (mapping_collection->size() > 1) ?
253 std::vector<unsigned int>(size, 0),
255 (q_collections.size() > 1) ?
257 std::vector<unsigned int>(size, 0));
267 template <
int dim,
int spacedim>
280 template <
int dim,
int spacedim>
291 template <
int dim,
int spacedim>
296 const unsigned int q_index,
298 const unsigned int fe_index)
306 if (this->q_collections.size() > 1)
314 if (this->mapping_collection->size() > 1)
335 template <
int dim,
int spacedim>
339 const unsigned int q_index,
341 const unsigned int fe_index)
370 template <
int dim,
int spacedim>
383 template <
int dim,
int spacedim>
397 template <
int dim,
int spacedim>
409 template <
int dim,
int spacedim>
421 template <
int dim,
int spacedim>
427 const unsigned int q_index,
429 const unsigned int fe_index)
438 if (this->q_collections.size() > 1)
446 if (this->mapping_collection->size() > 1)
467 template <
int dim,
int spacedim>
473 const unsigned int q_index,
475 const unsigned int fe_index)
477 const auto face_n = cell->face_iterator_to_index(face);
483 template <
int dim,
int spacedim>
488 const unsigned int q_index,
490 const unsigned int fe_index)
518 template <
int dim,
int spacedim>
523 const unsigned int q_index,
525 const unsigned int fe_index)
527 const auto face_n = cell->face_iterator_to_index(face);
535 template <
int dim,
int spacedim>
549 template <
int dim,
int spacedim>
561 template <
int dim,
int spacedim>
568 const unsigned int q_index,
570 const unsigned int fe_index)
578 if (this->q_collections.size() > 1)
586 if (this->mapping_collection->size() > 1)
607 template <
int dim,
int spacedim>
613 const unsigned int q_index,
615 const unsigned int fe_index)
643#include "fe_values.inst"
FEFaceValues(const Mapping< dim, spacedim > &mapping, const FiniteElement< dim, spacedim > &fe, const Quadrature< dim - 1 > &quadrature, const UpdateFlags update_flags)
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)
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 SmartPointer< const FECollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > fe_collection
Table< 3, std::unique_ptr< FEValuesType > > fe_values_table
void precalculate_fe_values()
const SmartPointer< const MappingCollection< dim, FEValuesType::space_dimension >, FEValuesBase< dim, q_dim, FEValuesType > > mapping_collection
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)
static const unsigned int invalid_unsigned_int