From 8d0d6ea769a9b91b39487fe8b171174bb79e1c87 Mon Sep 17 00:00:00 2001 From: Wolfgang Bangerth Date: Wed, 13 Sep 2017 12:46:29 -0600 Subject: [PATCH] Use DoFInvalidAccessor to unify three partial specializations into one. --- include/deal.II/dofs/dof_accessor.templates.h | 101 ++++-------------- 1 file changed, 20 insertions(+), 81 deletions(-) diff --git a/include/deal.II/dofs/dof_accessor.templates.h b/include/deal.II/dofs/dof_accessor.templates.h index 0954c4e753..c04fc4d8e9 100644 --- a/include/deal.II/dofs/dof_accessor.templates.h +++ b/include/deal.II/dofs/dof_accessor.templates.h @@ -2873,87 +2873,14 @@ namespace internal /** - * Implement setting dof indices on a cell. Currently not implemented - * for hp::DoFHandler objects. + * Implement setting dof indices on a cell. */ - template - static - void - set_dof_indices (DoFCellAccessor, level_dof_access> &accessor, - const std::vector &local_dof_indices) - { - Assert (accessor.has_children() == false, - ExcInternalError()); - - const unsigned int dofs_per_vertex = accessor.get_fe().dofs_per_vertex, - dofs_per_line = accessor.get_fe().dofs_per_line, - dofs_per_cell = accessor.get_fe().dofs_per_cell; - (void)dofs_per_cell; - - Assert (local_dof_indices.size() == dofs_per_cell, - ExcInternalError()); - - unsigned int index = 0; - - for (unsigned int vertex=0; vertex<2; ++vertex) - for (unsigned int d=0; d - static - void - set_dof_indices (DoFCellAccessor, level_dof_access> &accessor, - const std::vector &local_dof_indices) - { - Assert (accessor.has_children() == false, - ExcInternalError()); - - const unsigned int dofs_per_vertex = accessor.get_fe().dofs_per_vertex, - dofs_per_line = accessor.get_fe().dofs_per_line, - dofs_per_quad = accessor.get_fe().dofs_per_quad, - dofs_per_cell = accessor.get_fe().dofs_per_cell; - (void)dofs_per_cell; - - Assert (local_dof_indices.size() == dofs_per_cell, - ExcInternalError()); - - unsigned int index = 0; - - for (unsigned int vertex=0; vertex<4; ++vertex) - for (unsigned int d=0; dset_dof_index(d, local_dof_indices[index]); - - for (unsigned int d=0; d + template static void - set_dof_indices (DoFCellAccessor, level_dof_access> &accessor, - const std::vector &local_dof_indices) + set_dof_indices (DoFCellAccessor, level_dof_access> &accessor, + const std::vector &local_dof_indices) { - const unsigned int dim = 3; - Assert (accessor.has_children() == false, ExcInternalError()); @@ -2973,20 +2900,26 @@ namespace internal for (unsigned int d=0; d::lines_per_cell; ++line) for (unsigned int d=0; dset_dof_index(accessor.dof_handler->get_fe(). + accessor.line(line)->set_dof_index(dim < 3 + ? + d + : + accessor.dof_handler->get_fe(). adjust_line_dof_index_for_line_orientation(d, accessor.line_orientation(line)), local_dof_indices[index]); - // now copy dof numbers into the face. for faces with the + // now copy dof numbers into the face. for faces in 3d with the // wrong orientation, we have already made sure that we're ok // by picking the correct lines and vertices (this happens // automatically in the line() and vertex() @@ -2995,9 +2928,15 @@ namespace internal // adjust the shape function indices that we see to correspond // to the correct (cell-local) ordering. The same applies, if // the face_rotation or face_orientation is non-standard + // + // again, if dim<3, then there is nothing to adjust for (unsigned int quad=0; quad::quads_per_cell; ++quad) for (unsigned int d=0; dset_dof_index(accessor.dof_handler->get_fe(). + accessor.quad(quad)->set_dof_index(dim < 3 + ? + d + : + accessor.dof_handler->get_fe(). adjust_quad_dof_index_for_face_orientation(d, accessor.face_orientation(quad), accessor.face_flip(quad), -- 2.39.5