17#ifndef dealii_non_matching_mapping_info_h
18#define dealii_non_matching_mapping_info_h
43 template <
int dim,
int spacedim = dim>
56 return mapping->requires_update_flags(update_flags);
67 internal_mapping_data,
79 *internal_mapping_data);
86 internal_mapping_data =
87 mapping->get_data(update_flags_mapping, quadrature);
90 cell_similarity = mapping->fill_fe_values(cell,
93 *internal_mapping_data,
106 internal_mapping_data,
116 *internal_mapping_data);
123 internal_mapping_data =
124 mapping->get_data(update_flags_mapping, quadrature);
127 mapping->fill_fe_immersed_surface_values(cell,
129 *internal_mapping_data,
140 const unsigned int face_no,
143 internal_mapping_data,
154 *internal_mapping_data);
157 ReferenceCells::get_hypercube<dim>(),
160 cell->face_orientation(face_no),
161 cell->face_flip(face_no),
162 cell->face_rotation(face_no)),
165 mapping_q->fill_mapping_data_for_face_quadrature(
166 cell, face_no, quadrature, *internal_mapping_data, mapping_data);
170 auto internal_mapping_data =
171 mapping->get_face_data(update_flags_mapping,
174 mapping->fill_fe_face_values(cell,
177 *internal_mapping_data,
200 template <
int dim,
int spacedim = dim,
typename Number =
double>
208 Number>::vectorized_value_type;
282 template <
typename ContainerType>
285 const ContainerType & cell_iterator_range,
286 const std::vector<std::vector<
Point<dim>>> &unit_points_vector,
295 template <
typename ContainerType>
298 const ContainerType & cell_iterator_range,
306 template <
typename Iterator>
317 template <
typename Iterator>
401 boost::signals2::connection
409 const unsigned int face_number)
const;
416 const unsigned int face_number)
const;
423 const unsigned int face_number)
const;
433 template <
typename NumberType>
466 const unsigned int n_q_points,
475 const unsigned int n_q_points,
484 const unsigned int n_q_points,
487 const std::vector<double> &weights);
500 const unsigned int face_number)
const;
541 std::shared_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
641 template <
int dim,
int spacedim,
typename Number>
647 , update_flags(update_flags)
649 , additional_data(additional_data)
675 std::make_unique<typename MappingQ<dim, spacedim>::InternalData>(
676 mapping_q->get_degree());
682 template <
int dim,
int spacedim,
typename Number>
686 n_q_points_unvectorized.clear();
687 unit_points_index.clear();
688 data_index_offsets.clear();
693 template <
int dim,
int spacedim,
typename Number>
697 const std::vector<
Point<dim>> & unit_points_in)
704 template <
int dim,
int spacedim,
typename Number>
711 std::vector<
Point<dim>>(unit_points_in.begin(),
712 unit_points_in.end()));
717 template <
int dim,
int spacedim,
typename Number>
723 n_q_points_unvectorized.resize(1);
724 n_q_points_unvectorized[0] = quadrature.
size();
726 const unsigned int n_q_points =
727 compute_n_q_points<VectorizedArrayType>(n_q_points_unvectorized[0]);
729 const unsigned int n_q_points_data =
730 compute_n_q_points<Number>(n_q_points_unvectorized[0]);
733 resize_unit_points(n_q_points);
734 resize_data_fields(n_q_points_data);
739 n_q_points_unvectorized[0],
747 update_flags_mapping,
751 internal_mapping_data,
755 store_mapping_data(0,
757 n_q_points_unvectorized[0],
761 state = State::single_cell;
767 template <
int dim,
int spacedim,
typename Number>
768 template <
typename ContainerType>
771 const ContainerType & cell_iterator_range,
772 const std::vector<std::vector<
Point<dim>>> &unit_points_vector,
773 const unsigned int n_unfiltered_cells)
775 const unsigned int n_cells = unit_points_vector.size();
777 std::distance(cell_iterator_range.begin(),
778 cell_iterator_range.end()));
780 std::vector<Quadrature<dim>> quadrature_vector(n_cells);
785 reinit_cells(cell_iterator_range, quadrature_vector, n_unfiltered_cells);
790 template <
int dim,
int spacedim,
typename Number>
791 template <
typename ContainerType>
794 const ContainerType & cell_iterator_range,
796 const unsigned int n_unfiltered_cells)
800 do_cell_index_compression =
803 const unsigned int n_cells = quadrature_vector.size();
805 std::distance(cell_iterator_range.begin(),
806 cell_iterator_range.end()));
808 n_q_points_unvectorized.reserve(n_cells);
811 unit_points_index.reserve(n_cells + 1);
812 unit_points_index.push_back(0);
813 data_index_offsets.reserve(n_cells + 1);
814 data_index_offsets.push_back(0);
815 for (
const auto &quadrature : quadrature_vector)
817 const unsigned int n_points = quadrature.size();
818 n_q_points_unvectorized.push_back(n_points);
820 const unsigned int n_q_points =
821 compute_n_q_points<VectorizedArrayType>(n_points);
822 unit_points_index.push_back(unit_points_index.back() + n_q_points);
824 const unsigned int n_q_points_data =
825 compute_n_q_points<Number>(n_points);
826 data_index_offsets.push_back(data_index_offsets.back() +
830 const unsigned int n_unit_points = unit_points_index.back();
831 const unsigned int n_data_points = data_index_offsets.back();
834 resize_unit_points(n_unit_points);
835 resize_data_fields(n_data_points);
837 if (do_cell_index_compression)
838 cell_index_to_compressed_cell_index.resize(n_unfiltered_cells,
845 for (
const auto &cell : cell_iterator_range)
848 const unsigned int n_q_points = compute_n_q_points<VectorizedArrayType>(
850 store_unit_points(unit_points_index[
cell_index],
858 update_flags_mapping,
862 internal_mapping_data,
866 const unsigned int n_q_points_data =
867 compute_n_q_points<Number>(n_q_points_unvectorized[
cell_index]);
868 store_mapping_data(data_index_offsets[
cell_index],
874 if (do_cell_index_compression)
875 cell_index_to_compressed_cell_index[cell->active_cell_index()] =
881 state = State::cell_vector;
887 template <
int dim,
int spacedim,
typename Number>
888 template <
typename Iterator>
893 const unsigned int n_unfiltered_cells)
898 additional_data.use_global_weights ==
false,
900 "There is no known use-case for AdditionalData::use_global_weights=true and reinit_surface()"));
902 do_cell_index_compression =
908 const unsigned int n_cells = quadrature_vector.size();
910 std::distance(cell_iterator_range.
begin(),
911 cell_iterator_range.
end()));
913 n_q_points_unvectorized.reserve(n_cells);
916 unit_points_index.reserve(n_cells + 1);
917 unit_points_index.push_back(0);
918 data_index_offsets.reserve(n_cells + 1);
919 data_index_offsets.push_back(0);
920 for (
const auto &quadrature : quadrature_vector)
922 const unsigned int n_points = quadrature.size();
923 n_q_points_unvectorized.push_back(n_points);
925 const unsigned int n_q_points =
926 compute_n_q_points<VectorizedArrayType>(n_points);
927 unit_points_index.push_back(unit_points_index.back() + n_q_points);
929 const unsigned int n_q_points_data =
930 compute_n_q_points<Number>(n_points);
931 data_index_offsets.push_back(data_index_offsets.back() +
935 const unsigned int n_unit_points = unit_points_index.back();
936 const unsigned int n_data_points = data_index_offsets.back();
939 resize_unit_points(n_unit_points);
940 resize_data_fields(n_data_points);
942 if (do_cell_index_compression)
943 cell_index_to_compressed_cell_index.resize(n_unfiltered_cells,
948 for (
const auto &cell : cell_iterator_range)
950 const auto &quadrature = quadrature_vector[
cell_index];
953 const unsigned int n_q_points = compute_n_q_points<VectorizedArrayType>(
955 store_unit_points(unit_points_index[
cell_index],
964 update_flags_mapping,
967 internal_mapping_data,
971 const unsigned int n_q_points_data =
972 compute_n_q_points<Number>(n_q_points_unvectorized[
cell_index]);
973 store_mapping_data(data_index_offsets[
cell_index],
979 if (do_cell_index_compression)
980 cell_index_to_compressed_cell_index[cell->active_cell_index()] =
986 state = State::cell_vector;
992 template <
int dim,
int spacedim,
typename Number>
993 template <
typename Iterator>
998 const unsigned int n_unfiltered_cells)
1002 do_cell_index_compression =
1005 const unsigned int n_cells = quadrature_vector.size();
1007 std::distance(cell_iterator_range.
begin(),
1008 cell_iterator_range.
end()));
1011 cell_index_offset.resize(n_cells);
1012 unsigned int n_faces = 0;
1014 for (
const auto &cell : cell_iterator_range)
1017 n_faces += cell->n_faces();
1021 n_q_points_unvectorized.reserve(n_faces);
1024 unit_points_index.resize(n_faces + 1);
1025 data_index_offsets.resize(n_faces + 1);
1027 unsigned int n_unit_points = 0;
1028 unsigned int n_data_points = 0;
1029 for (
const auto &cell : cell_iterator_range)
1031 for (
const auto &f : cell->face_indices())
1033 const unsigned int current_face_index =
1036 unit_points_index[current_face_index] = n_unit_points;
1037 data_index_offsets[current_face_index] = n_data_points;
1039 const unsigned int n_points =
1041 n_q_points_unvectorized.push_back(n_points);
1043 const unsigned int n_q_points =
1044 compute_n_q_points<VectorizedArrayType>(n_points);
1045 n_unit_points += n_q_points;
1047 const unsigned int n_q_points_data =
1048 compute_n_q_points<Number>(n_points);
1049 n_data_points += n_q_points_data;
1054 unit_points_index[n_faces] = n_unit_points;
1055 data_index_offsets[n_faces] = n_data_points;
1058 if (do_cell_index_compression)
1059 cell_index_to_compressed_cell_index.resize(n_unfiltered_cells,
1064 resize_unit_points_faces(n_unit_points);
1065 resize_unit_points(n_unit_points);
1066 resize_data_fields(n_data_points);
1071 for (
const auto &cell : cell_iterator_range)
1073 const auto &quadratures_on_faces = quadrature_vector[
cell_index];
1075 Assert(quadratures_on_faces.size() == cell->n_faces(),
1079 for (
const auto &f : cell->face_indices())
1081 const auto &quadrature_on_face = quadratures_on_faces[f];
1083 const auto quadrature_on_cell =
1088 const unsigned int current_face_index =
1092 const unsigned int n_q_points =
1093 compute_n_q_points<VectorizedArrayType>(
1094 n_q_points_unvectorized[current_face_index]);
1095 store_unit_points(unit_points_index[current_face_index],
1097 n_q_points_unvectorized[current_face_index],
1098 quadrature_on_cell.get_points());
1100 store_unit_points_faces(unit_points_index[current_face_index],
1102 n_q_points_unvectorized[current_face_index],
1103 quadrature_on_face.get_points());
1107 update_flags_mapping,
1111 internal_mapping_data,
1114 const unsigned int n_q_points_data = compute_n_q_points<Number>(
1115 n_q_points_unvectorized[current_face_index]);
1116 store_mapping_data(data_index_offsets[current_face_index],
1118 n_q_points_unvectorized[current_face_index],
1120 quadrature_on_face.get_weights());
1122 if (do_cell_index_compression)
1123 cell_index_to_compressed_cell_index[cell->active_cell_index()] =
1129 state = State::faces_on_cells_in_vector;
1135 template <
int dim,
int spacedim,
typename Number>
1139 return state == State::faces_on_cells_in_vector;
1144 template <
int dim,
int spacedim,
typename Number>
1148 const unsigned int face_number)
const
1153 Assert(state == State::single_cell,
1155 "This mapping info is not reinitialized for a single cell!"));
1156 return n_q_points_unvectorized[0];
1160 return n_q_points_unvectorized[compute_geometry_index_offset(
1167 template <
int dim,
int spacedim,
typename Number>
1168 template <
typename NumberType>
1171 const unsigned int n_q_points_unvectorized)
1173 const unsigned int n_lanes =
1175 const unsigned int n_filled_lanes_last_batch =
1176 n_q_points_unvectorized % n_lanes;
1177 unsigned int n_q_points = n_q_points_unvectorized / n_lanes;
1178 if (n_filled_lanes_last_batch > 0)
1185 template <
int dim,
int spacedim,
typename Number>
1189 const unsigned int face_number)
const
1191 const unsigned int compressed_cell_index =
1195 Assert(state == State::cell_vector,
1197 "This mapping info is not reinitialized for a cell vector!"));
1198 return compressed_cell_index;
1204 "cell_index has to be set if face_number is specified!"));
1205 Assert(state == State::faces_on_cells_in_vector,
1206 ExcMessage(
"This mapping info is not reinitialized for faces"
1207 " on cells in a vector!"));
1208 return cell_index_offset[compressed_cell_index] + face_number;
1214 template <
int dim,
int spacedim,
typename Number>
1219 if (do_cell_index_compression)
1223 ExcMessage(
"Mapping info object was not initialized for this"
1224 " active cell index!"));
1225 return cell_index_to_compressed_cell_index[
cell_index];
1232 template <
int dim,
int spacedim,
typename Number>
1235 const unsigned int unit_points_index_offset,
1236 const unsigned int n_q_points,
1237 const unsigned int n_q_points_unvectorized,
1240 const unsigned int n_lanes =
1243 for (
unsigned int q = 0; q < n_q_points; ++q)
1245 const unsigned int offset = unit_points_index_offset + q;
1246 for (
unsigned int v = 0;
1247 v < n_lanes && q * n_lanes + v < n_q_points_unvectorized;
1249 for (
unsigned int d = 0; d < dim; ++d)
1251 unit_points[offset][d], v) = points[q * n_lanes + v][d];
1257 template <
int dim,
int spacedim,
typename Number>
1260 const unsigned int unit_points_index_offset,
1261 const unsigned int n_q_points,
1262 const unsigned int n_q_points_unvectorized,
1265 const unsigned int n_lanes =
1268 for (
unsigned int q = 0; q < n_q_points; ++q)
1270 const unsigned int offset = unit_points_index_offset + q;
1271 for (
unsigned int v = 0;
1272 v < n_lanes && q * n_lanes + v < n_q_points_unvectorized;
1274 for (
unsigned int d = 0; d < dim - 1; ++d)
1276 unit_points_faces[offset][d], v) = points[q * n_lanes + v][d];
1282 template <
int dim,
int spacedim,
typename Number>
1285 const unsigned int unit_points_index_offset,
1286 const unsigned int n_q_points,
1287 const unsigned int n_q_points_unvectorized,
1289 const std::vector<double> & weights)
1291 const unsigned int n_lanes =
1294 for (
unsigned int q = 0; q < n_q_points; ++q)
1296 const unsigned int offset = unit_points_index_offset + q;
1297 for (
unsigned int v = 0;
1298 v < n_lanes && q * n_lanes + v < n_q_points_unvectorized;
1302 for (
unsigned int d = 0; d < dim; ++d)
1303 for (
unsigned int s = 0; s < spacedim; ++s)
1305 jacobians[offset][d][s], v) =
1306 mapping_data.
jacobians[q * n_lanes + v][d][s];
1308 for (
unsigned int d = 0; d < dim; ++d)
1309 for (
unsigned int s = 0; s < spacedim; ++s)
1311 inverse_jacobians[offset][s][d], v) =
1315 if (additional_data.use_global_weights)
1318 JxW_values[offset], v) = weights[q * n_lanes + v];
1323 JxW_values[offset], v) =
1328 for (
unsigned int s = 0; s < spacedim; ++s)
1330 normal_vectors[offset][s], v) =
1333 for (
unsigned int s = 0; s < spacedim; ++s)
1335 real_points[offset][s], v) =
1343 template <
int dim,
int spacedim,
typename Number>
1346 const unsigned int n_unit_point_batches)
1348 unit_points.resize(n_unit_point_batches);
1353 template <
int dim,
int spacedim,
typename Number>
1356 const unsigned int n_unit_point_batches)
1358 unit_points_faces.resize(n_unit_point_batches);
1363 template <
int dim,
int spacedim,
typename Number>
1366 const unsigned int n_data_point_batches)
1369 jacobians.resize(n_data_point_batches);
1371 inverse_jacobians.resize(n_data_point_batches);
1373 JxW_values.resize(n_data_point_batches);
1375 normal_vectors.resize(n_data_point_batches);
1377 real_points.resize(n_data_point_batches);
1382 template <
int dim,
int spacedim,
typename Number>
1387 const unsigned int offset)
const
1389 return &unit_points[offset];
1394 template <
int dim,
int spacedim,
typename Number>
1399 const unsigned int offset)
const
1401 return &unit_points_faces[offset];
1406 template <
int dim,
int spacedim,
typename Number>
1409 const unsigned int offset)
const
1411 return &real_points[offset];
1416 template <
int dim,
int spacedim,
typename Number>
1420 const unsigned int face_number)
const
1425 Assert(state == State::single_cell,
1427 "This mapping info is not reinitialized for a single cell!"));
1432 const unsigned int offset =
1433 compute_geometry_index_offset(
cell_index, face_number);
1434 return unit_points_index[offset];
1440 template <
int dim,
int spacedim,
typename Number>
1444 const unsigned int face_number)
const
1449 Assert(state == State::single_cell,
1451 "This mapping info is not reinitialized for a single cell!"));
1456 const unsigned int offset =
1457 compute_geometry_index_offset(
cell_index, face_number);
1458 return data_index_offsets[offset];
1464 template <
int dim,
int spacedim,
typename Number>
1467 const unsigned int offset)
const
1469 return &jacobians[offset];
1474 template <
int dim,
int spacedim,
typename Number>
1477 const unsigned int offset)
const
1479 return &inverse_jacobians[offset];
1483 template <
int dim,
int spacedim,
typename Number>
1486 const unsigned int offset)
const
1488 return &normal_vectors[offset];
1493 template <
int dim,
int spacedim,
typename Number>
1494 inline const Number *
1497 return &JxW_values[offset];
1502 template <
int dim,
int spacedim,
typename Number>
1511 template <
int dim,
int spacedim,
typename Number>
1515 return update_flags;
1520 template <
int dim,
int spacedim,
typename Number>
1524 return update_flags_mapping;
1529 template <
int dim,
int spacedim,
typename Number>
1530 boost::signals2::connection
1532 const std::function<
void()> &set_is_reinitialized)
1534 return is_reinitialized.connect(set_is_reinitialized);
IteratorOverIterators end() const
IteratorOverIterators begin()
void initialize_face(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
void initialize(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
Abstract base class for mapping classes.
const UpdateFlags update_flags
AlignedVector< unsigned int > unit_points_index
AlignedVector< Point< dim, VectorizedArrayType > > unit_points
unsigned int compute_unit_point_index_offset(const unsigned int cell_index, const unsigned int face_number) const
const DerivativeForm< 1, spacedim, dim, Number > * get_inverse_jacobian(const unsigned int offset) const
AlignedVector< Number > JxW_values
std::shared_ptr< typename Mapping< dim, spacedim >::InternalDataBase > internal_mapping_data
const Point< dim, Number > * get_real_point(const unsigned int offset) const
boost::signals2::connection connect_is_reinitialized(const std::function< void()> &set_is_reinitialized)
const Mapping< dim, spacedim > & get_mapping() const
AlignedVector< DerivativeForm< 1, dim, spacedim, Number > > jacobians
const Point< dim, VectorizedArrayType > * get_unit_point(const unsigned int offset) const
unsigned int compute_compressed_cell_index(const unsigned int cell_index) const
const Point< dim - 1, VectorizedArrayType > * get_unit_point_faces(const unsigned int offset) const
std::vector< unsigned int > cell_index_offset
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Quadrature< dim > &quadrature)
MappingInfo(const Mapping< dim > &mapping, const UpdateFlags update_flags, const AdditionalData additional_data=AdditionalData())
const SmartPointer< const Mapping< dim, spacedim > > mapping
AlignedVector< Tensor< 1, spacedim, Number > > normal_vectors
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< dim > > &unit_points)
void reinit_cells(const ContainerType &cell_iterator_range, const std::vector< Quadrature< dim > > &quadrature_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
const DerivativeForm< 1, dim, spacedim, Number > * get_jacobian(const unsigned int offset) const
boost::signals2::signal< void()> is_reinitialized
unsigned int get_n_q_points_unvectorized(const unsigned int cell_index, const unsigned int face_number) const
void resize_unit_points_faces(const unsigned int n_unit_point_batches)
unsigned int compute_data_index_offset(const unsigned int cell_index, const unsigned int face_number) const
const Tensor< 1, spacedim, Number > * get_normal_vector(const unsigned int offset) const
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const std::vector< Point< dim > > &unit_points)
void store_mapping_data(const unsigned int unit_points_index_offset, const unsigned int n_q_points, const unsigned int n_q_points_unvectorized, const MappingData &mapping_data, const std::vector< double > &weights)
typename ::internal::VectorizedArrayTrait< Number >::vectorized_value_type VectorizedArrayType
void reinit_cells(const ContainerType &cell_iterator_range, const std::vector< std::vector< Point< dim > > > &unit_points_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
void resize_unit_points(const unsigned int n_unit_point_batches)
UpdateFlags get_update_flags() const
void store_unit_points_faces(const unsigned int unit_points_index_offset, const unsigned int n_q_points, const unsigned int n_q_points_unvectorized, const std::vector< Point< dim - 1 > > &points)
void resize_data_fields(const unsigned int n_data_point_batches)
std::vector< unsigned int > cell_index_to_compressed_cell_index
AlignedVector< Point< spacedim, Number > > real_points
unsigned int compute_geometry_index_offset(const unsigned int cell_index, const unsigned int face_number) const
AlignedVector< DerivativeForm< 1, spacedim, dim, Number > > inverse_jacobians
@ faces_on_cells_in_vector
bool do_cell_index_compression
bool is_face_state() const
std::vector< unsigned int > n_q_points_unvectorized
const Number * get_JxW(const unsigned int offset) const
void store_unit_points(const unsigned int unit_points_index_offset, const unsigned int n_q_points, const unsigned int n_q_points_unvectorized, const std::vector< Point< dim > > &points)
AlignedVector< unsigned int > data_index_offsets
const AdditionalData additional_data
AlignedVector< Point< dim - 1, VectorizedArrayType > > unit_points_faces
unsigned int compute_n_q_points(const unsigned int n_q_points_unvectorized)
void reinit_surface(const IteratorRange< Iterator > &cell_iterator_range, const std::vector< ImmersedSurfaceQuadrature< dim > > &quadrature_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
void reinit_faces(const IteratorRange< Iterator > &cell_iterator_range, const std::vector< std::vector< Quadrature< dim - 1 > > > &quadrature_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
UpdateFlags update_flags_mapping
UpdateFlags get_update_flags_mapping() const
static void compute_mapping_data_for_immersed_surface_quadrature(const SmartPointer< const Mapping< dim, spacedim > > mapping, const UpdateFlags &update_flags_mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ImmersedSurfaceQuadrature< dim > &quadrature, std::shared_ptr< typename Mapping< dim, spacedim >::InternalDataBase > internal_mapping_data, MappingData &mapping_data)
static void compute_mapping_data_for_quadrature(const SmartPointer< const Mapping< dim, spacedim > > mapping, const UpdateFlags &update_flags_mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, CellSimilarity::Similarity &cell_similarity, const Quadrature< dim > &quadrature, std::shared_ptr< typename Mapping< dim, spacedim >::InternalDataBase > internal_mapping_data, MappingData &mapping_data)
static void compute_mapping_data_for_face_quadrature(const SmartPointer< const Mapping< dim, spacedim > > mapping, const UpdateFlags &update_flags_mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const Quadrature< dim - 1 > &quadrature, std::shared_ptr< typename Mapping< dim, spacedim >::InternalDataBase > internal_mapping_data, MappingData &mapping_data)
static UpdateFlags required_update_flags(const SmartPointer< const Mapping< dim, spacedim > > mapping, const UpdateFlags &update_flags)
static void project_to_face(const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, std::vector< Point< dim > > &q_points)
const std::vector< double > & get_weights() const
const std::vector< Point< dim > > & get_points() const
unsigned int size() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
@ update_normal_vectors
Normal vectors.
@ update_JxW_values
Transformed quadrature weights.
@ update_covariant_transformation
Covariant transformation.
@ update_jacobians
Volume element.
@ update_inverse_jacobians
Volume element.
@ update_gradients
Shape function gradients.
@ update_quadrature_points
Transformed quadrature points.
@ update_default
No update.
static const unsigned int invalid_unsigned_int
AdditionalData(const bool use_global_weights=false)
static constexpr std::size_t width()
static value_type & get(value_type &value, unsigned int c)