* For three spatial dimensions, the exact order of the children is laid
* down in the general documentation of this class.
*
- * The <tt>face_orientation</tt>, <tt>face_flip</tt> and
- * <tt>face_rotation</tt> arguments are meant exclusively for quadrialaterals
- * and hexahedra at the moment. They determine how this function handles faces
- * oriented in the standard and non-standard orientation.
- * <tt>face_orientation</tt> defaults to <tt>true</tt>, <tt>face_flip</tt> and
- * <tt>face_rotation</tt> default to <tt>false</tt> (standard orientation) and
- * has no effect in 2d. The concept of face orientations is explained in this
+ * The <tt>face_orientation</tt> argument is meant exclusively for
+ * quadrilaterals and hexahedra at the moment. It determines how this function
+ * handles faces oriented in the standard and non-standard orientation. It
+ * represents a bit-code for the overall <tt>face_orientation</tt>,
+ * <tt>face_flip</tt> and <tt>face_rotation</tt> and defaults to the standard
+ * orientation. The concept of face orientations is explained in this
* @ref GlossFaceOrientation "glossary"
* entry.
*/
unsigned int
- child_cell_on_face(const unsigned int face_n,
- const unsigned int subface_n,
- const bool face_orientation = true,
- const bool face_flip = false,
- const bool face_rotation = false) const;
+ child_cell_on_face(const unsigned int face_n,
+ const unsigned int subface_n,
+ const unsigned char face_orientation = 1) const;
/**
* For a given vertex in a cell, return a pair of a face index and a
inline unsigned int
-ReferenceCell::child_cell_on_face(const unsigned int face,
- const unsigned int subface,
- const bool face_orientation,
- const bool face_flip,
- const bool face_rotation) const
+ReferenceCell::child_cell_on_face(
+ const unsigned int face,
+ const unsigned int subface,
+ const unsigned char face_orientation_raw) const
{
AssertIndexRange(face, n_faces());
}
else if (*this == ReferenceCells::Quadrilateral)
{
+ const bool face_orientation = Utilities::get_bit(face_orientation_raw, 0);
+ const bool face_flip = Utilities::get_bit(face_orientation_raw, 2);
+ const bool face_rotation = Utilities::get_bit(face_orientation_raw, 1);
+
return GeometryInfo<2>::child_cell_on_face(
RefinementCase<2>(RefinementPossibilities<2>::no_refinement),
face,
}
else if (*this == ReferenceCells::Hexahedron)
{
+ const bool face_orientation = Utilities::get_bit(face_orientation_raw, 0);
+ const bool face_flip = Utilities::get_bit(face_orientation_raw, 2);
+ const bool face_rotation = Utilities::get_bit(face_orientation_raw, 1);
+
return GeometryInfo<3>::child_cell_on_face(
RefinementCase<3>(RefinementPossibilities<3>::no_refinement),
face,