#include <deal.II/base/tensor.h>
#include <deal.II/base/utilities.h>
+#include <deal.II/grid/tria_orientation.h>
+
#include <boost/container/small_vector.hpp>
#include <iosfwd>
}
case ReferenceCells::Quadrilateral:
{
- const bool face_orientation =
- Utilities::get_bit(combined_face_orientation, 0);
- const bool face_flip =
- Utilities::get_bit(combined_face_orientation, 2);
- const bool face_rotation =
- Utilities::get_bit(combined_face_orientation, 1);
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
return GeometryInfo<2>::child_cell_on_face(
RefinementCase<2>(RefinementPossibilities<2>::isotropic_refinement),
}
case ReferenceCells::Hexahedron:
{
- const bool face_orientation =
- Utilities::get_bit(combined_face_orientation, 0);
- const bool face_flip =
- Utilities::get_bit(combined_face_orientation, 2);
- const bool face_rotation =
- Utilities::get_bit(combined_face_orientation, 1);
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
return GeometryInfo<3>::child_cell_on_face(
RefinementCase<3>(RefinementPossibilities<3>::isotropic_refinement),
inline unsigned int
-ReferenceCell::face_to_cell_lines(const unsigned int face,
- const unsigned int line,
- const unsigned char face_orientation) const
+ReferenceCell::face_to_cell_lines(
+ const unsigned int face,
+ const unsigned int line,
+ const unsigned char combined_face_orientation) const
{
AssertIndexRange(face, n_faces());
AssertIndexRange(line, face_reference_cell(face).n_lines());
}
case ReferenceCells::Line:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<1>::face_to_cell_lines(
- face,
- line,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, line, face_orientation, face_flip, face_rotation);
}
case ReferenceCells::Triangle:
{
}
case ReferenceCells::Quadrilateral:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<2>::face_to_cell_lines(
- face,
- line,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, line, face_orientation, face_flip, face_rotation);
}
case ReferenceCells::Tetrahedron:
{
{{{0, 1, 2}}, {{0, 3, 4}}, {{2, 5, 3}}, {{1, 4, 5}}}};
return table[face][standard_to_real_face_line(
- line, face, face_orientation)];
+ line, face, combined_face_orientation)];
}
case ReferenceCells::Pyramid:
{
{{3, 7, 6, X}}}};
return table[face][standard_to_real_face_line(
- line, face, face_orientation)];
+ line, face, combined_face_orientation)];
}
case ReferenceCells::Wedge:
{
{{8, 6, 5, 2}}}};
return table[face][standard_to_real_face_line(
- line, face, face_orientation)];
+ line, face, combined_face_orientation)];
}
case ReferenceCells::Hexahedron:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<3>::face_to_cell_lines(
- face,
- line,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, line, face_orientation, face_flip, face_rotation);
}
default:
Assert(false, ExcNotImplemented());
inline unsigned int
-ReferenceCell::face_to_cell_vertices(const unsigned int face,
- const unsigned int vertex,
- const unsigned char face_orientation) const
+ReferenceCell::face_to_cell_vertices(
+ const unsigned int face,
+ const unsigned int vertex,
+ const unsigned char combined_face_orientation) const
{
AssertIndexRange(face, n_faces());
AssertIndexRange(vertex, face_reference_cell(face).n_vertices());
}
case ReferenceCells::Line:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<1>::face_to_cell_vertices(
- face,
- vertex,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, vertex, face_orientation, face_flip, face_rotation);
}
case ReferenceCells::Triangle:
{
static constexpr ndarray<unsigned int, 3, 2> table = {
{{{0, 1}}, {{1, 2}}, {{2, 0}}}};
- return table[face][face_orientation != 0u ? vertex : (1 - vertex)];
+ return table[face][combined_face_orientation !=
+ reversed_combined_line_orientation() ?
+ vertex :
+ (1 - vertex)];
}
case ReferenceCells::Quadrilateral:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<2>::face_to_cell_vertices(
- face,
- vertex,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, vertex, face_orientation, face_flip, face_rotation);
}
case ReferenceCells::Tetrahedron:
{
{{{0, 1, 2}}, {{1, 0, 3}}, {{0, 2, 3}}, {{2, 1, 3}}}};
return table[face][standard_to_real_face_vertex(
- vertex, face, face_orientation)];
+ vertex, face, combined_face_orientation)];
}
case ReferenceCells::Pyramid:
{
{{2, 3, 4, X}}}};
return table[face][standard_to_real_face_vertex(
- vertex, face, face_orientation)];
+ vertex, face, combined_face_orientation)];
}
case ReferenceCells::Wedge:
{
{{2, 0, 5, 3}}}};
return table[face][standard_to_real_face_vertex(
- vertex, face, face_orientation)];
+ vertex, face, combined_face_orientation)];
}
case ReferenceCells::Hexahedron:
{
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
return GeometryInfo<3>::face_to_cell_vertices(
- face,
- vertex,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ face, vertex, face_orientation, face_flip, face_rotation);
}
default:
Assert(false, ExcNotImplemented());
ReferenceCell::standard_to_real_face_line(
const unsigned int line,
const unsigned int face,
- const unsigned char face_orientation) const
+ const unsigned char combined_face_orientation) const
{
AssertIndexRange(face, n_faces());
AssertIndexRange(line, face_reference_cell(face).n_lines());
Assert(false, ExcNotImplemented());
break;
case ReferenceCells::Tetrahedron:
- return triangle_table[face_orientation][line];
+ return triangle_table[combined_face_orientation][line];
case ReferenceCells::Pyramid:
if (face == 0) // The quadrilateral face
{
- return GeometryInfo<3>::standard_to_real_face_line(
- line,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
+ return GeometryInfo<3>::standard_to_real_face_line(line,
+ face_orientation,
+ face_flip,
+ face_rotation);
}
else // One of the triangular faces
{
- return triangle_table[face_orientation][line];
+ return triangle_table[combined_face_orientation][line];
}
case ReferenceCells::Wedge:
if (face > 1) // One of the quadrilateral faces
{
- return GeometryInfo<3>::standard_to_real_face_line(
- line,
- Utilities::get_bit(face_orientation, 0),
- Utilities::get_bit(face_orientation, 2),
- Utilities::get_bit(face_orientation, 1));
+ const auto [face_orientation, face_rotation, face_flip] =
+ internal::split_face_orientation(combined_face_orientation);
+
+ return GeometryInfo<3>::standard_to_real_face_line(line,
+ face_orientation,
+ face_flip,
+ face_rotation);
}
else // One of the triangular faces
- return triangle_table[face_orientation][line];
+ return triangle_table[combined_face_orientation][line];
case ReferenceCells::Hexahedron:
{
static constexpr ndarray<unsigned int, 8, 4> table = {
{{1, 0, 3, 2}},
{{1, 0, 2, 3}},
{{2, 3, 1, 0}}}};
- return table[face_orientation][line];
+ return table[combined_face_orientation][line];
}
default:
Assert(false, ExcNotImplemented());
}
- inline static unsigned int
+
+ template <int dim, int spacedim>
+ inline static unsigned char
+ combined_face_orientation(
+ const TriaAccessor<1, dim, spacedim> & /*accessor*/,
+ const unsigned int /*face*/)
+ {
+ // There is only one way to orient a vertex
+ return ReferenceCell::default_combined_face_orientation();
+ }
+
+
+
+ template <int dim, int spacedim>
+ inline static unsigned char
+ combined_face_orientation(const TriaAccessor<2, dim, spacedim> &accessor,
+ const unsigned int face)
+ {
+ return line_orientation(accessor, face) == true ?
+ ReferenceCell::default_combined_face_orientation() :
+ ReferenceCell::reversed_combined_line_orientation();
+ }
+
+
+
+ inline static unsigned char
combined_face_orientation(const TriaAccessor<3, 3, 3> &accessor,
const unsigned int face)
{
TriaAccessor<structdim, dim, spacedim>::combined_face_orientation(
const unsigned int face) const
{
- return this->face_orientation(face) + 4 * this->face_flip(face) +
- 2 * this->face_rotation(face);
+ return dealii::internal::TriaAccessorImplementation::Implementation::
+ combined_face_orientation(*this, face);
}
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2023 by the deal.II authors
+//
+// This file is part of the deal.II library.
+//
+// The deal.II library is free software; you can use it, redistribute
+// it, and/or modify it under the terms of the GNU Lesser General
+// Public License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+// The full text of the license can be found in the file LICENSE.md at
+// the top level directory of deal.II.
+//
+// ---------------------------------------------------------------------
+
+#ifndef dealii_tria_orientation_h
+#define dealii_tria_orientation_h
+
+#include <deal.II/base/config.h>
+
+#include <deal.II/base/utilities.h>
+
+#include <vector>
+
+DEAL_II_NAMESPACE_OPEN
+
+namespace internal
+{
+ /**
+ * Combine orientation flags.
+ */
+ inline unsigned char
+ combined_face_orientation(const bool face_orientation,
+ const bool face_rotation,
+ const bool face_flip)
+ {
+ return (face_orientation ? 1 : 0) + (face_rotation ? 2 : 0) +
+ (face_flip ? 4 : 0);
+ }
+
+ /**
+ * Split up a combined orientation flag: orientation flag,
+ * rotation flag, flip flag.
+ */
+ inline std::tuple<bool, bool, bool>
+ split_face_orientation(const unsigned char combined_face_orientation)
+ {
+ return {Utilities::get_bit(combined_face_orientation, 0),
+ Utilities::get_bit(combined_face_orientation, 1),
+ Utilities::get_bit(combined_face_orientation, 2)};
+ }
+
+
+} // namespace internal
+
+
+
+DEAL_II_NAMESPACE_CLOSE
+
+#endif
#include <deal.II/base/tensor_product_polynomials.h>
#include <deal.II/grid/reference_cell.h>
+#include <deal.II/grid/tria_orientation.h>
DEAL_II_NAMESPACE_OPEN
n_quadrature_points};
else if (dim == 3)
{
- const unsigned char orientation = (face_flip ? 4 : 0) +
- (face_rotation ? 2 : 0) +
- (face_orientation ? 1 : 0);
+ const unsigned char orientation =
+ internal::combined_face_orientation(face_orientation,
+ face_rotation,
+ face_flip);
Assert(orientation < 6, ExcInternalError());
return {(reference_cell.n_face_orientations(face_no) * face_no +
orientation) *
quadrature[quadrature.size() == 1 ? 0 : face_no].size()};
else if (dim == 3)
{
- const unsigned int orientation = (face_flip ? 4 : 0) +
- (face_rotation ? 2 : 0) +
- (face_orientation ? 1 : 0);
-
return {offset +
- orientation *
+ internal::combined_face_orientation(face_orientation,
+ face_rotation,
+ face_flip) *
quadrature[quadrature.size() == 1 ? 0 : face_no].size()};
}
}
ExcInternalError());
return index + adjust_quad_dof_index_for_face_orientation_table[table_n](
index,
- (face_orientation ? 4 : 0) + (face_flip ? 2 : 0) +
- (face_rotation ? 1 : 0));
+ internal::combined_face_orientation(face_orientation,
+ face_rotation,
+ face_flip));
}
#include <deal.II/grid/cell_id.h>
#include <deal.II/grid/tria.h>
+#include <deal.II/grid/tria_orientation.h>
DEAL_II_NAMESPACE_OPEN
return adjust_quad_dof_sign_for_face_orientation_table
[this->n_unique_2d_subobjects() == 1 ? 0 : face](
index,
- 4 * static_cast<int>(face_orientation) + 2 * static_cast<int>(face_flip) +
- static_cast<int>(face_rotation));
+ internal::combined_face_orientation(face_orientation,
+ face_rotation,
+ face_flip));
}
unsigned int i = local % n, j = local / n;
// face_orientation=false, face_flip=false, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 0) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, false, false)) =
j + i * n - local;
// face_orientation=false, face_flip=false, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 1) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, true, false)) =
i + (n - 1 - j) * n - local;
// face_orientation=false, face_flip=true, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 2) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, false, true)) =
(n - 1 - j) + (n - 1 - i) * n - local;
// face_orientation=false, face_flip=true, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 3) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, true, true)) =
(n - 1 - i) + j * n - local;
// face_orientation=true, face_flip=false, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 4) = 0;
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, false, false)) = 0;
// face_orientation=true, face_flip=false, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 5) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, true, false)) =
j + (n - 1 - i) * n - local;
// face_orientation=true, face_flip=true, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 6) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, false, true)) =
(n - 1 - i) + (n - 1 - j) * n - local;
// face_orientation=true, face_flip=true, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 7) =
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, true, true)) =
(n - 1 - j) + i * n - local;
}
// We have 8 cases that are all treated the same way. Note that the
// corresponding case to case_no is just its binary representation.
// The above example of (false | true | true) would be case_no=3
- for (unsigned int case_no = 0; case_no < 8; ++case_no)
- {
- // Get the binary representation of the case
- const bool face_orientation = Utilities::get_bit(case_no, 2);
- const bool face_flip = Utilities::get_bit(case_no, 1);
- const bool face_rotation = Utilities::get_bit(case_no, 0);
-
- if (((!face_orientation) && (!face_rotation)) ||
- ((face_orientation) && (face_rotation)))
- {
- // We flip across the diagonal
- // This is the local face dof offset
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](
- local_face_dof, case_no) = j + i * n - local_face_dof;
- }
- else
- {
- // Offset is zero
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](
- local_face_dof, case_no) = 0;
- } // if face needs dof permutation
-
- // Get new local face_dof by adding offset
- const unsigned int new_local_face_dof =
- local_face_dof +
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](
- local_face_dof, case_no);
- // compute new row and column index
- i = new_local_face_dof % n;
- j = new_local_face_dof / n;
-
- /*
- * Now compute if a sign change is necessary. This is done for the
- * case of face_orientation==true
- */
- // flip = false, rotation=true
- if (!face_flip && face_rotation)
+ for (const bool face_orientation : {false, true})
+ for (const bool face_flip : {false, true})
+ for (const bool face_rotation : {false, true})
{
- this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
- local_face_dof, case_no) = ((j % 2) == 1);
- }
- // flip = true, rotation=false
- else if (face_flip && !face_rotation)
- {
- // This case is symmetric (although row and column may be
- // switched)
- this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
- local_face_dof, case_no) = ((j % 2) == 1) != ((i % 2) == 1);
- }
- // flip = true, rotation=true
- else if (face_flip && face_rotation)
- {
- this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
- local_face_dof, case_no) = ((i % 2) == 1);
- }
- /*
- * flip = false, rotation=false => nothing to do
- */
-
- /*
- * If face_orientation==false the sign flip is exactly the opposite.
- */
- if (!face_orientation)
- this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
- local_face_dof, case_no) =
- !this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
- local_face_dof, case_no);
- } // case_no
- } // local_face_dof
+ const auto case_no =
+ internal::combined_face_orientation(face_orientation,
+ face_rotation,
+ face_flip);
+
+ if (((!face_orientation) && (!face_rotation)) ||
+ ((face_orientation) && (face_rotation)))
+ {
+ // We flip across the diagonal
+ // This is the local face dof offset
+ this
+ ->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local_face_dof, case_no) = j + i * n - local_face_dof;
+ }
+ else
+ {
+ // Offset is zero
+ this
+ ->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local_face_dof, case_no) = 0;
+ } // if face needs dof permutation
+
+ // Get new local face_dof by adding offset
+ const unsigned int new_local_face_dof =
+ local_face_dof +
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local_face_dof, case_no);
+ // compute new row and column index
+ i = new_local_face_dof % n;
+ j = new_local_face_dof / n;
+
+ /*
+ * Now compute if a sign change is necessary. This is done for the
+ * case of face_orientation==true
+ */
+ // flip = false, rotation=true
+ if (!face_flip && face_rotation)
+ {
+ this
+ ->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local_face_dof, case_no) = ((j % 2) == 1);
+ }
+ // flip = true, rotation=false
+ else if (face_flip && !face_rotation)
+ {
+ // This case is symmetric (although row and column may be
+ // switched)
+ this
+ ->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local_face_dof, case_no) =
+ ((j % 2) == 1) != ((i % 2) == 1);
+ }
+ // flip = true, rotation=true
+ else if (face_flip && face_rotation)
+ {
+ this
+ ->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local_face_dof, case_no) = ((i % 2) == 1);
+ }
+ /*
+ * flip = false, rotation=false => nothing to do
+ */
+
+ /*
+ * If face_orientation==false the sign flip is exactly the
+ * opposite.
+ */
+ if (!face_orientation)
+ this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local_face_dof, case_no) =
+ !this
+ ->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local_face_dof, case_no);
+ } // case_no
+ } // local_face_dof
}
{
unsigned int i = local % n, j = local / n;
- // face_orientation=false, face_flip=false, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 0) =
+ // face_orientation=false, face_rotation=false, face_flip=false
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, false, false)) =
j + i * n - local;
- // face_orientation=false, face_flip=false, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 1) =
+ // face_orientation=false, face_rotation=true, face_flip=false
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, true, false)) =
i + (n - 1 - j) * n - local;
- // face_orientation=false, face_flip=true, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 2) =
+ // face_orientation=false, face_rotation=false, face_flip=true
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, false, true)) =
(n - 1 - j) + (n - 1 - i) * n - local;
- // face_orientation=false, face_flip=true, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 3) =
+ // face_orientation=false, face_rotation=true, face_flip=true
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, true, true)) =
(n - 1 - i) + j * n - local;
- // face_orientation=true, face_flip=false, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 4) = 0;
- // face_orientation=true, face_flip=false, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 5) =
+ // face_orientation=true, face_rotation=false, face_flip=false
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, false, false)) = 0;
+ // face_orientation=true, face_rotation=true, face_flip=false
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, true, false)) =
j + (n - 1 - i) * n - local;
- // face_orientation=true, face_flip=true, face_rotation=false
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 6) =
+ // face_orientation=true, face_rotation=false, face_flip=true
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, false, true)) =
(n - 1 - i) + (n - 1 - j) * n - local;
- // face_orientation=true, face_flip=true, face_rotation=true
- this->adjust_quad_dof_index_for_face_orientation_table[face_no](local,
- 7) =
+ // face_orientation=true, face_rotation=true, face_flip=true
+ this->adjust_quad_dof_index_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(true, true, true)) =
(n - 1 - j) + i * n - local;
// for face_orientation == false, we need to switch the sign
- for (unsigned int i = 0; i < 4; ++i)
- this->adjust_quad_dof_sign_for_face_orientation_table[face_no](local,
- i) = 1;
+ for (const bool rotation : {false, true})
+ for (const bool flip : {false, true})
+ this->adjust_quad_dof_sign_for_face_orientation_table[face_no](
+ local, internal::combined_face_orientation(false, rotation, flip)) =
+ 1;
}
}