16 #include <deal.II/base/geometry_info.h> 17 #include <deal.II/base/tensor.h> 19 DEAL_II_NAMESPACE_OPEN
57 = { 0, 0, 1, 1, 2, 2 };
62 = { 0, 0, 1, 1, 2, 2, 3, 3 };
79 = { -1, 1, -1, 1, -1, 1 };
84 = { -1, 1, -1, 1, -1, 1, -1, 1 };
101 = { 1, 0, 3, 2, 5, 4 };
106 = { 1, 0, 3, 2, 5, 4, 7, 6 };
120 = { 0, 1, 5, 4, 2, 3, 7, 6};
124 = { invalid_unsigned_int,
125 invalid_unsigned_int,
126 invalid_unsigned_int,
127 invalid_unsigned_int,
128 invalid_unsigned_int,
129 invalid_unsigned_int,
130 invalid_unsigned_int,
131 invalid_unsigned_int,
132 invalid_unsigned_int,
133 invalid_unsigned_int,
134 invalid_unsigned_int,
135 invalid_unsigned_int,
136 invalid_unsigned_int,
137 invalid_unsigned_int,
138 invalid_unsigned_int,
153 = { 0, 4, 2, 6, 1, 5, 3, 7};
157 = { invalid_unsigned_int,
158 invalid_unsigned_int,
159 invalid_unsigned_int,
160 invalid_unsigned_int,
161 invalid_unsigned_int,
162 invalid_unsigned_int,
163 invalid_unsigned_int,
164 invalid_unsigned_int,
165 invalid_unsigned_int,
166 invalid_unsigned_int,
167 invalid_unsigned_int,
168 invalid_unsigned_int,
169 invalid_unsigned_int,
170 invalid_unsigned_int,
171 invalid_unsigned_int,
207 = { { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
208 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
209 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
210 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
211 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
212 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
213 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
214 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
215 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
216 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
217 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
218 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
219 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
220 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
221 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int },
222 { invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int, invalid_unsigned_int }
231 {0, 2, 2, 4, 2, 4, 4, 8};
233 return n_children[ref_case];
261 {0, 2, 3, 3, 4, 2, 3, 3, 4, 4};
262 return nsubs[subface_case];
280 const unsigned int dim=2;
283 switch (subface_case)
320 const unsigned int subface_no)
322 const unsigned int dim=3;
325 switch (subface_case)
394 const unsigned int face_no,
399 const unsigned int dim=2;
429 return ref_cases[cell_refinement_case][face_no/2];
436 const unsigned int face_no,
437 const bool face_orientation,
439 const bool face_rotation)
441 const unsigned int dim=3;
499 const RefinementCase<dim-1> ref_case=ref_cases[cell_refinement_case][face_no/2];
521 return (face_orientation==face_rotation) ? flip[ref_case] : ref_case;
529 const unsigned int line_no)
532 const unsigned int dim = 1;
539 return cell_refinement_case;
546 const unsigned int line_no)
556 const unsigned int line_no)
558 const unsigned int dim=3;
581 {1,1,0,0,1,1,0,0,2,2,2,2};
583 return ((cell_refinement_case & cut_one[direction[line_no]]) ?
597 const unsigned int dim = 1;
607 const unsigned int face_no,
612 const unsigned int dim = 2;
628 const unsigned int face_no,
629 const bool face_orientation,
631 const bool face_rotation)
633 const unsigned int dim=3;
660 const RefinementCase<dim-1> std_face_ref = (face_orientation==face_rotation) ? flip[face_refinement_case] : face_refinement_case;
686 return face_to_cell[face_no/2][std_face_ref];
706 const unsigned int dim = 2;
719 const unsigned int dim=3;
728 RefinementCase<dim>::cut_x,
730 RefinementCase<dim>::cut_z
733 return ref_cases[line_no/2];
741 const bool face_orientation,
742 const bool face_flip,
743 const bool face_rotation)
766 static const unsigned int vertex_translation[4][2][2][2] =
801 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
824 const bool face_orientation,
825 const bool face_flip,
826 const bool face_rotation)
849 static const unsigned int vertex_translation[4][2][2][2] =
884 return vertex_translation[vertex][face_orientation][face_flip][face_rotation];
907 const bool face_orientation,
908 const bool face_flip,
909 const bool face_rotation)
932 static const unsigned int line_translation[4][2][2][2] =
967 return line_translation[line][face_orientation][face_flip][face_rotation];
988 const bool face_orientation,
989 const bool face_flip,
990 const bool face_rotation)
1013 static const unsigned int line_translation[4][2][2][2] =
1048 return line_translation[line][face_orientation][face_flip][face_rotation];
1069 const unsigned int face,
1070 const unsigned int subface,
1071 const bool,
const bool,
const bool,
1087 const unsigned int face,
1088 const unsigned int subface,
1090 const bool face_flip,
1105 static const unsigned int 1110 {{0,0},{1,1},{0,1},{0,1}},
1111 {{0,1},{0,1},{0,0},{1,1}},
1112 {{0,2},{1,3},{0,1},{2,3}}
1116 {{0,0},{1,1},{1,0},{1,0}},
1117 {{1,0},{1,0},{0,0},{1,1}},
1118 {{2,0},{3,1},{1,0},{3,2}}
1122 return subcells[face_flip][ref_case-1][face][subface];
1130 const unsigned int face,
1131 const unsigned int subface,
1132 const bool face_orientation,
1133 const bool face_flip,
1134 const bool face_rotation,
1137 const unsigned int dim = 3;
1148 static const unsigned int e=invalid_unsigned_int;
1177 const RefinementCase<dim-1> std_face_ref = (face_orientation==face_rotation) ? flip[face_ref_case] : face_ref_case;
1189 static const unsigned int subface_exchange[4][2][2][2][4]=
1274 const unsigned int std_subface=subface_exchange
1289 static const unsigned int 1371 static const unsigned int equivalent_iso_subface[4][4]=
1379 const unsigned int equ_std_subface
1380 =equivalent_iso_subface[std_face_ref][std_subface];
1383 return iso_children[ref_case-1][face][equ_std_subface];
1390 ExcMessage(
"The face RefineCase is too coarse " 1391 "for the given cell RefineCase."));
1404 const bool,
const bool,
const bool,
1408 return invalid_unsigned_int;
1416 const unsigned int vertex)
1429 const unsigned int vertex)
1439 const unsigned int vertex)
1444 static const unsigned 1458 return vertices[line][vertex];
1468 return invalid_unsigned_int;
1475 const unsigned int line,
1476 const bool,
const bool,
const bool)
1493 const unsigned int line,
1494 const bool,
const bool,
const bool)
1509 const unsigned int line,
1510 const bool face_orientation,
1511 const bool face_flip,
1512 const bool face_rotation)
1517 static const unsigned 1537 const bool,
const bool,
const bool)
1540 return invalid_unsigned_int;
1548 const unsigned int vertex,
1549 const bool face_orientation,
1550 const bool face_flip,
1551 const bool face_rotation)
1554 face_orientation, face_flip, face_rotation);
1564 for (
unsigned int i=0; i<dim; i++)
1565 if (p[i] < 0.) p[i] = 0.;
1566 else if (p[i] > 1.) p[i] = 1.;
1577 double result = 0.0;
1579 for (
unsigned int i=0; i<dim; i++)
1580 if ((-p[i]) > result)
1582 else if ((p[i]-1.) > result)
1583 result = (p[i] - 1.);
1594 const unsigned int i)
1603 const double x = xi[0];
1615 const double x = xi[0];
1616 const double y = xi[1];
1632 const double x = xi[0];
1633 const double y = xi[1];
1634 const double z = xi[2];
1638 return (1-x)*(1-y)*(1-z);
1640 return x*(1-y)*(1-z);
1642 return (1-x)*y*(1-z);
1646 return (1-x)*(1-y)*z;
1668 const unsigned int i)
1690 const unsigned int i)
1695 const double x = xi[0];
1696 const double y = xi[1];
1717 const unsigned int i)
1722 const double x = xi[0];
1723 const double y = xi[1];
1724 const double z = xi[2];
1759 return Point<3> (-1e9, -1e9, -1e9);
1788 wedge_product (
const Tensor<1,2> (&derivative)[1])
1791 result[0] = derivative[0][1];
1792 result[1] = -derivative[0][0];
1802 wedge_product (
const Tensor<1,3> (&derivative)[2])
1804 return cross_product_3d (derivative[0], derivative[1]);
1817 for (
unsigned int i=0; i<dim; ++i)
1818 jacobian[i] = derivative[i];
1820 return determinant (jacobian);
1827 template <
int spacedim>
1831 #ifndef DEAL_II_CONSTEXPR_BUG 1877 for (
unsigned int l=0; l<dim; ++l)
1878 derivatives[l] += vertices[j] * grad_phi_j[l];
1881 forms[i] = internal::GeometryInfo::wedge_product (derivatives);
1895 #ifndef DEAL_II_CONSTEXPR_BUG 1907 #ifndef DEAL_II_CONSTEXPR_BUG 1919 #ifndef DEAL_II_CONSTEXPR_BUG 1931 #ifndef DEAL_II_CONSTEXPR_BUG 1944 #ifndef DEAL_II_CONSTEXPR_BUG 1953 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)
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::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
static const unsigned int vertices_per_cell
static::ExceptionBase & ExcMessage(std::string arg1)
static::ExceptionBase & ExcImpossibleInDim(int arg1)
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::ExceptionBase & ExcNotImplemented()
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)
static::ExceptionBase & ExcInternalError()