1 // --------------------------------------------------------------------- 2 // 3 // Copyright (C) 1998 - 2019 by the deal.II authors 4 // 5 // This file is part of the deal.II library. 6 // 7 // The deal.II library is free software; you can use it, redistribute 8 // it, and/or modify it under the terms of the GNU Lesser General 9 // Public License as published by the Free Software Foundation; either 10 // version 2.1 of the License, or (at your option) any later version. 11 // The full text of the license can be found in the file LICENSE.md at 12 // the top level directory of deal.II. 13 // 14 // --------------------------------------------------------------------- 15 16 #ifndef dealii_dof_iterators_h 17 #define dealii_dof_iterators_h 18 19 #include <deal.II/base/config.h> 20 21 22 DEAL_II_NAMESPACE_OPEN 23 24 // Forward declarations 25 #ifndef DOXYGEN 26 template <int, int, int> 27 class DoFInvalidAccessor; 28 29 template <int structdim, int dim, int spacedim, bool lda> 30 class DoFAccessor; 31 template <int dim, int spacedim, bool lda> 32 class DoFCellAccessor; 33 34 template <int dim, int spacedim> 35 class DoFHandler; 36 37 template <typename Accessor> 38 class TriaRawIterator; 39 template <typename Accessor> 40 class TriaIterator; 41 template <typename Accessor> 42 class TriaActiveIterator; 43 #endif 44 45 namespace internal 46 { 47 namespace DoFHandlerImplementation 48 { 49 template <int dim, int spacedim, bool lda = false> 50 struct Iterators; 51 52 53 /** 54 * Define some types for DoF handling in one dimension. 55 * 56 * The types have the same meaning as those declared in 57 * internal::TriangulationImplementation::Iterators<1,spacedim>, only the 58 * treatment of templates is a little more complicated. See the 59 * @ref Iterators 60 * module for more information. 61 */ 62 template <int spacedim, bool lda> 63 struct Iterators<1, spacedim, lda> 64 { 65 using CellAccessor = dealii::DoFCellAccessor<1, spacedim, lda>; 66 using FaceAccessor = dealii::DoFAccessor<0, 1, spacedim, lda>; 67 68 using raw_line_iterator = TriaRawIterator<CellAccessor>; 69 using line_iterator = TriaIterator<CellAccessor>; 70 using active_line_iterator = TriaActiveIterator<CellAccessor>; 71 72 using raw_quad_iterator = 73 TriaRawIterator<DoFInvalidAccessor<2, 1, spacedim>>; 74 using quad_iterator = TriaIterator<DoFInvalidAccessor<2, 1, spacedim>>; 75 using active_quad_iterator = 76 TriaActiveIterator<DoFInvalidAccessor<2, 1, spacedim>>; 77 78 using raw_hex_iterator = 79 TriaRawIterator<DoFInvalidAccessor<3, 1, spacedim>>; 80 using hex_iterator = TriaIterator<DoFInvalidAccessor<3, 1, spacedim>>; 81 using active_hex_iterator = 82 TriaActiveIterator<DoFInvalidAccessor<3, 1, spacedim>>; 83 84 using raw_cell_iterator = raw_line_iterator; 85 using cell_iterator = line_iterator; 86 using active_cell_iterator = active_line_iterator; 87 88 using raw_face_iterator = TriaRawIterator<FaceAccessor>; 89 using face_iterator = TriaIterator<FaceAccessor>; 90 using active_face_iterator = TriaActiveIterator<FaceAccessor>; 91 }; 92 93 94 95 /** 96 * Define some types for DoF handling in two dimensions. 97 * 98 * The types have the same meaning as those declared in 99 * internal::TriangulationImplementation::Iterators<2,spacedim>, only the 100 * treatment of templates is a little more complicated. See the 101 * @ref Iterators 102 * module for more information. 103 */ 104 template <int spacedim, bool lda> 105 struct Iterators<2, spacedim, lda> 106 { 107 using CellAccessor = dealii::DoFCellAccessor<2, spacedim, lda>; 108 using FaceAccessor = dealii::DoFAccessor<1, 2, spacedim, lda>; 109 110 using raw_line_iterator = TriaRawIterator<FaceAccessor>; 111 using line_iterator = TriaIterator<FaceAccessor>; 112 using active_line_iterator = TriaActiveIterator<FaceAccessor>; 113 114 using raw_quad_iterator = TriaRawIterator<CellAccessor>; 115 using quad_iterator = TriaIterator<CellAccessor>; 116 using active_quad_iterator = TriaActiveIterator<CellAccessor>; 117 118 using raw_hex_iterator = 119 TriaRawIterator<DoFInvalidAccessor<3, 2, spacedim>>; 120 using hex_iterator = TriaIterator<DoFInvalidAccessor<3, 2, spacedim>>; 121 using active_hex_iterator = 122 TriaActiveIterator<DoFInvalidAccessor<3, 2, spacedim>>; 123 124 using raw_cell_iterator = raw_quad_iterator; 125 using cell_iterator = quad_iterator; 126 using active_cell_iterator = active_quad_iterator; 127 128 using raw_face_iterator = raw_line_iterator; 129 using face_iterator = line_iterator; 130 using active_face_iterator = active_line_iterator; 131 }; 132 133 134 135 /** 136 * Define some types for DoF handling in three dimensions. 137 * 138 * The types have the same meaning as those declared in 139 * internal::TriangulationImplementation::Iterators<3,spacedim>, only the 140 * treatment of templates is a little more complicated. See the 141 * @ref Iterators 142 * module for more information. 143 */ 144 template <int spacedim, bool lda> 145 struct Iterators<3, spacedim, lda> 146 { 147 using CellAccessor = dealii::DoFCellAccessor<3, spacedim, lda>; 148 using FaceAccessor = dealii::DoFAccessor<2, 3, spacedim, lda>; 149 150 using raw_line_iterator = 151 TriaRawIterator<dealii::DoFAccessor<1, 3, spacedim, lda>>; 152 using line_iterator = 153 TriaIterator<dealii::DoFAccessor<1, 3, spacedim, lda>>; 154 using active_line_iterator = 155 TriaActiveIterator<dealii::DoFAccessor<1, 3, spacedim, lda>>; 156 157 using raw_quad_iterator = TriaRawIterator<FaceAccessor>; 158 using quad_iterator = TriaIterator<FaceAccessor>; 159 using active_quad_iterator = TriaActiveIterator<FaceAccessor>; 160 161 using raw_hex_iterator = TriaRawIterator<CellAccessor>; 162 using hex_iterator = TriaIterator<CellAccessor>; 163 using active_hex_iterator = TriaActiveIterator<CellAccessor>; 164 165 using raw_cell_iterator = raw_hex_iterator; 166 using cell_iterator = hex_iterator; 167 using active_cell_iterator = active_hex_iterator; 168 169 using raw_face_iterator = raw_quad_iterator; 170 using face_iterator = quad_iterator; 171 using active_face_iterator = active_quad_iterator; 172 }; 173 } // namespace DoFHandlerImplementation 174 } // namespace internal 175 176 DEAL_II_NAMESPACE_CLOSE 177 178 #endif // dealii_dof_iterator_selector_h 179