16#ifndef dealii_non_matching_mapping_info_h
17#define dealii_non_matching_mapping_info_h
45 template <
int dim,
int spacedim = dim>
56 const UpdateFlags &update_flags)
58 return mapping->requires_update_flags(update_flags);
64 const UpdateFlags &update_flags_mapping,
69 &internal_mapping_data,
73 internal_mapping_data->reinit(update_flags_mapping, quadrature);
75 cell_similarity =
mapping->fill_fe_values(cell,
78 *internal_mapping_data,
87 const UpdateFlags &update_flags_mapping,
91 &internal_mapping_data,
94 mapping_data.
initialize(quadrature.size(), update_flags_mapping);
96 internal_mapping_data->reinit(update_flags_mapping, quadrature);
98 mapping->fill_fe_immersed_surface_values(cell,
100 *internal_mapping_data,
109 const UpdateFlags &update_flags_mapping,
111 const unsigned int face_no,
114 &internal_mapping_data,
125 *internal_mapping_data);
136 mapping_q->fill_mapping_data_for_face_quadrature(
137 cell, face_no, quadrature, *internal_mapping_data, mapping_data);
141 auto internal_mapping_data =
142 mapping->get_face_data(update_flags_mapping,
145 mapping->fill_fe_face_values(cell,
148 *internal_mapping_data,
154 template <
int dim,
int spacedim = dim>
157 const double diameter,
161 const auto jac_0 = inverse_jacobians[0];
162 const double zero_tolerance_double =
163 1e4 / diameter * std::numeric_limits<double>::epsilon() * 1024.;
164 bool jacobian_constant =
true;
165 for (
unsigned int q = 1; q < inverse_jacobians.size(); ++q)
168 for (
unsigned int d = 0; d < dim; ++d)
169 for (
unsigned int e = 0; e < spacedim; ++e)
170 if (std::fabs(jac_0[d][e] - jac[d][e]) > zero_tolerance_double)
171 jacobian_constant =
false;
172 if (!jacobian_constant)
178 bool cell_cartesian = jacobian_constant && dim == spacedim;
179 for (
unsigned int d = 0; d < dim; ++d)
180 for (
unsigned int e = 0; e < dim; ++e)
182 if (std::fabs(jac_0[d][e]) > zero_tolerance_double)
184 cell_cartesian =
false;
190 return ::internal::MatrixFreeFunctions::GeometryType::cartesian;
191 else if (jacobian_constant)
192 return ::internal::MatrixFreeFunctions::GeometryType::affine;
194 return ::internal::MatrixFreeFunctions::GeometryType::general;
220 template <
int dim,
int spacedim = dim,
typename Number =
double>
228 Number>::vectorized_value_type;
324 template <
typename ContainerType>
327 const ContainerType &cell_iterator_range,
328 const std::vector<std::vector<
Point<dim>>> &unit_points_vector,
337 template <
typename ContainerType>
340 const ContainerType &cell_iterator_range,
348 template <
typename ContainerType>
351 const ContainerType &cell_iterator_range,
359 template <
typename ContainerType>
362 const ContainerType &cell_iterator_range,
370 template <
typename CellIteratorType>
372 reinit_faces(
const std::vector<std::pair<CellIteratorType, unsigned int>>
373 &face_iterator_range_interior,
409 const bool is_interior =
true)
const;
417 const bool is_interior =
true)
const;
461 template <
bool is_face>
483 const unsigned int geometry_index)
const;
519 template <
typename NumberType>
546 const bool is_face_centric =
false);
553 const unsigned int n_q_points,
562 const unsigned int n_q_points,
571 const unsigned int n_q_points,
574 const std::vector<double> &weights,
575 const unsigned int compressed_unit_point_index_offset,
576 const bool affine_cell,
577 const bool is_interior =
true);
588 template <
typename ContainerType,
typename QuadratureType>
591 const ContainerType &cell_iterator_range,
592 const std::vector<QuadratureType> &quadrature_vector,
593 const unsigned int n_unfiltered_cells,
639 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
680 std::vector<::internal::MatrixFreeFunctions::GeometryType>
cell_type;
713 std::array<AlignedVector<DerivativeForm<1, dim, spacedim, Number>>, 2>
723 std::array<AlignedVector<DerivativeForm<1, spacedim, dim, Number>>, 2>
775 template <
int dim,
int spacedim,
typename Number>
778 const unsigned int offset,
779 const bool is_interior)
const
782 return is_interior ? face_pair.first : face_pair.second;
788 template <
int dim,
int spacedim,
typename Number>
823 template <
int dim,
int spacedim,
typename Number>
836 template <
int dim,
int spacedim,
typename Number>
840 const std::vector<
Point<dim>> &unit_points_in)
847 template <
int dim,
int spacedim,
typename Number>
859 template <
int dim,
int spacedim,
typename Number>
868 const unsigned int n_q_points =
871 const unsigned int n_q_points_data =
927 template <
int dim,
int spacedim,
typename Number>
928 template <
typename ContainerType>
931 const ContainerType &cell_iterator_range,
932 const std::vector<std::vector<
Point<dim>>> &unit_points_vector,
933 const unsigned int n_unfiltered_cells)
935 const unsigned int n_cells = unit_points_vector.size();
937 std::distance(cell_iterator_range.begin(),
938 cell_iterator_range.end()));
940 std::vector<Quadrature<dim>> quadrature_vector(n_cells);
941 for (
unsigned int cell_index = 0; cell_index < n_cells; ++cell_index)
942 quadrature_vector[cell_index] =
945 reinit_cells(cell_iterator_range, quadrature_vector, n_unfiltered_cells);
950 template <
int dim,
int spacedim,
typename Number>
951 template <
typename ContainerType,
typename QuadratureType>
954 const ContainerType &cell_iterator_range,
955 const std::vector<QuadratureType> &quadrature_vector,
956 const unsigned int n_unfiltered_cells,
967 const unsigned int n_cells = quadrature_vector.size();
969 std::distance(cell_iterator_range.begin(),
970 cell_iterator_range.end()));
984 for (
const auto &
quadrature : quadrature_vector)
986 const unsigned int n_points =
quadrature.size();
989 const unsigned int n_q_points =
993 const unsigned int n_q_points_data =
1011 unsigned int size_compressed_data = 0;
1012 unsigned int cell_index = 0;
1013 for (
const auto &cell : cell_iterator_range)
1021 const auto &
quadrature = quadrature_vector[cell_index];
1036 const unsigned int n_q_points_data =
1054 const bool affine_cells =
1063 1e4 / cell->
diameter() * std::numeric_limits<double>::epsilon() *
1068 const auto comparison_result =
1069 (!affine_cells ||
mapping_data.inverse_jacobians.empty() ||
1079 comparison_result ==
1087 const unsigned int n_compressed_data_last_cell =
1096 n_compressed_data_last_cell);
1120 size_compressed_data =
1133 jacobians[0].resize(size_compressed_data);
1147 template <
int dim,
int spacedim,
typename Number>
1148 template <
typename ContainerType>
1151 const ContainerType &cell_iterator_range,
1153 const unsigned int n_unfiltered_cells)
1155 auto compute_mapping_data_for_cells =
1172 cell_iterator_range,
1175 compute_mapping_data_for_cells);
1180 template <
int dim,
int spacedim,
typename Number>
1181 template <
typename ContainerType>
1184 const ContainerType &cell_iterator_range,
1186 const unsigned int n_unfiltered_cells)
1191 "There is no known use-case for AdditionalData::use_global_weights=true and reinit_surface()"));
1198 auto compute_mapping_data_for_surface =
1213 cell_iterator_range,
1216 compute_mapping_data_for_surface);
1221 template <
int dim,
int spacedim,
typename Number>
1222 template <
typename ContainerType>
1225 const ContainerType &cell_iterator_range,
1227 const unsigned int n_unfiltered_cells)
1236 const unsigned int n_cells = quadrature_vector.size();
1238 std::distance(cell_iterator_range.begin(),
1239 cell_iterator_range.end()));
1243 unsigned int n_faces = 0;
1244 unsigned int cell_index = 0;
1245 for (
const auto &cell : cell_iterator_range)
1248 n_faces += cell->n_faces();
1260 unsigned int n_unit_points = 0;
1261 unsigned int n_data_points = 0;
1262 for (
const auto &cell : cell_iterator_range)
1264 for (
const auto &f : cell->face_indices())
1266 const unsigned int current_face_index =
1272 const unsigned int n_points =
1273 quadrature_vector[cell_index][f].size();
1276 const unsigned int n_q_points =
1278 n_unit_points += n_q_points;
1280 const unsigned int n_q_points_data =
1282 n_data_points += n_q_points_data;
1302 bool first_set =
false;
1303 unsigned int size_compressed_data = 0;
1305 for (
const auto &cell : cell_iterator_range)
1307 const auto &quadratures_on_faces = quadrature_vector[cell_index];
1309 Assert(quadratures_on_faces.size() == cell->n_faces(),
1313 for (
const auto &f : cell->face_indices())
1315 const auto &quadrature_on_face = quadratures_on_faces[f];
1316 const bool empty = quadrature_on_face.empty();
1318 const unsigned int current_face_index =
1322 const unsigned int n_q_points =
1328 quadrature_on_face.get_points());
1356 if (current_face_index > 0)
1359 const bool affine_cells =
1368 1e4 / cell->diameter() *
1369 std::numeric_limits<double>::epsilon() * 1024.);
1373 const auto comparison_result =
1374 (!affine_cells ||
mapping_data.inverse_jacobians.empty() ||
1384 comparison_result ==
1390 else if (first_set &&
1397 double>::ComparisonResult::equal))
1403 const unsigned int n_compressed_data_last_cell =
1412 n_compressed_data_last_cell);
1427 quadrature_on_face.get_weights(),
1438 size_compressed_data =
1452 jacobians[0].resize(size_compressed_data);
1466 template <
int dim,
int spacedim,
typename Number>
1467 template <
typename CellIteratorType>
1470 const std::vector<std::pair<CellIteratorType, unsigned int>>
1471 &face_iterator_range_interior,
1481 const unsigned int n_faces = quadrature_vector.size();
1483 std::distance(face_iterator_range_interior.begin(),
1484 face_iterator_range_interior.end()));
1496 for (
const auto &
quadrature : quadrature_vector)
1498 const unsigned int n_points =
quadrature.size();
1501 const unsigned int n_q_points =
1505 const unsigned int n_q_points_data =
1519 std::array<MappingData, 2> mapping_data_previous_cell;
1520 std::array<MappingData, 2> mapping_data_first;
1521 bool first_set =
false;
1522 unsigned int size_compressed_data = 0;
1523 unsigned int face_index = 0;
1524 for (
const auto &cell_and_f : face_iterator_range_interior)
1526 const auto &quadrature_on_face = quadrature_vector[face_index];
1527 const bool empty = quadrature_on_face.empty();
1530 const auto &cell_m = cell_and_f.first;
1531 const auto f_m = cell_and_f.second;
1534 const auto &cell_p =
1535 cell_m->at_boundary(f_m) ? cell_m : cell_m->neighbor(f_m);
1537 cell_m->at_boundary(f_m) ? f_m : cell_m->neighbor_of_neighbor(f_m);
1542 cell_m->combined_face_orientation(f_m) ==
1544 cell_p->combined_face_orientation(f_p) ==
1547 "Non standard face orientation is currently not implemented."));
1555 quadrature_on_face.get_points());
1584 cell_m->diameter(),
mapping_data[0].inverse_jacobians),
1586 cell_m->diameter(),
mapping_data[1].inverse_jacobians)));
1603 const bool affine_cells =
1612 1e4 / cell_m->diameter() *
1613 std::numeric_limits<double>::epsilon() * 1024.);
1617 const auto comparison_result_m =
1618 (!affine_cells ||
mapping_data[0].inverse_jacobians.empty() ||
1625 const auto comparison_result_p =
1626 (!affine_cells ||
mapping_data[1].inverse_jacobians.empty() ||
1636 comparison_result_m ==
1638 comparison_result_p ==
1644 else if (first_set &&
1649 mapping_data_first[0].inverse_jacobians[0]) ==
1651 double>::ComparisonResult::equal) &&
1654 mapping_data_first[1].inverse_jacobians[0]) ==
1661 const unsigned int n_compressed_data_last_cell =
1670 n_compressed_data_last_cell);
1679 const unsigned int n_q_points_data =
1687 quadrature_on_face.get_weights(),
1699 quadrature_on_face.get_weights(),
1711 size_compressed_data =
1720 jacobians[0].resize(size_compressed_data);
1722 jacobians[1].resize(size_compressed_data);
1738 template <
int dim,
int spacedim,
typename Number>
1747 template <
int dim,
int spacedim,
typename Number>
1750 const unsigned int geometry_index)
const
1756 template <
int dim,
int spacedim,
typename Number>
1759 const unsigned int geometry_index)
const
1766 template <
int dim,
int spacedim,
typename Number>
1769 const unsigned int cell_index)
const
1774 "Cells have been not stored. You can enable this by Additional::store_cells."));
1782 template <
int dim,
int spacedim,
typename Number>
1783 template <
typename NumberType>
1788 const unsigned int n_lanes =
1790 const unsigned int n_filled_lanes_last_batch =
1793 if (n_filled_lanes_last_batch > 0)
1800 template <
int dim,
int spacedim,
typename Number>
1801 template <
bool is_face>
1804 const unsigned int cell_index,
1810 const unsigned int compressed_cell_index =
1816 "This mapping info is not reinitialized for a cell vector!"));
1817 return compressed_cell_index;
1823 "cell_index has to be set if face_number is specified!"));
1826 ExcMessage(
"This mapping info is not reinitialized for faces"
1827 " on cells in a vector!"));
1837 template <
int dim,
int spacedim,
typename Number>
1840 const unsigned int cell_index)
const
1846 ExcMessage(
"Mapping info object was not initialized for this"
1847 " active cell index!"));
1855 template <
int dim,
int spacedim,
typename Number>
1858 const unsigned int unit_points_index_offset,
1859 const unsigned int n_q_points,
1863 const unsigned int n_lanes =
1866 for (
unsigned int q = 0; q < n_q_points; ++q)
1868 const unsigned int offset = unit_points_index_offset + q;
1869 for (
unsigned int v = 0;
1872 for (
unsigned int d = 0; d < dim; ++d)
1874 unit_points[offset][d], v) = points[q * n_lanes + v][d];
1880 template <
int dim,
int spacedim,
typename Number>
1883 const unsigned int unit_points_index_offset,
1884 const unsigned int n_q_points,
1888 const unsigned int n_lanes =
1891 for (
unsigned int q = 0; q < n_q_points; ++q)
1893 const unsigned int offset = unit_points_index_offset + q;
1894 for (
unsigned int v = 0;
1897 for (
unsigned int d = 0; d < dim - 1; ++d)
1905 template <
int dim,
int spacedim,
typename Number>
1908 const unsigned int unit_points_index_offset,
1909 const unsigned int n_q_points,
1912 const std::vector<double> &weights,
1913 const unsigned int compressed_unit_point_index_offset,
1914 const bool affine_cell,
1915 const bool is_interior)
1917 const unsigned int n_lanes =
1920 for (
unsigned int q = 0; q < n_q_points; ++q)
1922 const unsigned int offset = unit_points_index_offset + q;
1923 const unsigned int compressed_offset =
1924 compressed_unit_point_index_offset + q;
1925 for (
unsigned int v = 0;
1929 if (q == 0 || !affine_cell)
1932 for (
unsigned int d = 0; d < dim; ++d)
1933 for (
unsigned int s = 0; s < spacedim; ++s)
1935 jacobians[is_interior ? 0 : 1][compressed_offset][d][s],
1939 for (
unsigned int d = 0; d < dim; ++d)
1940 for (
unsigned int s = 0; s < spacedim; ++s)
1943 [compressed_offset][d][s],
1955 JxW_values[offset], v) = weights[q * n_lanes + v];
1965 for (
unsigned int s = 0; s < spacedim; ++s)
1971 for (
unsigned int s = 0; s < spacedim; ++s)
1982 template <
int dim,
int spacedim,
typename Number>
1985 const unsigned int n_unit_point_batches)
1992 template <
int dim,
int spacedim,
typename Number>
1995 const unsigned int n_unit_point_batches)
2002 template <
int dim,
int spacedim,
typename Number>
2005 const unsigned int n_data_point_batches,
2006 const bool is_face_centric)
2010 jacobians[0].resize(n_data_point_batches);
2011 if (is_face_centric)
2012 jacobians[1].resize(n_data_point_batches);
2017 if (is_face_centric)
2030 template <
int dim,
int spacedim,
typename Number>
2035 const unsigned int offset)
const
2042 template <
int dim,
int spacedim,
typename Number>
2047 const unsigned int offset)
const
2054 template <
int dim,
int spacedim,
typename Number>
2057 const unsigned int offset)
const
2064 template <
int dim,
int spacedim,
typename Number>
2067 const unsigned int geometry_index)
const
2074 template <
int dim,
int spacedim,
typename Number>
2077 const unsigned int geometry_index)
const
2083 template <
int dim,
int spacedim,
typename Number>
2086 const unsigned int geometry_index)
const
2093 template <
int dim,
int spacedim,
typename Number>
2096 const bool is_interior)
const
2098 return jacobians[is_interior ? 0 : 1].data() + offset;
2103 template <
int dim,
int spacedim,
typename Number>
2106 const unsigned int offset,
2107 const bool is_interior)
const
2114 template <
int dim,
int spacedim,
typename Number>
2117 const unsigned int offset)
const
2124 template <
int dim,
int spacedim,
typename Number>
2125 inline const Number *
2133 template <
int dim,
int spacedim,
typename Number>
2142 template <
int dim,
int spacedim,
typename Number>
2151 template <
int dim,
int spacedim,
typename Number>
2160 template <
int dim,
int spacedim,
typename Number>
2182 memory +=
sizeof(*this);
ArrayView< std::remove_reference_t< typename std::iterator_traits< Iterator >::reference >, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
double diameter(const Mapping< dim, spacedim > &mapping) const
unsigned int active_cell_index() const
void initialize_face(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
unsigned int compute_compressed_data_index_offset(const unsigned int geometry_index) const
const DerivativeForm< 1, spacedim, dim, Number > * get_inverse_jacobian(const unsigned int offset, const bool is_interior=true) const
typename ::internal::VectorizedArrayTrait< Number >::vectorized_value_type VectorizedArrayType
AlignedVector< Point< dim, VectorizedArrayType > > unit_points
std::array< AlignedVector< DerivativeForm< 1, dim, spacedim, Number > >, 2 > jacobians
AlignedVector< Number > JxW_values
::internal::MatrixFreeFunctions::GeometryType get_cell_type(const unsigned int geometry_index) const
::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > MappingData
unsigned int get_face_number(const unsigned int offset, const bool is_interior) const
const Mapping< dim, spacedim > & get_mapping() const
void reinit_faces(const ContainerType &cell_iterator_range, const std::vector< std::vector< Quadrature< dim - 1 > > > &quadrature_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
std::array< AlignedVector< DerivativeForm< 1, spacedim, dim, Number > >, 2 > inverse_jacobians
SmartPointer< const Triangulation< dim, spacedim > > triangulation
const Point< dim, VectorizedArrayType > * get_unit_point(const unsigned int offset) const
unsigned int get_n_q_points_unvectorized(const unsigned int geometry_index) 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
Quadrature< dim > quadrature
std::vector< unsigned int > cell_index_offset
void reinit(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Quadrature< dim > &quadrature)
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, const unsigned int compressed_unit_point_index_offset, const bool affine_cell, const bool is_interior=true)
const SmartPointer< const Mapping< dim, spacedim > > mapping
AlignedVector< Tensor< 1, spacedim, Number > > normal_vectors
unsigned int compute_geometry_index_offset(const unsigned int cell_index, const unsigned int face_number) const
std::vector<::internal::MatrixFreeFunctions::GeometryType > cell_type
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)
MappingInfo & operator=(const MappingInfo &)=delete
std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > internal_mapping_data
void reinit_surface(const ContainerType &cell_iterator_range, const std::vector< ImmersedSurfaceQuadrature< dim > > &quadrature_vector, const unsigned int n_unfiltered_cells=numbers::invalid_unsigned_int)
void resize_unit_points_faces(const unsigned int n_unit_point_batches)
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)
const DerivativeForm< 1, dim, spacedim, Number > * get_jacobian(const unsigned int offset, const bool is_interior=true) const
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_data_fields(const unsigned int n_data_point_batches, const bool is_face_centric=false)
void resize_unit_points(const unsigned int n_unit_point_batches)
std::size_t memory_consumption() const
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)
unsigned int compute_unit_point_index_offset(const unsigned int geometry_index) const
std::vector< unsigned int > cell_index_to_compressed_cell_index
AlignedVector< Point< spacedim, Number > > real_points
unsigned int compute_data_index_offset(const unsigned int geometry_index) const
@ faces_on_cells_in_vector
std::vector< std::pair< unsigned char, unsigned char > > face_number
MappingInfo(const Mapping< dim, spacedim > &mapping, const UpdateFlags update_flags, const AdditionalData additional_data=AdditionalData())
std::vector< unsigned int > unit_points_index
std::vector< std::pair< int, int > > cell_level_and_indices
std::vector< unsigned int > compressed_data_index_offsets
bool do_cell_index_compression
std::vector< unsigned int > data_index_offsets
bool is_face_state() const
std::vector< unsigned int > n_q_points_unvectorized
const Number * get_JxW(const unsigned int offset) const
const Point< spacedim, Number > * get_real_point(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)
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)
MappingInfo(const MappingInfo &)=delete
void reinit_faces(const std::vector< std::pair< CellIteratorType, unsigned int > > &face_iterator_range_interior, const std::vector< Quadrature< dim - 1 > > &quadrature_vector)
UpdateFlags update_flags_mapping
void do_reinit_cells(const ContainerType &cell_iterator_range, const std::vector< QuadratureType > &quadrature_vector, const unsigned int n_unfiltered_cells, const std::function< void(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const QuadratureType &quadrature, MappingData &mapping_data)> &compute_mapping_data)
UpdateFlags get_update_flags_mapping() const
Triangulation< dim, spacedim >::cell_iterator get_cell_iterator(const unsigned int cell_index) const
static UpdateFlags required_update_flags(const SmartPointer< const Mapping< dim, spacedim > > &mapping, const UpdateFlags &update_flags)
::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > MappingData
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::unique_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::unique_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::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > &internal_mapping_data, MappingData &mapping_data)
static Quadrature< dim > project_to_oriented_face(const ReferenceCell &reference_cell, const SubQuadrature &quadrature, const unsigned int face_no, const bool face_orientation, const bool face_flip, const bool face_rotation)
unsigned int size() const
static constexpr unsigned char default_combined_face_orientation()
const Triangulation< dim, spacedim > & get_triangulation() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#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)
TriaIterator< CellAccessor< dim, spacedim > > cell_iterator
@ 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.
bool face_rotation(const unsigned int face) const
bool face_orientation(const unsigned int face) const
bool face_flip(const unsigned int face) const
MappingQ< dim, spacedim > StaticMappingQ1< dim, spacedim >::mapping
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)
::internal::MatrixFreeFunctions::GeometryType compute_geometry_type(const double diameter, const std::vector< DerivativeForm< 1, spacedim, dim, double > > &inverse_jacobians)
constexpr const ReferenceCell & get_hypercube()
static const unsigned int invalid_unsigned_int
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
ComparisonResult compare(const std::vector< T > &v1, const std::vector< T > &v2) const
AdditionalData(const bool use_global_weights=false, const bool store_cells=false)
static constexpr std::size_t width()
static value_type & get(value_type &value, unsigned int c)