16 #include <deal.II/base/geometry_info.h> 17 #include <deal.II/base/tensor.h> 19 DEAL_II_NAMESPACE_OPEN
48 void foo (
const unsigned int *) {}
51 void define_variables ()
56 template void define_variables<2> ();
57 template void define_variables<3> ();
58 template void define_variables<4> ();
76 = { 0, 0, 1, 1, 2, 2 };
81 = { 0, 0, 1, 1, 2, 2, 3, 3 };
98 = { -1, 1, -1, 1, -1, 1 };
103 = { -1, 1, -1, 1, -1, 1, -1, 1 };
120 = { 1, 0, 3, 2, 5, 4 };
125 = { 1, 0, 3, 2, 5, 4, 7, 6 };
139 = { 0, 1, 5, 4, 2, 3, 7, 6};
143 = { invalid_unsigned_int,
144 invalid_unsigned_int,
145 invalid_unsigned_int,
146 invalid_unsigned_int,
147 invalid_unsigned_int,
148 invalid_unsigned_int,
149 invalid_unsigned_int,
150 invalid_unsigned_int,
151 invalid_unsigned_int,
152 invalid_unsigned_int,
153 invalid_unsigned_int,
154 invalid_unsigned_int,
155 invalid_unsigned_int,
156 invalid_unsigned_int,
157 invalid_unsigned_int,
172 = { 0, 4, 2, 6, 1, 5, 3, 7};
176 = { invalid_unsigned_int,
177 invalid_unsigned_int,
178 invalid_unsigned_int,
179 invalid_unsigned_int,
180 invalid_unsigned_int,
181 invalid_unsigned_int,
182 invalid_unsigned_int,
183 invalid_unsigned_int,
184 invalid_unsigned_int,
185 invalid_unsigned_int,
186 invalid_unsigned_int,
187 invalid_unsigned_int,
188 invalid_unsigned_int,
189 invalid_unsigned_int,
190 invalid_unsigned_int,
226 = { { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
227 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
228 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
229 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
230 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
231 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
232 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
233 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
234 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
235 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
236 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
237 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
238 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
239 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
240 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
241 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int }
250 {0, 2, 2, 4, 2, 4, 4, 8};
252 return n_children[ref_case];
260 Assert(
false, ExcImpossibleInDim(1));
280 {0, 2, 3, 3, 4, 2, 3, 3, 4, 4};
281 return nsubs[subface_case];
299 const unsigned int dim=2;
302 switch (subface_case)
328 Assert(
false, ExcInternalError());
339 const unsigned int subface_no)
341 const unsigned int dim=3;
344 switch (subface_case)
387 Assert(
false, ExcInternalError());
404 Assert(
false, ExcImpossibleInDim(1));
413 const unsigned int face_no,
418 const unsigned int dim=2;
448 return ref_cases[cell_refinement_case][face_no/2];
455 const unsigned int face_no,
456 const bool face_orientation,
458 const bool face_rotation)
460 const unsigned int dim=3;
518 const RefinementCase<dim-1> ref_case=ref_cases[cell_refinement_case][face_no/2];
540 return (face_orientation==face_rotation) ? flip[ref_case] : ref_case;
548 const unsigned int line_no)
551 const unsigned int dim = 1;
558 return cell_refinement_case;
565 const unsigned int line_no)
575 const unsigned int line_no)
577 const unsigned int dim=3;
600 {1,1,0,0,1,1,0,0,2,2,2,2};
602 return ((cell_refinement_case & cut_one[direction[line_no]]) ?
616 const unsigned int dim = 1;
617 Assert(
false, ExcImpossibleInDim(dim));
626 const unsigned int face_no,
631 const unsigned int dim = 2;
647 const unsigned int face_no,
648 const bool face_orientation,
650 const bool face_rotation)
652 const unsigned int dim=3;
679 const RefinementCase<dim-1> std_face_ref = (face_orientation==face_rotation) ? flip[face_refinement_case] : face_refinement_case;
705 return face_to_cell[face_no/2][std_face_ref];
715 Assert(line_no==0, ExcIndexRange(line_no,0,1));
725 const unsigned int dim = 2;
738 const unsigned int dim=3;
747 RefinementCase<dim>::cut_x,
749 RefinementCase<dim>::cut_z
752 return ref_cases[line_no/2];
760 const bool face_orientation,
761 const bool face_flip,
762 const bool face_rotation)
785 static const unsigned int vertex_translation[4][2][2][2] =
820 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
832 Assert(dim>1, ExcImpossibleInDim(dim));
843 const bool face_orientation,
844 const bool face_flip,
845 const bool face_rotation)
868 static const unsigned int vertex_translation[4][2][2][2] =
903 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
915 Assert(dim>1, ExcImpossibleInDim(dim));
926 const bool face_orientation,
927 const bool face_flip,
928 const bool face_rotation)
951 static const unsigned int line_translation[4][2][2][2] =
986 return line_translation[line][face_orientation][face_flip][face_rotation];
998 Assert(
false, ExcNotImplemented());
1007 const bool face_orientation,
1008 const bool face_flip,
1009 const bool face_rotation)
1032 static const unsigned int line_translation[4][2][2][2] =
1067 return line_translation[line][face_orientation][face_flip][face_rotation];
1079 Assert(
false, ExcNotImplemented());
1088 const unsigned int face,
1089 const unsigned int subface,
1090 const bool,
const bool,
const bool,
1106 const unsigned int face,
1107 const unsigned int subface,
1109 const bool face_flip,
1124 static const unsigned int 1129 {{0,0},{1,1},{0,1},{0,1}},
1130 {{0,1},{0,1},{0,0},{1,1}},
1131 {{0,2},{1,3},{0,1},{2,3}}
1135 {{0,0},{1,1},{1,0},{1,0}},
1136 {{1,0},{1,0},{0,0},{1,1}},
1137 {{2,0},{3,1},{1,0},{3,2}}
1141 return subcells[face_flip][ref_case-1][face][subface];
1149 const unsigned int face,
1150 const unsigned int subface,
1151 const bool face_orientation,
1152 const bool face_flip,
1153 const bool face_rotation,
1156 const unsigned int dim = 3;
1167 static const unsigned int e=invalid_unsigned_int;
1196 const RefinementCase<dim-1> std_face_ref = (face_orientation==face_rotation) ? flip[face_ref_case] : face_ref_case;
1208 static const unsigned int subface_exchange[4][2][2][2][4]=
1293 const unsigned int std_subface=subface_exchange
1299 Assert (std_subface!=e, ExcInternalError());
1308 static const unsigned int 1390 static const unsigned int equivalent_iso_subface[4][4]=
1398 const unsigned int equ_std_subface
1399 =equivalent_iso_subface[std_face_ref][std_subface];
1400 Assert (equ_std_subface!=e, ExcInternalError());
1402 return iso_children[ref_case-1][face][equ_std_subface];
1409 ExcMessage(
"The face RefineCase is too coarse " 1410 "for the given cell RefineCase."));
1423 const bool,
const bool,
const bool,
1426 Assert(
false, ExcNotImplemented());
1427 return invalid_unsigned_int;
1435 const unsigned int vertex)
1439 Assert (vertex<2, ExcIndexRange(vertex, 0, 2));
1448 const unsigned int vertex)
1458 const unsigned int vertex)
1461 Assert (vertex<2, ExcIndexRange(vertex, 0, 2));
1463 static const unsigned 1477 return vertices[line][vertex];
1486 Assert(
false, ExcNotImplemented());
1487 return invalid_unsigned_int;
1494 const unsigned int line,
1495 const bool,
const bool,
const bool)
1512 const unsigned int line,
1513 const bool,
const bool,
const bool)
1528 const unsigned int line,
1529 const bool face_orientation,
1530 const bool face_flip,
1531 const bool face_rotation)
1536 static const unsigned 1556 const bool,
const bool,
const bool)
1558 Assert(
false, ExcNotImplemented());
1559 return invalid_unsigned_int;
1567 const unsigned int vertex,
1568 const bool face_orientation,
1569 const bool face_flip,
1570 const bool face_rotation)
1573 face_orientation, face_flip, face_rotation);
1583 for (
unsigned int i=0; i<dim; i++)
1584 if (p[i] < 0.) p[i] = 0.;
1585 else if (p[i] > 1.) p[i] = 1.;
1596 double result = 0.0;
1598 for (
unsigned int i=0; i<dim; i++)
1599 if ((-p[i]) > result)
1601 else if ((p[i]-1.) > result)
1602 result = (p[i] - 1.);
1613 const unsigned int i)
1622 const double x = xi[0];
1634 const double x = xi[0];
1635 const double y = xi[1];
1651 const double x = xi[0];
1652 const double y = xi[1];
1653 const double z = xi[2];
1657 return (1-x)*(1-y)*(1-z);
1659 return x*(1-y)*(1-z);
1661 return (1-x)*y*(1-z);
1665 return (1-x)*(1-y)*z;
1676 Assert (
false, ExcNotImplemented());
1687 const unsigned int i)
1709 const unsigned int i)
1714 const double x = xi[0];
1715 const double y = xi[1];
1736 const unsigned int i)
1741 const double x = xi[0];
1742 const double y = xi[1];
1743 const double z = xi[2];
1778 return Point<3> (-1e9, -1e9, -1e9);
1789 Assert (
false, ExcNotImplemented());
1807 wedge_product (
const Tensor<1,2> (&derivative)[1])
1810 result[0] = derivative[0][1];
1811 result[1] = -derivative[0][0];
1821 wedge_product (
const Tensor<1,3> (&derivative)[2])
1823 return cross_product_3d (derivative[0], derivative[1]);
1836 for (
unsigned int i=0; i<dim; ++i)
1837 jacobian[i] = derivative[i];
1839 return determinant (jacobian);
1846 template <
int spacedim>
1850 #ifndef DEAL_II_CONSTEXPR_BUG 1896 for (
unsigned int l=0; l<dim; ++l)
1897 derivatives[l] += vertices[j] * grad_phi_j[l];
1900 forms[i] = internal::GeometryInfo::wedge_product (derivatives);
1914 #ifndef DEAL_II_CONSTEXPR_BUG 1926 #ifndef DEAL_II_CONSTEXPR_BUG 1938 #ifndef DEAL_II_CONSTEXPR_BUG 1950 #ifndef DEAL_II_CONSTEXPR_BUG 1963 #ifndef DEAL_II_CONSTEXPR_BUG 1972 DEAL_II_NAMESPACE_CLOSE
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< 1 > line_refinement_case(const RefinementCase< dim > &cell_refinement_case, const unsigned int line_no)
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 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 unsigned int line_to_cell_vertices(const unsigned int line, const unsigned int vertex)
::ExceptionBase & ExcMessage(std::string arg1)
static const unsigned int max_children_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 Point< dim > unit_cell_vertex(const unsigned int vertex)
static const unsigned int vertices_per_cell
static const unsigned int lines_per_cell
static unsigned int n_children(const RefinementCase< dim > &refinement_case)
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_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)
#define Assert(cond, exc)
static double distance_to_unit_cell(const Point< dim > &p)
static const unsigned int lines_per_face
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 RefinementCase< dim > min_cell_refinement_case_for_line_refinement(const unsigned int line_no)
static void alternating_form_at_vertices(const Point< spacedim >(&vertices)[vertices_per_cell], Tensor< spacedim-dim, spacedim >(&forms)[vertices_per_cell])
static unsigned int n_subfaces(const internal::SubfaceCase< dim > &subface_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 Point< dim > project_to_unit_cell(const Point< dim > &p)
static const unsigned int faces_per_cell
static Tensor< 1, dim > d_linear_shape_function_gradient(const Point< dim > &xi, const unsigned int i)
static double subface_ratio(const internal::SubfaceCase< dim > &subface_case, const unsigned int subface_no)
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 double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)