face_iterator
face(const unsigned int i) const;
+ /**
+ * Return an array of iterators to all faces of this cell.
+ */
+ inline std::array<face_iterator,
+ GeometryInfo<DoFHandlerType::dimension>::faces_per_cell>
+ face_iterators() const;
+
/**
* Return the result of the @p neighbor_child_on_subface function of the
* base class, but convert it so that one can also access the DoF data (the
+template <typename DoFHandlerType, bool level_dof_access>
+inline std::array<
+ typename DoFCellAccessor<DoFHandlerType, level_dof_access>::face_iterator,
+ GeometryInfo<DoFHandlerType::dimension>::faces_per_cell>
+DoFCellAccessor<DoFHandlerType, level_dof_access>::face_iterators() const
+{
+ std::array<
+ typename DoFCellAccessor<DoFHandlerType, level_dof_access>::face_iterator,
+ GeometryInfo<dim>::faces_per_cell>
+ face_iterators;
+
+ const unsigned int dim = DoFHandlerType::dimension;
+ for (unsigned int i = 0; i < GeometryInfo<dim>::faces_per_cell; ++i)
+ face_iterators[i] =
+ dealii::internal::DoFCellAccessorImplementation::get_face(
+ *this, i, std::integral_constant<int, dim>());
+
+ return face_iterators;
+}
+
+
+
template <typename DoFHandlerType, bool level_dof_access>
inline void
DoFCellAccessor<DoFHandlerType, level_dof_access>::get_dof_indices(
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// Copyright (C) 2018 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.
+//
+// ---------------------------------------------------------------------
+
+
+
+// Check face range-based for loops over DoFHandler objects
+
+#include <deal.II/dofs/dof_accessor.h>
+#include <deal.II/dofs/dof_handler.h>
+
+#include <deal.II/fe/fe_q.h>
+
+#include <deal.II/grid/grid_generator.h>
+
+#include "../tests.h"
+
+
+template <int dim, int spacedim>
+void
+check()
+{
+ Triangulation<dim, spacedim> tr;
+ GridGenerator::hyper_cube(tr);
+ tr.refine_global(2);
+ DoFHandler<dim, spacedim> dh(tr);
+ FE_Q<dim, spacedim> fe(1);
+ dh.distribute_dofs(fe);
+
+ const unsigned int n_dofs_per_face = fe.n_dofs_per_face();
+ std::vector<types::global_dof_index> face_dof_indices(n_dofs_per_face);
+
+ for (const auto &cell : dh.active_cell_iterators())
+ for (const auto &face : cell->face_iterators())
+ {
+ face->get_dof_indices(face_dof_indices);
+ for (unsigned int i = 0; i < n_dofs_per_face; ++i)
+ deallog << face_dof_indices[i] << ' ';
+ deallog << std::endl;
+ }
+}
+
+
+int
+main()
+{
+ initlog();
+
+ check<2, 2>();
+ check<2, 3>();
+ check<3, 3>();
+}