15#ifndef dealii_geometry_info_h
16#define dealii_geometry_info_h
36 namespace GeometryInfoHelper
44 struct Initializers<1>
46 static constexpr std::array<unsigned int, 2>
52 static constexpr std::array<unsigned int, 2>
53 unit_normal_direction()
58 static constexpr std::array<int, 2>
59 unit_normal_orientation()
64 static constexpr std::array<Tensor<1, 1>, 2>
70 static constexpr ::ndarray<Tensor<1, 1>, 2, 0>
71 unit_tangential_vectors()
73 return {{{{}}, {{}}}};
76 static constexpr std::array<unsigned int, 2>
82 static constexpr std::array<unsigned int, 2>
88 static constexpr ::ndarray<unsigned int, 2, 1>
91 return {{{{0}}, {{1}}}};
96 struct Initializers<2>
98 static constexpr std::array<unsigned int, 4>
101 return {{0, 1, 3, 2}};
104 static constexpr std::array<unsigned int, 4>
105 unit_normal_direction()
107 return {{0, 0, 1, 1}};
110 static constexpr std::array<int, 4>
111 unit_normal_orientation()
113 return {{-1, 1, -1, 1}};
116 static constexpr std::array<Tensor<1, 2>, 4>
125 static constexpr ::ndarray<Tensor<1, 2>, 4, 1>
126 unit_tangential_vectors()
134 static constexpr std::array<unsigned int, 4>
137 return {{1, 0, 3, 2}};
140 static constexpr std::array<unsigned int, 4>
143 return {{0, 2, 1, 3}};
146 static constexpr ::ndarray<unsigned int, 4, 2>
149 return {{{{0, 2}}, {{1, 2}}, {{0, 3}}, {{1, 3}}}};
154 struct Initializers<3>
156 static constexpr std::array<unsigned int, 8>
159 return {{0, 4, 5, 1, 2, 6, 7, 3}};
162 static constexpr std::array<unsigned int, 6>
163 unit_normal_direction()
165 return {{0, 0, 1, 1, 2, 2}};
168 static constexpr std::array<int, 6>
169 unit_normal_orientation()
171 return {{-1, 1, -1, 1, -1, 1}};
174 static constexpr std::array<Tensor<1, 3>, 6>
185 static constexpr ::ndarray<Tensor<1, 3>, 6, 2>
186 unit_tangential_vectors()
196 static constexpr std::array<unsigned int, 6>
199 return {{1, 0, 3, 2, 5, 4}};
202 static constexpr std::array<unsigned int, 8>
205 return {{0, 4, 2, 6, 1, 5, 3, 7}};
208 static constexpr ::ndarray<unsigned int, 8, 3>
211 return {{{{0, 2, 4}},
223 struct Initializers<4>
225 static constexpr std::array<unsigned int, 16>
246 static constexpr std::array<unsigned int, 8>
247 unit_normal_direction()
249 return {{0, 0, 1, 1, 2, 2, 3, 3}};
252 static constexpr std::array<int, 8>
253 unit_normal_orientation()
255 return {{-1, 1, -1, 1, -1, 1, -1, 1}};
258 static constexpr std::array<Tensor<1, 4>, 8>
271 static constexpr ::ndarray<Tensor<1, 4>, 8, 3>
272 unit_tangential_vectors()
300 static constexpr std::array<unsigned int, 8>
303 return {{1, 0, 3, 2, 5, 4, 7, 6}};
306 static constexpr std::array<unsigned int, 16>
327 static constexpr ::ndarray<unsigned int, 16, 4>
462 operator unsigned int()
const;
675 cut_xy = cut_x | cut_y,
750 cut_xy = cut_x | cut_y,
758 cut_xz = cut_x | cut_z,
762 cut_yz = cut_y | cut_z,
766 cut_xyz = cut_x | cut_y | cut_z,
883 template <
class Archive>
893 <<
"The refinement flags given (" << arg1
894 <<
") contain set bits that do not "
895 <<
"make sense for the space dimension of the object to which they are applied.");
902 std::uint8_t
value : (dim > 0 ? dim : 1);
1187 subface_possibility);
1200 operator std::uint8_t()
const;
1205 static constexpr std::size_t
1214 <<
"The subface case given (" << arg1 <<
") does not make sense "
1215 <<
"for the space dimension of the object to which they are applied.");
1222 std::uint8_t
value : (dim == 3 ? 4 : 1);
1286 static std::array<unsigned int, 0>
1329 static std::array<unsigned int, vertices_per_cell>
1357 const unsigned int vertex,
1358 const bool face_orientation =
true,
1359 const bool face_flip =
false,
1360 const bool face_rotation =
false);
1378 const unsigned int line,
1379 const bool face_orientation =
true,
1380 const bool face_flip =
false,
1381 const bool face_rotation =
false);
1433 static const std::array<unsigned int, vertices_per_cell>
ucd_to_deal;
1448 static const std::array<unsigned int, vertices_per_cell>
dx_to_deal;
2119 static constexpr std::array<unsigned int, vertices_per_cell>
ucd_to_deal =
2120 internal::GeometryInfoHelper::Initializers<dim>::ucd_to_deal();
2135 static constexpr std::array<unsigned int, vertices_per_cell>
dx_to_deal =
2136 internal::GeometryInfoHelper::Initializers<dim>::dx_to_deal();
2150 internal::GeometryInfoHelper::Initializers<dim>::vertex_to_face();
2177 const unsigned int subface_no);
2186 const unsigned int face_no,
2187 const bool face_orientation =
true,
2188 const bool face_flip =
false,
2189 const bool face_rotation =
false);
2199 const unsigned int face_no,
2200 const bool face_orientation =
true,
2201 const bool face_flip =
false,
2202 const bool face_rotation =
false);
2210 const unsigned int line_no);
2267 const unsigned int face,
2268 const unsigned int subface,
2269 const bool face_orientation =
true,
2270 const bool face_flip =
false,
2271 const bool face_rotation =
false,
2313 const unsigned int vertex,
2314 const bool face_orientation =
true,
2315 const bool face_flip =
false,
2316 const bool face_rotation =
false);
2331 const unsigned int line,
2332 const bool face_orientation =
true,
2333 const bool face_flip =
false,
2334 const bool face_rotation =
false);
2347 const bool face_orientation =
true,
2348 const bool face_flip =
false,
2349 const bool face_rotation =
false);
2362 const bool face_orientation =
true,
2363 const bool face_flip =
false,
2364 const bool face_rotation =
false);
2377 const bool face_orientation =
true,
2378 const bool face_flip =
false,
2379 const bool face_rotation =
false);
2388 const bool line_orientation =
true);
2397 static std::array<unsigned int, 2>
2407 static std::array<unsigned int, 2>
2417 static std::array<unsigned int, 2>
2431 const bool face_orientation =
true,
2432 const bool face_flip =
false,
2433 const bool face_rotation =
false);
2464 const unsigned int child_index,
2475 const unsigned int child_index,
2504 template <
typename Number =
double>
2581 template <
int spacedim>
2584#ifndef DEAL_II_CXX14_CONSTEXPR_BUG
2600 static constexpr std::array<unsigned int, faces_per_cell>
2602 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_direction();
2621 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_orientation();
2635 internal::GeometryInfoHelper::Initializers<dim>::unit_normal_vector();
2660 internal::GeometryInfoHelper::Initializers<dim>::opposite_face();
2668 <<
"The coordinates must satisfy 0 <= x_i <= 1, "
2669 <<
"but here we have x_i=" << arg1);
2678 <<
"RefinementCase<dim> " << arg1 <<
": face " << arg2
2679 <<
" has no subface " << arg3);
2693 const unsigned int i);
2697 const unsigned int i);
2701 const unsigned int i);
2715 : object(static_cast<Object>(object_dimension))
2719inline GeometryPrimitive::operator
unsigned int()
const
2721 return static_cast<unsigned int>(object);
2731 :
value(subface_possibility)
2736 inline SubfaceCase<dim>::operator std::uint8_t()
const
2750 return static_cast<std::uint8_t
>(-1);
2794inline std::array<RefinementCase<1>, 2>
2804inline std::array<RefinementCase<2>, 4>
2816inline std::array<RefinementCase<3>, 8>
2841 :
value(refinement_case)
2847 Assert((refinement_case &
2850 ExcInvalidRefinementCase(refinement_case));
2857 :
value(refinement_case)
2863 Assert((refinement_case &
2866 ExcInvalidRefinementCase(refinement_case));
2917template <
class Archive>
2923 std::uint8_t uchar_value =
value;
2925 value = uchar_value;
2936 return Point<1>(
static_cast<double>(vertex));
2947 return {
static_cast<double>(vertex % 2),
static_cast<double>(vertex / 2)};
2958 return {
static_cast<double>(vertex % 2),
2959 static_cast<double>(vertex / 2 % 2),
2960 static_cast<double>(vertex / 4)};
2965inline std::array<unsigned int, 0>
2973inline std::array<unsigned int, 1>
2985 return {0U, faces_per_cell};
2994 return {0U, vertices_per_cell};
3014 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
3016 return (p[0] <= 0.5 ? 0 : 1);
3025 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
3026 Assert((p[1] >= 0) && (p[1] <= 1), ExcInvalidCoordinate(p[1]));
3028 return (p[0] <= 0.5 ? (p[1] <= 0.5 ? 0 : 2) : (
p[1] <= 0.5 ? 1 : 3));
3037 Assert((p[0] >= 0) && (p[0] <= 1), ExcInvalidCoordinate(p[0]));
3038 Assert((p[1] >= 0) && (p[1] <= 1), ExcInvalidCoordinate(p[1]));
3039 Assert((p[2] >= 0) && (p[2] <= 1), ExcInvalidCoordinate(p[2]));
3041 return (p[0] <= 0.5 ?
3042 (p[1] <= 0.5 ? (p[2] <= 0.5 ? 0 : 4) : (
p[2] <= 0.5 ? 2 : 6)) :
3043 (
p[1] <= 0.5 ? (
p[2] <= 0.5 ? 1 : 5) : (
p[2] <= 0.5 ? 3 : 7)));
3061 const unsigned int child_index,
3069 return Point<1>(p * 2.0 - unit_cell_vertex(child_index));
3077 const unsigned int child_index,
3084 switch (refine_case)
3088 if (child_index == 1)
3093 if (child_index == 1)
3098 point -= unit_cell_vertex(child_index);
3112 const unsigned int child_index,
3124 switch (refine_case)
3128 if (child_index == 1)
3133 if (child_index == 1)
3138 if (child_index == 1)
3144 if (child_index % 2 == 1)
3146 if (child_index / 2 == 1)
3156 if (child_index / 2 == 1)
3158 if (child_index % 2 == 1)
3164 if (child_index % 2 == 1)
3166 if (child_index / 2 == 1)
3171 point -= unit_cell_vertex(child_index);
3186 const unsigned int ,
3199 const unsigned int child_index,
3207 return (p + unit_cell_vertex(child_index)) * 0.5;
3215 const unsigned int child_index,
3227 switch (refine_case)
3230 if (child_index == 1)
3235 if (child_index == 1)
3240 if (child_index == 1)
3245 if (child_index % 2 == 1)
3247 if (child_index / 2 == 1)
3257 if (child_index / 2 == 1)
3259 if (child_index % 2 == 1)
3265 if (child_index % 2 == 1)
3267 if (child_index / 2 == 1)
3273 point += unit_cell_vertex(child_index);
3288 const unsigned int child_index,
3294 switch (refine_case)
3297 if (child_index == 1)
3302 if (child_index == 1)
3307 point += unit_cell_vertex(child_index);
3323 const unsigned int ,
3344 return (p[0] >= 0.) && (
p[0] <= 1.);
3353 return (p[0] >= 0.) && (
p[0] <= 1.) && (p[1] >= 0.) && (
p[1] <= 1.);
3362 return (p[0] >= 0.) && (
p[0] <= 1.) && (p[1] >= 0.) && (
p[1] <= 1.) &&
3363 (p[2] >= 0.) && (
p[2] <= 1.);
3380 return (p[0] >= -eps) && (
p[0] <= 1. +
eps);
3389 const double l = -
eps, u = 1 +
eps;
3390 return (p[0] >= l) && (
p[0] <= u) && (p[1] >= l) && (
p[1] <= u);
3399 const double l = -
eps, u = 1.0 +
eps;
3400 return (p[0] >= l) && (
p[0] <= u) && (p[1] >= l) && (
p[1] <= u) &&
3401 (p[2] >= l) && (
p[2] <= u);
3409 const unsigned int vertex)
3422 const unsigned int vertex)
3424 constexpr unsigned int cell_vertices[4][2] = {{0, 2}, {1, 3}, {0, 1}, {2, 3}};
3425 return cell_vertices[line][vertex];
3433 const unsigned int vertex)
3438 constexpr unsigned vertices[lines_per_cell][2] = {{0, 2},
3466 const bool face_orientation,
3467 const bool face_flip,
3468 const bool face_rotation)
3490 constexpr unsigned int vertex_translation[4][2][2][2] = {
3512 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
3534 0, 2, 2, 4, 2, 4, 4, 8};
3536 return n_children[ref_case];
3571 0, 2, 3, 3, 4, 2, 3, 3, 4, 4};
3572 return nsubs[subface_case];
3601 switch (subface_case)
3638 const unsigned int subface_no)
3641 switch (subface_case)
3676 if (subface_no == 0)
3723 const unsigned int face_no,
3728 const unsigned int dim = 2;
3750 return ref_cases[cell_refinement_case][face_no / 2];
3758 const unsigned int face_no,
3759 const bool face_orientation,
3761 const bool face_rotation)
3763 const unsigned int dim = 3;
3809 ref_cases[cell_refinement_case][face_no / 2];
3829 return (face_orientation == face_rotation) ? flip[ref_case] : ref_case;
3847 const unsigned int line_no)
3850 const unsigned int dim = 1;
3856 return cell_refinement_case;
3864 const unsigned int line_no)
3867 return face_refinement_case(cell_refinement_case, line_no);
3875 const unsigned int line_no)
3877 const unsigned int dim = 3;
3898 const unsigned int direction[lines_per_cell] = {
3899 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2};
3901 return ((cell_refinement_case & cut_one[direction[line_no]]) ?
3931 const unsigned int dim = 1;
3942 const unsigned int face_no,
3947 const unsigned int dim = 2;
3964 const unsigned int face_no,
3965 const bool face_orientation,
3967 const bool face_rotation)
3969 const unsigned int dim = 3;
3993 (face_orientation == face_rotation) ? flip[face_refinement_case] :
3994 face_refinement_case;
4013 return face_to_cell[face_no / 2][std_face_ref];
4031 const unsigned int line_no)
4043 const unsigned int line_no)
4045 const unsigned int dim = 2;
4057 const unsigned int line_no)
4059 const unsigned int dim = 3;
4070 return ref_cases[line_no / 2];
4078 const bool face_orientation,
4079 const bool face_flip,
4080 const bool face_rotation)
4102 const unsigned int vertex_translation[4][2][2][2] = {
4124 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
4146 const bool face_orientation,
4147 const bool face_flip,
4148 const bool face_rotation)
4170 const unsigned int line_translation[4][2][2][2] = {
4192 return line_translation[line][face_orientation][face_flip][face_rotation];
4213 const bool line_orientation)
4215 return line_orientation ? vertex : (1 - vertex);
4232inline std::array<unsigned int, 2>
4234 const unsigned int vertex)
4236 return {{vertex % 2, vertex / 2}};
4242inline std::array<unsigned int, 2>
4244 const unsigned int vertex)
4254inline std::array<unsigned int, 2>
4278 return {{lookup_table[i][0], lookup_table[i][1]}};
4284inline std::array<unsigned int, 2>
4295inline std::array<unsigned int, 2>
4297 const unsigned int vertex)
4304 return {{4 + vertex / 4, vertex % 4}};
4310inline std::array<unsigned int, 2>
4312 const unsigned int vertex)
4324 const bool face_orientation,
4325 const bool face_flip,
4326 const bool face_rotation)
4348 const unsigned int line_translation[4][2][2][2] = {
4370 return line_translation[line][face_orientation][face_flip][face_rotation];
4391 const unsigned int face,
4392 const unsigned int subface,
4410 const unsigned int face,
4411 const unsigned int subface,
4412 const bool face_orientation,
4427 constexpr unsigned int
4433 {{0, 0}, {1, 1}, {1, 0}, {1, 0}},
4434 {{1, 0}, {1, 0}, {0, 0}, {1, 1}},
4435 {{2, 0}, {3, 1}, {1, 0}, {3, 2}}
4439 {{0, 0}, {1, 1}, {0, 1}, {0, 1}},
4440 {{0, 1}, {0, 1}, {0, 0}, {1, 1}},
4441 {{0, 2}, {1, 3}, {0, 1}, {2, 3}}
4444 return subcells[face_orientation][ref_case - 1][face][subface];
4452 const unsigned int face,
4453 const unsigned int subface,
4454 const bool face_orientation,
4455 const bool face_flip,
4456 const bool face_rotation,
4459 const unsigned int dim = 3;
4464 if (!(subface == 0 &&
4502 (face_orientation == face_rotation) ? flip[face_ref_case] : face_ref_case;
4514 const unsigned int subface_exchange[4][2][2][2][4] = {
4517 {{{{0,
e,
e,
e}, {0,
e,
e,
e}}, {{0,
e,
e,
e}, {0,
e,
e,
e}}},
4518 {{{0,
e,
e,
e}, {0,
e,
e,
e}}, {{0,
e,
e,
e}, {0,
e,
e,
e}}}},
4532 {{{{0, 1,
e,
e}, {0, 1,
e,
e}}, {{1, 0,
e,
e}, {1, 0,
e,
e}}},
4533 {{{0, 1,
e,
e}, {0, 1,
e,
e}}, {{1, 0,
e,
e}, {1, 0,
e,
e}}}},
4536 {{{{0, 1,
e,
e}, {1, 0,
e,
e}}, {{1, 0,
e,
e}, {0, 1,
e,
e}}},
4537 {{{0, 1,
e,
e}, {1, 0,
e,
e}}, {{1, 0,
e,
e}, {0, 1,
e,
e}}}},
4559 const unsigned int std_subface =
4560 subface_exchange[face_ref_case][face_orientation][face_flip][face_rotation]
4572 [max_children_per_face] = {
4634 if ((std_face_ref & face_refinement_case(ref_case, face)) ==
4635 face_refinement_case(ref_case, face))
4644 const unsigned int equivalent_iso_subface[4][4] = {
4650 const unsigned int equ_std_subface =
4651 equivalent_iso_subface[std_face_ref][std_subface];
4654 return iso_children[ref_case - 1][face][equ_std_subface];
4661 ExcMessage(
"The face RefineCase is too coarse "
4662 "for the given cell RefineCase."));
4689 const unsigned int line,
4707 const unsigned int line,
4708 const bool face_orientation,
4709 const bool face_flip,
4710 const bool face_rotation)
4715 const unsigned lines[faces_per_cell][lines_per_face] = {
4722 return lines[face][real_to_standard_face_line(
4723 line, face_orientation, face_flip, face_rotation)];
4758 const unsigned int vertex,
4759 const bool face_orientation,
4760 const bool face_flip,
4761 const bool face_rotation)
4787template <
typename Number>
4792 for (
unsigned int i = 0; i < dim; ++i)
4804 double result = 0.0;
4806 for (
unsigned int i = 0; i < dim; ++i)
4809 result =
std::max(result, p[i] - 1.);
4820 const unsigned int i)
4828 const double x = xi[0];
4841 const double x = xi[0];
4842 const double y = xi[1];
4846 return (1 - x) * (1 - y);
4859 const double x = xi[0];
4860 const double y = xi[1];
4861 const double z = xi[2];
4865 return (1 - x) * (1 - y) * (1 - z);
4867 return x * (1 - y) * (1 - z);
4869 return (1 - x) * y * (1 - z);
4871 return x * y * (1 - z);
4873 return (1 - x) * (1 - y) * z;
4875 return x * (1 - y) * z;
4877 return (1 - x) * y * z;
4895 const unsigned int i)
4915 const unsigned int i)
4919 const double x = xi[0];
4920 const double y = xi[1];
4924 return Point<2>(-(1 - y), -(1 - x));
4940 const unsigned int i)
4944 const double x = xi[0];
4945 const double y = xi[1];
4946 const double z = xi[2];
4950 return Point<3>(-(1 - y) * (1 - z),
4952 -(1 - x) * (1 - y));
4954 return Point<3>((1 - y) * (1 - z), -x * (1 - z), -x * (1 - y));
4956 return Point<3>(-y * (1 - z), (1 - x) * (1 - z), -(1 - x) * y);
4958 return Point<3>(y * (1 - z), x * (1 - z), -x * y);
4960 return Point<3>(-(1 - y) * z, -(1 - x) * z, (1 - x) * (1 - y));
4962 return Point<3>((1 - y) * z, -x * z, x * (1 - y));
4964 return Point<3>(-y * z, (1 - x) * z, (1 - x) * y);
4966 return Point<3>(y * z, x * z, x * y);
4992 namespace GeometryInfoHelper
5002 result[0] = derivative[0][1];
5003 result[1] = -derivative[0][0];
5014 return cross_product_3d(derivative[0], derivative[1]);
5026 for (
unsigned int i = 0; i < dim; ++i)
5027 jacobian[i] = derivative[i];
5036template <
int spacedim>
5039# ifndef DEAL_II_CXX14_CONSTEXPR_BUG
5041 Tensor<spacedim - dim, spacedim> (&forms)[vertices_per_cell])
5075 for (
unsigned int i = 0; i < vertices_per_cell; ++i)
5079 for (
unsigned int j = 0; j < vertices_per_cell; ++j)
5082 d_linear_shape_function_gradient(unit_cell_vertex(i), j);
5083 for (
unsigned int l = 0;
l < dim; ++
l)
5084 derivatives[l] +=
vertices[j] * grad_phi_j[l];
5087 forms[i] = internal::GeometryInfoHelper::wedge_product(derivatives);
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 constexpr unsigned int n_refinement_cases
static RefinementCase cut_axis(const unsigned int i)
static std::array< RefinementCase< dim >, n_refinement_cases > all_refinement_cases()
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
#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)
#define DEAL_II_ASSERT_UNREACHABLE()
#define DEAL_II_NOT_IMPLEMENTED()
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 > &)
typename internal::ndarray::HelperArray< T, Ns... >::type ndarray
#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 > &)