16#ifndef dealii_geometry_info_h
17#define dealii_geometry_info_h
47 static constexpr std::array<unsigned int, 2>
53 static constexpr std::array<unsigned int, 2>
54 unit_normal_direction()
59 static constexpr std::array<int, 2>
60 unit_normal_orientation()
65 static constexpr std::array<Tensor<1, 1>, 2>
72 unit_tangential_vectors()
74 return {{{{}}, {{}}}};
77 static constexpr std::array<unsigned int, 2>
83 static constexpr std::array<unsigned int, 2>
92 return {{{{0}}, {{1}}}};
99 static constexpr std::array<unsigned int, 4>
102 return {{0, 1, 3, 2}};
105 static constexpr std::array<unsigned int, 4>
106 unit_normal_direction()
108 return {{0, 0, 1, 1}};
111 static constexpr std::array<int, 4>
112 unit_normal_orientation()
114 return {{-1, 1, -1, 1}};
117 static constexpr std::array<Tensor<1, 2>, 4>
127 unit_tangential_vectors()
135 static constexpr std::array<unsigned int, 4>
138 return {{1, 0, 3, 2}};
141 static constexpr std::array<unsigned int, 4>
144 return {{0, 2, 1, 3}};
150 return {{{{0, 2}}, {{1, 2}}, {{0, 3}}, {{1, 3}}}};
157 static constexpr std::array<unsigned int, 8>
160 return {{0, 4, 5, 1, 2, 6, 7, 3}};
163 static constexpr std::array<unsigned int, 6>
164 unit_normal_direction()
166 return {{0, 0, 1, 1, 2, 2}};
169 static constexpr std::array<int, 6>
170 unit_normal_orientation()
172 return {{-1, 1, -1, 1, -1, 1}};
175 static constexpr std::array<Tensor<1, 3>, 6>
187 unit_tangential_vectors()
197 static constexpr std::array<unsigned int, 6>
200 return {{1, 0, 3, 2, 5, 4}};
203 static constexpr std::array<unsigned int, 8>
206 return {{0, 4, 2, 6, 1, 5, 3, 7}};
212 return {{{{0, 2, 4}},
226 static constexpr std::array<unsigned int, 16>
247 static constexpr std::array<unsigned int, 8>
248 unit_normal_direction()
250 return {{0, 0, 1, 1, 2, 2, 3, 3}};
253 static constexpr std::array<int, 8>
254 unit_normal_orientation()
256 return {{-1, 1, -1, 1, -1, 1, -1, 1}};
259 static constexpr std::array<Tensor<1, 4>, 8>
273 unit_tangential_vectors()
301 static constexpr std::array<unsigned int, 8>
304 return {{1, 0, 3, 2, 5, 4, 7, 6}};
307 static constexpr std::array<unsigned int, 16>
463 operator unsigned int()
const;
676 cut_xy = cut_x | cut_y,
751 cut_xy = cut_x | cut_y,
759 cut_xz = cut_x | cut_z,
763 cut_yz = cut_y | cut_z,
767 cut_xyz = cut_x | cut_y | cut_z,
868 template <
class Archive>
878 <<
"The refinement flags given (" <<
arg1
879 <<
") contain set bits that do not "
880 <<
"make sense for the space dimension of the object to which they are applied.");
887 std::uint8_t
value : (dim > 0 ? dim : 1);
1184 operator std::uint8_t()
const;
1189 static constexpr std::size_t
1198 <<
"The subface case given (" <<
arg1 <<
") does not make sense "
1199 <<
"for the space dimension of the object to which they are applied.");
1206 std::uint8_t
value : (dim == 3 ? 4 : 1);
1270 static std::array<unsigned int, 0>
1313 static std::array<unsigned int, vertices_per_cell>
1341 const unsigned int vertex,
1342 const bool face_orientation =
true,
1343 const bool face_flip =
false,
1344 const bool face_rotation =
false);
1362 const unsigned int line,
1363 const bool face_orientation =
true,
1364 const bool face_flip =
false,
1365 const bool face_rotation =
false);
1417 static const std::array<unsigned int, vertices_per_cell>
ucd_to_deal;
1432 static const std::array<unsigned int, vertices_per_cell>
dx_to_deal;
2102 static constexpr std::array<unsigned int, vertices_per_cell>
ucd_to_deal =
2103 internal::GeometryInfoHelper::Initializers<dim>::ucd_to_deal();
2118 static constexpr std::array<unsigned int, vertices_per_cell>
dx_to_deal =
2119 internal::GeometryInfoHelper::Initializers<dim>::dx_to_deal();
2133 internal::GeometryInfoHelper::Initializers<dim>::vertex_to_face();
2170 const bool face_orientation =
true,
2171 const bool face_flip =
false,
2172 const bool face_rotation =
false);
2183 const bool face_orientation =
true,
2184 const bool face_flip =
false,
2185 const bool face_rotation =
false);
2250 const unsigned int face,
2251 const unsigned int subface,
2252 const bool face_orientation =
true,
2253 const bool face_flip =
false,
2254 const bool face_rotation =
false,
2296 const unsigned int vertex,
2297 const bool face_orientation =
true,
2298 const bool face_flip =
false,
2299 const bool face_rotation =
false);
2314 const unsigned int line,
2315 const bool face_orientation =
true,
2316 const bool face_flip =
false,
2317 const bool face_rotation =
false);
2330 const bool face_orientation =
true,
2331 const bool face_flip =
false,
2332 const bool face_rotation =
false);
2345 const bool face_orientation =
true,
2346 const bool face_flip =
false,
2347 const bool face_rotation =
false);
2360 const bool face_orientation =
true,
2361 const bool face_flip =
false,
2362 const bool face_rotation =
false);
2371 const bool line_orientation =
true);
2380 static std::array<unsigned int, 2>
2390 static std::array<unsigned int, 2>
2400 static std::array<unsigned int, 2>
2414 const bool face_orientation =
true,
2415 const bool face_flip =
false,
2416 const bool face_rotation =
false);
2447 const unsigned int child_index,
2458 const unsigned int child_index,
2487 template <
typename Number =
double>
2564 template <
int spacedim>
2567#ifndef DEAL_II_CXX14_CONSTEXPR_BUG
2583 static constexpr std::array<unsigned int, faces_per_cell>
2585 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_direction();
2604 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_orientation();
2618 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_vector();
2643 internal::GeometryInfoHelper::Initializers<dim>::opposite_face();
2651 <<
"The coordinates must satisfy 0 <= x_i <= 1, "
2652 <<
"but here we have x_i=" <<
arg1);
2661 <<
"RefinementCase<dim> " <<
arg1 <<
": face " <<
arg2
2676 const unsigned int i);
2680 const unsigned int i);
2684 const unsigned int i);
2702inline GeometryPrimitive::operator
unsigned int()
const
2704 return static_cast<unsigned int>(object);
2719 inline SubfaceCase<dim>::operator std::uint8_t()
const
2733 return static_cast<std::uint8_t
>(-1);
2786 :
value(refinement_case)
2792 Assert((refinement_case &
2795 ExcInvalidRefinementCase(refinement_case));
2802 :
value(refinement_case)
2808 Assert((refinement_case &
2811 ExcInvalidRefinementCase(refinement_case));
2862template <
class Archive>
2881 return Point<1>(
static_cast<double>(vertex));
2892 return {
static_cast<double>(vertex % 2),
static_cast<double>(vertex / 2)};
2903 return {
static_cast<double>(vertex % 2),
2904 static_cast<double>(vertex / 2 % 2),
2905 static_cast<double>(vertex / 4)};
2910inline std::array<unsigned int, 0>
2918inline std::array<unsigned int, 1>
2930 return {0U, faces_per_cell};
2939 return {0U, vertices_per_cell};
2959 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
2961 return (p[0] <= 0.5 ? 0 : 1);
2970 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
2971 Assert((p[1] >= 0) && (p[1] <= 1), ExcInvalidCoordinate(p[1]));
2973 return (p[0] <= 0.5 ? (p[1] <= 0.5 ? 0 : 2) : (p[1] <= 0.5 ? 1 : 3));
2982 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
2983 Assert((p[1] >= 0) && (p[1] <= 1), ExcInvalidCoordinate(p[1]));
2984 Assert((p[2] >= 0) && (p[2] <= 1), ExcInvalidCoordinate(p[2]));
2986 return (p[0] <= 0.5 ?
2987 (p[1] <= 0.5 ? (p[2] <= 0.5 ? 0 : 4) : (p[2] <= 0.5 ? 2 : 6)) :
2988 (p[1] <= 0.5 ? (p[2] <= 0.5 ? 1 : 5) : (p[2] <= 0.5 ? 3 : 7)));
3006 const unsigned int child_index,
3014 return Point<1>(p * 2.0 - unit_cell_vertex(child_index));
3022 const unsigned int child_index,
3033 if (child_index == 1)
3038 if (child_index == 1)
3043 point -= unit_cell_vertex(child_index);
3057 const unsigned int child_index,
3073 if (child_index == 1)
3078 if (child_index == 1)
3083 if (child_index == 1)
3089 if (child_index % 2 == 1)
3091 if (child_index / 2 == 1)
3101 if (child_index / 2 == 1)
3103 if (child_index % 2 == 1)
3109 if (child_index % 2 == 1)
3111 if (child_index / 2 == 1)
3116 point -= unit_cell_vertex(child_index);
3131 const unsigned int ,
3144 const unsigned int child_index,
3152 return (p + unit_cell_vertex(child_index)) * 0.5;
3160 const unsigned int child_index,
3175 if (child_index == 1)
3180 if (child_index == 1)
3185 if (child_index == 1)
3190 if (child_index % 2 == 1)
3192 if (child_index / 2 == 1)
3202 if (child_index / 2 == 1)
3204 if (child_index % 2 == 1)
3210 if (child_index % 2 == 1)
3212 if (child_index / 2 == 1)
3218 point += unit_cell_vertex(child_index);
3233 const unsigned int child_index,
3242 if (child_index == 1)
3247 if (child_index == 1)
3252 point += unit_cell_vertex(child_index);
3268 const unsigned int ,
3289 return (p[0] >= 0.) && (p[0] <= 1.);
3298 return (p[0] >= 0.) && (p[0] <= 1.) && (p[1] >= 0.) && (p[1] <= 1.);
3307 return (p[0] >= 0.) && (p[0] <= 1.) && (p[1] >= 0.) && (p[1] <= 1.) &&
3308 (p[2] >= 0.) && (p[2] <= 1.);
3325 return (p[0] >= -eps) && (p[0] <= 1. +
eps);
3334 const double l = -
eps,
u = 1 +
eps;
3335 return (p[0] >= l) && (p[0] <=
u) && (p[1] >= l) && (p[1] <=
u);
3344 const double l = -
eps,
u = 1.0 +
eps;
3345 return (p[0] >= l) && (p[0] <=
u) && (p[1] >= l) && (p[1] <=
u) &&
3346 (p[2] >= l) && (p[2] <=
u);
3354 const unsigned int vertex)
3367 const unsigned int vertex)
3369 constexpr unsigned int cell_vertices[4][2] = {{0, 2}, {1, 3}, {0, 1}, {2, 3}};
3378 const unsigned int vertex)
3383 constexpr unsigned vertices[lines_per_cell][2] = {{0, 2},
3411 const bool face_orientation,
3412 const bool face_flip,
3413 const bool face_rotation)
3479 0, 2, 2, 4, 2, 4, 4, 8};
3516 0, 2, 3, 3, 4, 2, 3, 3, 4, 4};
3517 return nsubs[subface_case];
3546 switch (subface_case)
3586 switch (subface_case)
3673 const unsigned int dim = 2;
3704 const bool face_orientation,
3706 const bool face_rotation)
3708 const unsigned int dim = 3;
3795 const unsigned int dim = 1;
3822 const unsigned int dim = 3;
3843 const unsigned int direction[lines_per_cell] = {
3844 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2};
3876 const unsigned int dim = 1;
3892 const unsigned int dim = 2;
3910 const bool face_orientation,
3912 const bool face_rotation)
3914 const unsigned int dim = 3;
3938 (face_orientation == face_rotation) ?
flip[face_refinement_case] :
3939 face_refinement_case;
3990 const unsigned int dim = 2;
4004 const unsigned int dim = 3;
4023 const bool face_orientation,
4024 const bool face_flip,
4025 const bool face_rotation)
4091 const bool face_orientation,
4092 const bool face_flip,
4093 const bool face_rotation)
4158 const bool line_orientation)
4160 return line_orientation ? vertex : (1 - vertex);
4177inline std::array<unsigned int, 2>
4179 const unsigned int vertex)
4181 return {{vertex % 2, vertex / 2}};
4187inline std::array<unsigned int, 2>
4189 const unsigned int vertex)
4199inline std::array<unsigned int, 2>
4229inline std::array<unsigned int, 2>
4240inline std::array<unsigned int, 2>
4242 const unsigned int vertex)
4249 return {{4 + vertex / 4, vertex % 4}};
4255inline std::array<unsigned int, 2>
4257 const unsigned int vertex)
4269 const bool face_orientation,
4270 const bool face_flip,
4271 const bool face_rotation)
4336 const unsigned int face,
4337 const unsigned int subface,
4355 const unsigned int face,
4356 const unsigned int subface,
4358 const bool face_flip,
4374 [max_children_per_face] = {
4377 {{0, 0}, {1, 1}, {0, 1}, {0, 1}},
4378 {{0, 1}, {0, 1}, {0, 0}, {1, 1}},
4379 {{0, 2}, {1, 3}, {0, 1}, {2, 3}}
4383 {{0, 0}, {1, 1}, {1, 0}, {1, 0}},
4384 {{1, 0}, {1, 0}, {0, 0}, {1, 1}},
4385 {{2, 0}, {3, 1}, {1, 0}, {3, 2}}
4396 const unsigned int face,
4397 const unsigned int subface,
4398 const bool face_orientation,
4399 const bool face_flip,
4400 const bool face_rotation,
4403 const unsigned int dim = 3;
4408 if (!(subface == 0 &&
4461 {{{{0,
e,
e,
e}, {0,
e,
e,
e}}, {{0,
e,
e,
e}, {0,
e,
e,
e}}},
4462 {{{0,
e,
e,
e}, {0,
e,
e,
e}}, {{0,
e,
e,
e}, {0,
e,
e,
e}}}},
4476 {{{{0, 1,
e,
e}, {0, 1,
e,
e}}, {{1, 0,
e,
e}, {1, 0,
e,
e}}},
4477 {{{0, 1,
e,
e}, {0, 1,
e,
e}}, {{1, 0,
e,
e}, {1, 0,
e,
e}}}},
4480 {{{{0, 1,
e,
e}, {1, 0,
e,
e}}, {{1, 0,
e,
e}, {0, 1,
e,
e}}},
4481 {{{0, 1,
e,
e}, {1, 0,
e,
e}}, {{1, 0,
e,
e}, {0, 1,
e,
e}}}},
4516 [max_children_per_face] = {
4579 face_refinement_case(
ref_case, face))
4605 ExcMessage(
"The face RefineCase is too coarse "
4606 "for the given cell RefineCase."));
4633 const unsigned int line,
4651 const unsigned int line,
4652 const bool face_orientation,
4653 const bool face_flip,
4654 const bool face_rotation)
4659 const unsigned lines[faces_per_cell][lines_per_face] = {
4666 return lines[face][real_to_standard_face_line(
4667 line, face_orientation, face_flip, face_rotation)];
4702 const unsigned int vertex,
4703 const bool face_orientation,
4704 const bool face_flip,
4705 const bool face_rotation)
4731template <
typename Number>
4736 for (
unsigned int i = 0; i < dim; ++i)
4750 for (
unsigned int i = 0; i < dim; ++i)
4764 const unsigned int i)
4772 const double x =
xi[0];
4785 const double x =
xi[0];
4786 const double y =
xi[1];
4790 return (1 -
x) * (1 -
y);
4803 const double x =
xi[0];
4804 const double y =
xi[1];
4805 const double z =
xi[2];
4809 return (1 -
x) * (1 -
y) * (1 - z);
4811 return x * (1 -
y) * (1 - z);
4813 return (1 -
x) *
y * (1 - z);
4815 return x *
y * (1 - z);
4817 return (1 -
x) * (1 -
y) * z;
4819 return x * (1 -
y) * z;
4821 return (1 -
x) *
y * z;
4839 const unsigned int i)
4859 const unsigned int i)
4863 const double x =
xi[0];
4864 const double y =
xi[1];
4884 const unsigned int i)
4888 const double x =
xi[0];
4889 const double y =
xi[1];
4890 const double z =
xi[2];
4896 -(1 -
x) * (1 -
y));
4898 return Point<3>((1 -
y) * (1 - z), -
x * (1 - z), -
x * (1 -
y));
4900 return Point<3>(-
y * (1 - z), (1 -
x) * (1 - z), -(1 -
x) *
y);
4904 return Point<3>(-(1 -
y) * z, -(1 -
x) * z, (1 -
x) * (1 -
y));
4946 result[0] = derivative[0][1];
4947 result[1] = -derivative[0][0];
4970 for (
unsigned int i = 0; i < dim; ++i)
4971 jacobian[i] = derivative[i];
4980template <
int spacedim>
4983# ifndef DEAL_II_CXX14_CONSTEXPR_BUG
4985 Tensor<spacedim - dim, spacedim> (&
forms)[vertices_per_cell])
5019 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
5023 for (
unsigned int j = 0;
j < vertices_per_cell; ++
j)
5026 d_linear_shape_function_gradient(unit_cell_vertex(i),
j);
5027 for (
unsigned int l = 0;
l < dim; ++
l)
GeometryPrimitive(const unsigned int object_dimension)
GeometryPrimitive(const Object object)
RefinementCase operator|(const RefinementCase &r) const
static std::size_t memory_consumption()
RefinementCase operator~() const
RefinementCase operator&(const RefinementCase &r) const
RefinementCase(const typename RefinementPossibilities< dim >::Possibilities refinement_case)
static RefinementCase cut_axis(const unsigned int i)
void serialize(Archive &ar, const unsigned int version)
RefinementCase(const std::uint8_t refinement_case)
static constexpr std::size_t memory_consumption()
SubfaceCase(const typename SubfacePossibilities< dim >::Possibilities subface_possibility)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
static ::ExceptionBase & ExcInvalidCoordinate(double arg1)
static ::ExceptionBase & ExcInvalidSubface(int arg1, int arg2, int arg3)
static ::ExceptionBase & ExcInvalidRefinementCase(int arg1)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
#define DeclException3(Exception3, type1, type2, type3, outsequence)
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcInvalidSubfaceCase(int arg1)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
static const unsigned int invalid_unsigned_int
boost::integer_range< IncrementableType > iota_view
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
#define DEAL_II_HOST_DEVICE
static unsigned int n_children(const RefinementCase< 0 > &refinement_case)
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)
static std::array< unsigned int, 0 > face_indices()
static std::array< unsigned int, vertices_per_cell > vertex_indices()
static unsigned int face_to_cell_lines(const unsigned int face, const unsigned int line, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static unsigned int child_cell_from_point(const Point< dim > &p)
static unsigned int standard_to_real_line_vertex(const unsigned int vertex, const bool line_orientation=true)
static constexpr std::array< unsigned int, vertices_per_cell > ucd_to_deal
static constexpr ndarray< Tensor< 1, dim >, faces_per_cell, dim - 1 > unit_tangential_vectors
static bool is_inside_unit_cell(const Point< dim > &p, const double eps)
static double distance_to_unit_cell(const Point< dim > &p)
static unsigned int child_cell_on_face(const RefinementCase< dim > &ref_case, const unsigned int face, const unsigned int subface, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false, const RefinementCase< dim - 1 > &face_refinement_case=RefinementCase< dim - 1 >::isotropic_refinement)
static constexpr unsigned int quads_per_face
static RefinementCase< dim - 1 > face_refinement_case(const RefinementCase< dim > &cell_refinement_case, const unsigned int face_no, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static unsigned int standard_to_real_face_vertex(const unsigned int vertex, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static RefinementCase< dim > min_cell_refinement_case_for_line_refinement(const unsigned int line_no)
static constexpr std::array< unsigned int, faces_per_cell > opposite_face
static constexpr unsigned int max_children_per_face
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)
static constexpr unsigned int vertices_per_cell
static constexpr std::array< unsigned int, vertices_per_cell > dx_to_deal
static constexpr unsigned int lines_per_cell
static constexpr std::array< unsigned int, faces_per_cell > unit_normal_direction
static std::array< unsigned int, 2 > standard_hex_line_to_quad_line_index(const unsigned int line)
static constexpr unsigned int faces_per_cell
static unsigned int standard_to_real_face_line(const unsigned int line, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > face_indices()
static double subface_ratio(const internal::SubfaceCase< dim > &subface_case, const unsigned int subface_no)
static constexpr unsigned int hexes_per_cell
static Point< dim, Number > project_to_unit_cell(const Point< dim, Number > &p)
static RefinementCase< 1 > line_refinement_case(const RefinementCase< dim > &cell_refinement_case, const unsigned int line_no)
static std::array< unsigned int, 2 > standard_hex_vertex_to_quad_vertex_index(const unsigned int vertex)
static std::array< unsigned int, 2 > standard_quad_vertex_to_line_vertex_index(const unsigned int vertex)
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
static constexpr std::array< Tensor< 1, dim >, faces_per_cell > unit_normal_vector
static constexpr unsigned int vertices_per_face
static unsigned int real_to_standard_face_line(const unsigned int line, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static unsigned int line_to_cell_vertices(const unsigned int line, const unsigned int vertex)
static std_cxx20::ranges::iota_view< unsigned int, unsigned int > vertex_indices()
static bool is_inside_unit_cell(const Point< dim > &p)
static RefinementCase< dim > min_cell_refinement_case_for_face_refinement(const RefinementCase< dim - 1 > &face_refinement_case, const unsigned int face_no, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static unsigned int n_children(const RefinementCase< dim > &refinement_case)
static unsigned int real_to_standard_face_vertex(const unsigned int vertex, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static unsigned int face_to_cell_lines(const unsigned int face, const unsigned int line, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
static Point< dim > cell_to_child_coordinates(const Point< dim > &p, const unsigned int child_index, const RefinementCase< dim > refine_case=RefinementCase< dim >::isotropic_refinement)
static constexpr ndarray< unsigned int, vertices_per_cell, dim > vertex_to_face
static Tensor< 1, dim > d_linear_shape_function_gradient(const Point< dim > &xi, const unsigned int i)
static void alternating_form_at_vertices(const Point< spacedim >(&vertices)[vertices_per_cell], Tensor< spacedim - dim, spacedim >(&forms)[vertices_per_cell])
static Point< dim > unit_cell_vertex(const unsigned int vertex)
static constexpr std::array< int, faces_per_cell > unit_normal_orientation
static constexpr unsigned int quads_per_cell
static Point< dim > child_to_cell_coordinates(const Point< dim > &p, const unsigned int child_index, const RefinementCase< dim > refine_case=RefinementCase< dim >::isotropic_refinement)
static constexpr unsigned int max_children_per_cell
static unsigned int n_subfaces(const internal::SubfaceCase< dim > &subface_case)
static constexpr unsigned int lines_per_face
DEAL_II_HOST constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)