37 #include <boost/container/small_vector.hpp> 49 template <
int dim,
int spacedim>
51 const unsigned int polynomial_degree)
52 : polynomial_degree(polynomial_degree)
54 , line_support_points(
QGaussLobatto<1>(polynomial_degree + 1))
55 , tensor_product_quadrature(false)
60 template <
int dim,
int spacedim>
81 template <
int dim,
int spacedim>
86 const unsigned int n_original_q_points)
92 const unsigned int n_q_points = q.
size();
94 const bool needs_higher_order_terms =
123 const std::array<Quadrature<1>, dim> quad_array =
127 if (quad_array[i - 1].size() != quad_array[i].size())
129 tensor_product_quadrature =
false;
134 const std::vector<Point<1>> &points_1 =
135 quad_array[i - 1].get_points();
136 const std::vector<Point<1>> &points_2 =
137 quad_array[i].get_points();
138 const std::vector<double> &weights_1 =
139 quad_array[i - 1].get_weights();
140 const std::vector<double> &weights_2 =
141 quad_array[i].get_weights();
142 for (
unsigned int j = 0; j < quad_array[i].size(); ++j)
144 if (std::abs(points_1[j][0] - points_2[j][0]) > 1.e-10 ||
145 std::abs(weights_1[j] - weights_2[j]) > 1.e-10)
147 tensor_product_quadrature =
false;
154 if (tensor_product_quadrature)
162 FETools::lexicographic_to_hierarchic_numbering<dim>(
181 (update_covariant_transformation |
211 template <
int dim,
int spacedim>
216 const unsigned int n_original_q_points)
218 initialize(update_flags, q, n_original_q_points);
222 constexpr
unsigned int facedim = dim - 1;
226 FETools::lexicographic_to_hierarchic_numbering<facedim>(
252 .resize(n_original_q_points);
267 template <
int dim,
int spacedim>
272 const unsigned int n_points = unit_points.size();
283 const std::vector<unsigned int> renumber =
286 std::vector<double>
values;
287 std::vector<Tensor<1, dim>> grads;
301 std::vector<Tensor<2, dim>> grad2;
309 std::vector<Tensor<3, dim>> grad3;
317 std::vector<Tensor<4, dim>> grad4;
333 unit_points[
point], values, grads, grad2, grad3, grad4);
337 shape(point, i) = values[renumber[i]];
359 template <
int dim,
int spacedim>
373 internal::MappingQGenericImplementation::
378 internal::MappingQGenericImplementation::
382 ExcMessage(
"It only makes sense to create polynomial mappings " 383 "with a polynomial degree greater or equal to one."));
388 template <
int dim,
int spacedim>
403 template <
int dim,
int spacedim>
404 std::unique_ptr<Mapping<dim, spacedim>>
407 return std::make_unique<MappingQGeneric<dim, spacedim>>(*this);
412 template <
int dim,
int spacedim>
421 template <
int dim,
int spacedim>
456 template <
int dim,
int spacedim>
475 const Point<1> & initial_p_unit)
const 479 return internal::MappingQGenericImplementation::
480 do_transform_real_to_unit_cell_internal<1>(
495 const Point<2> & initial_p_unit)
const 497 return internal::MappingQGenericImplementation::
498 do_transform_real_to_unit_cell_internal<2>(
513 const Point<3> & initial_p_unit)
const 515 return internal::MappingQGenericImplementation::
516 do_transform_real_to_unit_cell_internal<3>(
531 const Point<1> & initial_p_unit)
const 534 const int spacedim = 2;
542 get_data(update_flags, point_quadrature));
548 return internal::MappingQGenericImplementation::
549 do_transform_real_to_unit_cell_internal_codim1<1>(cell,
562 const Point<2> & initial_p_unit)
const 565 const int spacedim = 3;
573 get_data(update_flags, point_quadrature));
579 return internal::MappingQGenericImplementation::
580 do_transform_real_to_unit_cell_internal_codim1<2>(cell,
599 template <
int dim,
int spacedim>
608 ((dim == 1) || ((dim == 2) && (dim == spacedim))))
635 for (
unsigned int i = 0; i < vertices.size(); ++i)
636 vertices[i] = vertices_[i];
661 const double eps = 1
e-15;
662 if (-eps <=
point(1) &&
point(1) <= 1 + eps &&
696 initial_p_unit = cell->real_to_unit_cell_affine_approximation(p);
699 return initial_p_unit;
704 for (
unsigned int d = 0;
d < dim; ++
d)
705 initial_p_unit[
d] = 0.5;
712 if (p_unit[0] == std::numeric_limits<double>::infinity())
720 template <
int dim,
int spacedim>
738 const std::vector<Point<spacedim>> support_points =
743 internal::MappingQGenericImplementation::
744 InverseQuadraticApproximation<dim, spacedim>
747 const unsigned int n_points = real_points.size();
752 for (
unsigned int i = 0; i < n_points; i += n_lanes)
753 if (n_points - i > 1)
756 for (
unsigned int j = 0; j < n_lanes; ++j)
757 if (i + j < n_points)
758 for (
unsigned int d = 0;
d < spacedim; ++
d)
759 p_vec[
d][j] = real_points[i + j][
d];
761 for (
unsigned int d = 0;
d < spacedim; ++
d)
762 p_vec[
d][j] = real_points[i][
d];
765 internal::MappingQGenericImplementation::
766 do_transform_real_to_unit_cell_internal<dim, spacedim>(
768 inverse_approximation.
compute(p_vec),
778 for (
unsigned int j = 0; j < n_lanes && i + j < n_points; ++j)
779 if (unit_point[0][j] == std::numeric_limits<double>::infinity())
781 do_transform_real_to_unit_cell_internal<dim, spacedim>(
783 inverse_approximation.
compute(real_points[i + j]),
788 for (
unsigned int d = 0;
d < dim; ++
d)
789 unit_points[i + j][
d] = unit_point[
d][j];
792 unit_points[i] = internal::MappingQGenericImplementation::
793 do_transform_real_to_unit_cell_internal<dim, spacedim>(
795 inverse_approximation.
compute(real_points[i]),
803 template <
int dim,
int spacedim>
815 for (
unsigned int i = 0; i < 5; ++i)
860 template <
int dim,
int spacedim>
861 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
865 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
875 template <
int dim,
int spacedim>
876 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
883 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
889 quadrature[0].size());
896 template <
int dim,
int spacedim>
897 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase>
902 std::unique_ptr<typename Mapping<dim, spacedim>::InternalDataBase> data_ptr =
915 template <
int dim,
int spacedim>
926 Assert(dynamic_cast<const InternalData *>(&internal_data) !=
nullptr,
930 const unsigned int n_q_points = quadrature.
size();
954 internal::MappingQGenericImplementation::
955 maybe_update_q_points_Jacobians_and_grads_tensor<dim, spacedim>(
956 computed_cell_similarity,
971 computed_cell_similarity,
977 spacedim>(computed_cell_similarity,
983 internal::MappingQGenericImplementation::
984 maybe_update_jacobian_pushed_forward_grads<dim, spacedim>(
985 computed_cell_similarity,
990 internal::MappingQGenericImplementation::
991 maybe_update_jacobian_2nd_derivatives<dim, spacedim>(
992 computed_cell_similarity,
997 internal::MappingQGenericImplementation::
998 maybe_update_jacobian_pushed_forward_2nd_derivatives<dim, spacedim>(
999 computed_cell_similarity,
1004 internal::MappingQGenericImplementation::
1005 maybe_update_jacobian_3rd_derivatives<dim, spacedim>(
1006 computed_cell_similarity,
1011 internal::MappingQGenericImplementation::
1012 maybe_update_jacobian_pushed_forward_3rd_derivatives<dim, spacedim>(
1013 computed_cell_similarity,
1018 const UpdateFlags update_flags = data.update_each;
1019 const std::vector<double> &weights = quadrature.
get_weights();
1037 if (dim == spacedim)
1039 const double det = data.contravariant[
point].determinant();
1047 1
e-12 * Utilities::fixed_power<dim>(
1048 cell->diameter() / std::sqrt(
double(dim))),
1050 cell->center(), det,
point)));
1060 for (
unsigned int i = 0; i < spacedim; ++i)
1061 for (
unsigned int j = 0; j < dim; ++j)
1062 DX_t[j][i] = data.contravariant[
point][i][j];
1065 for (
unsigned int i = 0; i < dim; ++i)
1066 for (
unsigned int j = 0; j < dim; ++j)
1067 G[i][j] = DX_t[i] * DX_t[j];
1072 if (computed_cell_similarity ==
1076 if (update_flags & update_normal_vectors)
1081 if (update_flags & update_normal_vectors)
1083 Assert(spacedim == dim + 1,
1085 "There is no (unique) cell normal for " +
1087 "-dimensional cells in " +
1089 "-dimensional space. This only works if the " 1090 "space dimension is one greater than the " 1091 "dimensionality of the mesh cells."));
1103 if (cell->direction_flag() ==
false)
1129 data.covariant[
point].transpose();
1132 return computed_cell_similarity;
1137 template <
int dim,
int spacedim>
1141 const unsigned int face_no,
1150 Assert((dynamic_cast<const InternalData *>(&internal_data) !=
nullptr),
1159 (&cell->get_triangulation() !=
1174 cell->face_orientation(face_no),
1175 cell->face_flip(face_no),
1176 cell->face_rotation(face_no),
1177 quadrature[0].
size()),
1185 template <
int dim,
int spacedim>
1189 const unsigned int face_no,
1190 const unsigned int subface_no,
1197 Assert((dynamic_cast<const InternalData *>(&internal_data) !=
nullptr),
1206 (&cell->get_triangulation() !=
1223 cell->face_orientation(face_no),
1224 cell->face_flip(face_no),
1225 cell->face_rotation(face_no),
1227 cell->subface_case(face_no)),
1235 template <
int dim,
int spacedim>
1251 template <
int dim,
int spacedim>
1260 input, mapping_kind, mapping_data, output);
1265 template <
int dim,
int spacedim>
1273 switch (mapping_kind)
1286 input, mapping_kind, mapping_data, output);
1295 template <
int dim,
int spacedim>
1304 Assert(dynamic_cast<const InternalData *>(&mapping_data) !=
nullptr,
1308 switch (mapping_kind)
1314 "update_covariant_transformation"));
1316 for (
unsigned int q = 0; q < output.size(); ++q)
1317 for (
unsigned int i = 0; i < spacedim; ++i)
1318 for (
unsigned int j = 0; j < spacedim; ++j)
1321 for (
unsigned int K = 0; K < dim; ++K)
1323 tmp[K] = data.
covariant[q][j][0] * input[q][i][0][K];
1324 for (
unsigned int J = 1; J < dim; ++J)
1325 tmp[K] += data.
covariant[q][j][J] * input[q][i][J][K];
1327 for (
unsigned int k = 0; k < spacedim; ++k)
1329 output[q][i][j][k] = data.
covariant[q][k][0] * tmp[0];
1330 for (
unsigned int K = 1; K < dim; ++K)
1331 output[q][i][j][k] += data.
covariant[q][k][K] * tmp[K];
1344 template <
int dim,
int spacedim>
1352 switch (mapping_kind)
1358 input, mapping_kind, mapping_data, output);
1367 template <
int dim,
int spacedim>
1376 for (
unsigned int line_no = 0;
1377 line_no < GeometryInfo<dim>::lines_per_cell;
1384 cell->line(line_no));
1389 cell->get_manifold() :
1398 std::vector<Point<spacedim>> tmp_points;
1399 for (
unsigned int line_no = 0;
1400 line_no < GeometryInfo<dim>::lines_per_cell;
1407 cell->line(line_no));
1412 cell->get_manifold() :
1415 const std::array<Point<spacedim>, 2>
vertices{
1420 const std::size_t n_rows =
1422 a.resize(a.size() + n_rows);
1443 std::vector<Point<3>> tmp_points;
1446 for (
unsigned int face_no = 0; face_no < faces_per_cell; ++face_no)
1451 const bool face_orientation = cell->face_orientation(face_no),
1452 face_flip = cell->face_flip(face_no),
1453 face_rotation = cell->face_rotation(face_no);
1458 for (
unsigned int i = 0; i < vertices_per_face; ++i)
1459 Assert(face->vertex_index(i) ==
1461 face_no, i, face_orientation, face_flip, face_rotation)),
1466 for (
unsigned int i = 0; i < lines_per_face; ++i)
1469 face_no, i, face_orientation, face_flip, face_rotation)),
1475 boost::container::small_vector<Point<3>, 200> tmp_points(
1481 for (
unsigned int line = 0; line < GeometryInfo<2>::lines_per_cell;
1484 tmp_points[4 + line * (polynomial_degree - 1) + i] =
1486 (polynomial_degree - 1) *
1490 const std::size_t n_rows =
1492 a.resize(a.size() + n_rows);
1494 face->get_manifold().get_new_points(
1511 vertices[i] = cell->vertex(i);
1516 for (
unsigned int q1 = 0; q1 < polynomial_degree - 1; ++q1, ++q)
1524 const std::size_t n_rows = weights.
size(0);
1525 a.resize(a.size() + n_rows);
1527 cell->get_manifold().get_new_points(
1533 template <
int dim,
int spacedim>
1544 template <
int dim,
int spacedim>
1545 std::vector<Point<spacedim>>
1550 std::vector<Point<spacedim>> a;
1553 a.push_back(cell->vertex(i));
1562 bool all_manifold_ids_are_equal = (dim == spacedim);
1563 if (all_manifold_ids_are_equal &&
1565 &cell->get_manifold()) ==
nullptr)
1568 if (&cell->face(f)->get_manifold() != &cell->get_manifold())
1569 all_manifold_ids_are_equal =
false;
1572 for (
unsigned int l = 0; l < GeometryInfo<dim>::lines_per_cell; ++
l)
1573 if (&cell->line(
l)->get_manifold() != &cell->get_manifold())
1574 all_manifold_ids_are_equal =
false;
1577 if (all_manifold_ids_are_equal)
1580 a.resize(a.size() + n_rows);
1599 if (dim != spacedim)
1603 const std::size_t n_rows =
1605 a.resize(a.size() + n_rows);
1607 cell->get_manifold().get_new_points(
1621 const std::size_t n_rows =
1623 a.resize(a.size() + n_rows);
1625 cell->get_manifold().get_new_points(
1644 #include "mapping_q_generic.inst" Transformed quadrature weights.
Point< 1 > transform_real_to_unit_cell(const std::array< Point< spacedim >, GeometryInfo< 1 >::vertices_per_cell > &vertices, const Point< spacedim > &p)
std::vector< Tensor< 2, dim > > shape_second_derivatives
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
const types::manifold_id flat_manifold_id
static const unsigned int invalid_unsigned_int
unsigned int dofs_per_component_on_cell
void transform_fields(const ArrayView< const Tensor< rank, dim >> &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim >> &output)
#define AssertDimension(dim1, dim2)
const unsigned int polynomial_degree
typename IteratorSelector::line_iterator line_iterator
Contravariant transformation.
static unsigned int face_to_cell_vertices(const unsigned int face, const unsigned int vertex, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
const std::vector< Point< dim > > & get_points() const
inline ::Table< 2, double > compute_support_point_weights_cell(const unsigned int polynomial_degree)
const std::vector< double > & get_weights() const
virtual void add_quad_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, std::vector< Point< spacedim >> &a) const
virtual void transform_points_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< spacedim >> &real_points, const ArrayView< Point< dim >> &unit_points) const
void maybe_compute_q_points(const typename QProjector< dim >::DataSetDescriptor data_set, const typename ::MappingQGeneric< dim, spacedim >::InternalData &data, std::vector< Point< spacedim >> &quadrature_points)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Type get_hypercube(const unsigned int dim)
const Tensor< 1, dim > & derivative(const unsigned int qpoint, const unsigned int shape_nr) const
virtual UpdateFlags requires_update_flags(const UpdateFlags update_flags) const override
virtual void add_line_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell, std::vector< Point< spacedim >> &a) const
const Tensor< 3, dim > & third_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
virtual Point< spacedim > transform_unit_to_real_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< dim > &p) const override
void do_fill_fe_face_values(const ::MappingQGeneric< dim, spacedim > &mapping, const typename ::Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const typename QProjector< dim >::DataSetDescriptor data_set, const Quadrature< dim - 1 > &quadrature, const typename ::MappingQGeneric< dim, spacedim >::InternalData &data, internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data)
Outer normal vector, not normalized.
void reinit(const Quadrature< dim_q > &quad, const FiniteElement< dim > &fe_dim, const unsigned int base_element=0)
virtual std::unique_ptr< Mapping< dim, spacedim > > clone() const override
Determinant of the Jacobian.
const Table< 2, double > support_point_weights_cell
const std::array< Quadrature< 1 >, dim > & get_tensor_basis() const
Transformed quadrature points.
virtual CellSimilarity::Similarity fill_fe_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const CellSimilarity::Similarity cell_similarity, const Quadrature< dim > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
MappingQGeneric(const unsigned int polynomial_degree)
#define AssertThrow(cond, exc)
bool tensor_product_quadrature
static DataSetDescriptor cell()
InternalData(const unsigned int polynomial_degree)
constexpr Tensor< 1, dim, typename ProductType< Number1, Number2 >::type > cross_product_3d(const Tensor< 1, dim, Number1 > &src1, const Tensor< 1, dim, Number2 > &src2)
const unsigned int polynomial_degree
constexpr T pow(const T base, const int iexp)
std::unique_ptr< To > dynamic_unique_cast(std::unique_ptr< From > &&p)
void maybe_update_Jacobians(const CellSimilarity::Similarity cell_similarity, const typename ::QProjector< dim >::DataSetDescriptor data_set, const typename ::MappingQGeneric< dim, spacedim >::InternalData &data)
const std::vector< Polynomials::Polynomial< double > > polynomials_1d
QGaussLobatto< 1 > line_support_points
static ::ExceptionBase & ExcMessage(std::string arg1)
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_face_data(const UpdateFlags flags, const hp::QCollection< dim - 1 > &quadrature) const override
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
virtual void transform_points_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const ArrayView< const Point< spacedim >> &real_points, const ArrayView< Point< dim >> &unit_points) const override
void compute_shape_function_values(const std::vector< Point< dim >> &unit_points)
void transform_differential_forms(const ArrayView< const DerivativeForm< rank, dim, spacedim >> &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank+1, spacedim >> &output)
std::vector< std::vector< Tensor< 1, spacedim > > > aux
#define Assert(cond, exc)
const std::vector< Point< dim > > unit_cell_support_points
void evaluate(const Point< dim > &unit_point, std::vector< double > &values, std::vector< Tensor< 1, dim >> &grads, std::vector< Tensor< 2, dim >> &grad_grads, std::vector< Tensor< 3, dim >> &third_derivatives, std::vector< Tensor< 4, dim >> &fourth_derivatives) const override
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
virtual void transform(const ArrayView< const Tensor< 1, dim >> &input, const MappingKind kind, const typename Mapping< dim, spacedim >::InternalDataBase &internal, const ArrayView< Tensor< 1, spacedim >> &output) const override
Abstract base class for mapping classes.
ArrayView< typename std::remove_reference< typename std::iterator_traits< Iterator >::reference >::type, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
unsigned int size() const
#define DEAL_II_NAMESPACE_CLOSE
std::vector< Point< spacedim > > mapping_support_points
std::vector< Tensor< 3, dim > > shape_third_derivatives
VectorType::value_type * end(VectorType &V)
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_data(const UpdateFlags, const Quadrature< dim > &quadrature) const override
void transform_hessians(const ArrayView< const Tensor< 3, dim >> &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< 3, spacedim >> &output)
static constexpr std::size_t size()
void initialize(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
std::vector< double > volume_elements
Gradient of volume element.
std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
const unsigned int n_shape_functions
virtual std::unique_ptr< typename Mapping< dim, spacedim >::InternalDataBase > get_subface_data(const UpdateFlags flags, const Quadrature< dim - 1 > &quadrature) const override
std::vector< Tensor< 1, dim > > shape_derivatives
const std::vector< Table< 2, double > > support_point_weights_perimeter_to_interior
unsigned int size() const
Point< dim, Number > compute(const Point< spacedim, Number > &p) const
Point< dim > transform_real_to_unit_cell_internal(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p, const Point< dim > &initial_p_unit) const
virtual void fill_fe_face_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const hp::QCollection< dim - 1 > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
unsigned int get_degree() const
virtual void get_new_points(const ArrayView< const Point< spacedim >> &surrounding_points, const Table< 2, double > &weights, ArrayView< Point< spacedim >> new_points) const
const double & shape(const unsigned int qpoint, const unsigned int shape_nr) const
std::array< std::vector< Tensor< 1, dim > >, GeometryInfo< dim >::faces_per_cell *(dim - 1)> unit_tangentials
std::vector< Point< dim > > unit_support_points(const std::vector< Point< 1 >> &line_support_points, const std::vector< unsigned int > &renumbering)
size_type size(const unsigned int i) const
const std::vector< Point< 1 > > line_support_points
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
std::pair< typename ProductTypeNoPoint< Number, Number2 >::type, Tensor< 1, dim, typename ProductTypeNoPoint< Number, Number2 >::type > > evaluate_tensor_product_value_and_gradient(const std::vector< Polynomials::Polynomial< double >> &poly, const std::vector< Number > &values, const Point< dim, Number2 > &p, const bool d_linear=false, const std::vector< unsigned int > &renumber={})
#define DEAL_II_NAMESPACE_OPEN
virtual bool preserves_vertex_locations() const override
VectorType::value_type * begin(VectorType &V)
const Tensor< 2, dim > & second_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
Triangulation< dim, spacedim >::cell_iterator cell_of_current_support_points
virtual std::size_t memory_consumption() const override
virtual std::vector< Point< spacedim > > compute_mapping_support_points(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const
virtual boost::container::small_vector< Point< spacedim >, GeometryInfo< dim >::vertices_per_cell > get_vertices(const typename Triangulation< dim, spacedim >::cell_iterator &cell) const
const std::vector< unsigned int > renumber_lexicographic_to_hierarchic
static ::ExceptionBase & ExcNotImplemented()
void maybe_update_jacobian_grads(const CellSimilarity::Similarity cell_similarity, const typename QProjector< dim >::DataSetDescriptor data_set, const typename ::MappingQGeneric< dim, spacedim >::InternalData &data, std::vector< DerivativeForm< 2, dim, spacedim >> &jacobian_grads)
std::vector< DerivativeForm< 1, dim, spacedim > > contravariant
std::vector< unsigned int > lexicographic_numbering
std::vector< Tensor< 4, dim > > shape_fourth_derivatives
void initialize_face(const UpdateFlags update_flags, const Quadrature< dim > &quadrature, const unsigned int n_original_q_points)
constexpr Tensor< 1, dim, Number > cross_product_2d(const Tensor< 1, dim, Number > &src)
std::vector< double > shape_values
virtual Point< dim > transform_real_to_unit_cell(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Point< spacedim > &p) const override
void transform_gradients(const ArrayView< const Tensor< rank, dim >> &input, const MappingKind mapping_kind, const typename Mapping< dim, spacedim >::InternalDataBase &mapping_data, const ArrayView< Tensor< rank, spacedim >> &output)
const Tensor< 4, dim > & fourth_derivative(const unsigned int qpoint, const unsigned int shape_nr) const
bool is_tensor_product() const
const Manifold< dim, spacedim > & get_manifold(const types::manifold_id number) const
virtual void fill_fe_subface_values(const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int subface_no, const Quadrature< dim - 1 > &quadrature, const typename Mapping< dim, spacedim >::InternalDataBase &internal_data, ::internal::FEValuesImplementation::MappingRelatedData< dim, spacedim > &output_data) const override
std::vector< Polynomial< double > > generate_complete_Lagrange_basis(const std::vector< Point< 1 >> &points)
Covariant transformation.
std::vector< DerivativeForm< 1, dim, spacedim > > covariant
internal::MatrixFreeFunctions::ShapeInfo< VectorizedArray< double > > shape_info
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
static ::ExceptionBase & ExcInternalError()
std::vector<::Table< 2, double > > compute_support_point_weights_perimeter_to_interior(const unsigned int polynomial_degree, const unsigned int dim)