16 #ifndef dealii__tria_accessor_h 17 #define dealii__tria_accessor_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/exceptions.h> 22 #include <deal.II/base/geometry_info.h> 23 #include <deal.II/base/point.h> 24 #include <deal.II/grid/tria_iterator_base.h> 25 #include <deal.II/grid/tria_iterator_selector.h> 26 #include <deal.II/grid/cell_id.h> 31 DEAL_II_NAMESPACE_OPEN
38 template <
int dim,
int spacedim>
class Boundary;
39 template <
int dim,
int spacedim>
class Manifold;
73 type (
const int level)
87 void operator ++ ()
const 92 void operator -- ()
const 112 template <
int structdim,
int dim,
int spacedim>
class TriaAccessor;
113 template <
int dim,
int spacedim>
class TriaAccessor<0, dim, spacedim>;
114 template <
int spacedim>
class TriaAccessor<0, 1, spacedim>;
166 <<
"You can only set the child index if the cell has no " 167 <<
"children, or clear it. The given " 168 <<
"index was " << arg1 <<
" (-1 means: clear children)");
220 <<
"You can only set the child index of an even numbered child." 221 <<
"The number of the child given was " << arg1 <<
".");
251 template <
int structdim,
int dim,
int spacedim=dim>
260 static const unsigned int space_dimension = spacedim;
267 static const unsigned int dimension = dim;
274 static const unsigned int structure_dimension = structdim;
288 const int level = -1,
289 const int index = -1,
290 const AccessorData * = 0);
455 typename ::internal::TriaAccessor::PresentLevelType<structdim,dim>::type
present_level;
497 template <
int structdim,
int dim,
int spacedim=dim>
514 const int level = -1,
515 const int index = -1,
516 const AccessorData *local_data = 0);
531 template <
typename OtherAccessor>
548 void operator ++ ()
const;
549 void operator -- ()
const;
561 bool has_children ()
const;
581 template <
int structdim,
int dim,
int spacedim>
596 const int level = -1,
597 const int index = -1,
612 template <
int structdim2,
int dim2,
int spacedim2>
619 template <
int structdim2,
int dim2,
int spacedim2>
641 typename ::internal::Triangulation::Iterators<dim,spacedim>::vertex_iterator
642 vertex_iterator (
const unsigned int i)
const;
659 unsigned int vertex_index (
const unsigned int i)
const;
703 typename ::internal::Triangulation::Iterators<dim,spacedim>::line_iterator
704 line (
const unsigned int i)
const;
712 unsigned int line_index (
const unsigned int i)
const;
717 typename ::internal::Triangulation::Iterators<dim,spacedim>::quad_iterator
718 quad (
const unsigned int i)
const;
726 unsigned int quad_index (
const unsigned int i)
const;
749 bool face_orientation (
const unsigned int face)
const;
760 bool face_flip (
const unsigned int face)
const;
771 bool face_rotation (
const unsigned int face)
const;
783 bool line_orientation (
const unsigned int line)
const;
798 bool has_children ()
const;
804 unsigned int n_children()
const;
819 unsigned int number_of_children ()
const;
834 unsigned int max_refinement_depth ()
const;
840 child (
const unsigned int i)
const;
851 isotropic_child (
const unsigned int i)
const;
863 int child_index (
const unsigned int i)
const;
870 int isotropic_child_index (
const unsigned int i)
const;
964 bool at_boundary ()
const;
1056 bool user_flag_set ()
const;
1063 void set_user_flag ()
const;
1070 void clear_user_flag ()
const;
1077 void recursively_set_user_flag ()
const;
1084 void recursively_clear_user_flag ()
const;
1091 void clear_user_data ()
const;
1104 void set_user_pointer (
void *p)
const;
1111 void clear_user_pointer ()
const;
1128 void *user_pointer ()
const;
1151 void recursively_set_user_pointer (
void *p)
const;
1159 void recursively_clear_user_pointer ()
const;
1170 void set_user_index (
const unsigned int p)
const;
1177 void clear_user_index ()
const;
1190 unsigned int user_index ()
const;
1209 void recursively_set_user_index (
const unsigned int p)
const;
1219 void recursively_clear_user_index ()
const;
1238 double diameter ()
const;
1249 double extent_in_direction (
const unsigned int axis)
const;
1254 double minimum_vertex_distance ()
const;
1290 const bool use_laplace_transformation=
false)
const;
1322 double measure ()
const;
1356 void set (const ::internal::Triangulation::TriaObject<structdim> &o)
const;
1365 void set_line_orientation (
const unsigned int line,
1366 const bool orientation)
const;
1378 void set_face_orientation (
const unsigned int face,
1379 const bool orientation)
const;
1387 void set_face_flip (
const unsigned int face,
1388 const bool flip)
const;
1396 void set_face_rotation (
const unsigned int face,
1397 const bool rotation)
const;
1402 void set_used_flag ()
const;
1407 void clear_used_flag ()
const;
1426 void clear_refinement_case ()
const;
1434 void set_children (
const unsigned int i,
const int index)
const;
1440 void clear_children ()
const;
1457 friend struct ::internal::Triangulation::Implementation;
1458 friend struct ::internal::TriaAccessor::Implementation;
1479 template<
int dim,
int spacedim>
1488 static const unsigned int space_dimension = spacedim;
1495 static const unsigned int dimension = dim;
1502 static const unsigned int structure_dimension = 0;
1514 const unsigned int vertex_index);
1522 const int level = 0,
1523 const int index = 0,
1524 const AccessorData * = 0);
1529 template <
int structdim2,
int dim2,
int spacedim2>
1535 template <
int structdim2,
int dim2,
int spacedim2>
1547 static int level ();
1564 void operator ++ ();
1569 void operator -- ();
1607 unsigned int vertex_index (
const unsigned int i = 0)
const;
1620 typename ::internal::Triangulation::Iterators<dim,spacedim>::line_iterator
1621 static line (
const unsigned int);
1626 static unsigned int line_index (
const unsigned int i);
1632 typename ::internal::Triangulation::Iterators<dim,spacedim>::quad_iterator
1633 quad (
const unsigned int i);
1638 static unsigned int quad_index (
const unsigned int i);
1655 double diameter ()
const;
1664 double extent_in_direction (
const unsigned int axis)
const;
1674 const bool use_laplace_transformation=
false)
const;
1684 double measure ()
const;
1699 static bool face_orientation (
const unsigned int face);
1704 static bool face_flip (
const unsigned int face);
1709 static bool face_rotation (
const unsigned int face);
1714 static bool line_orientation (
const unsigned int line);
1730 static bool has_children ();
1736 static unsigned int n_children();
1742 static unsigned int number_of_children ();
1747 static unsigned int max_refinement_depth ();
1754 child (
const unsigned int);
1761 isotropic_child (
const unsigned int);
1773 int child_index (
const unsigned int i);
1779 int isotropic_child_index (
const unsigned int i);
1812 template <
typename Accessor>
friend class TriaIterator;
1827 template <
int spacedim>
1836 static const unsigned int space_dimension = spacedim;
1843 static const unsigned int dimension = 1;
1850 static const unsigned int structure_dimension = 0;
1890 const unsigned int vertex_index);
1900 const AccessorData * = 0);
1905 template <
int structdim2,
int dim2,
int spacedim2>
1911 template <
int structdim2,
int dim2,
int spacedim2>
1931 static int level ();
1949 void operator ++ ()
const;
1955 void operator -- ()
const;
1992 unsigned int vertex_index (
const unsigned int i = 0)
const;
2011 typename ::internal::Triangulation::Iterators<1,spacedim>::line_iterator
2012 static line (
const unsigned int);
2020 static unsigned int line_index (
const unsigned int i);
2026 typename ::internal::Triangulation::Iterators<1,spacedim>::quad_iterator
2027 quad (
const unsigned int i);
2035 static unsigned int quad_index (
const unsigned int i);
2046 bool at_boundary ()
const;
2083 static bool face_orientation (
const unsigned int face);
2088 static bool face_flip (
const unsigned int face);
2093 static bool face_rotation (
const unsigned int face);
2098 static bool line_orientation (
const unsigned int line);
2114 static bool has_children ();
2120 static unsigned int n_children();
2126 static unsigned int number_of_children ();
2131 static unsigned int max_refinement_depth ();
2138 child (
const unsigned int);
2145 isotropic_child (
const unsigned int);
2157 int child_index (
const unsigned int i);
2163 int isotropic_child_index (
const unsigned int i);
2281 template <
int dim,
int spacedim=dim>
2306 const int level = -1,
2307 const int index = -1,
2308 const AccessorData *local_data = 0);
2327 template <
int structdim2,
int dim2,
int spacedim2>
2334 template <
int structdim2,
int dim2,
int spacedim2>
2353 child (
const unsigned int i)
const;
2359 face (
const unsigned int i)
const;
2371 face_index (
const unsigned int i)
const;
2421 neighbor_child_on_subface (
const unsigned int face_no,
2422 const unsigned int subface_no)
const;
2446 neighbor (
const unsigned int i)
const;
2452 int neighbor_index (
const unsigned int i)
const;
2458 int neighbor_level (
const unsigned int i)
const;
2471 unsigned int neighbor_of_neighbor (
const unsigned int neighbor)
const;
2483 bool neighbor_is_coarser (
const unsigned int neighbor)
const;
2499 std::pair<unsigned int, unsigned int>
2500 neighbor_of_coarser_neighbor (
const unsigned int neighbor)
const;
2508 unsigned int neighbor_face_no (
const unsigned int neighbor)
const;
2523 bool has_periodic_neighbor(
const unsigned int i)
const;
2542 periodic_neighbor (
const unsigned int i)
const;
2552 neighbor_or_periodic_neighbor (
const unsigned int i)
const;
2569 periodic_neighbor_child_on_subface (
const unsigned int face_no,
2570 const unsigned int subface_no)
const;
2581 std::pair<unsigned int, unsigned int>
2582 periodic_neighbor_of_coarser_periodic_neighbor (
const unsigned face_no)
const;
2590 periodic_neighbor_index (
const unsigned int i)
const;
2598 periodic_neighbor_level (
const unsigned int i)
const;
2615 periodic_neighbor_of_periodic_neighbor (
const unsigned int i)
const;
2623 periodic_neighbor_face_no (
const unsigned int i)
const;
2632 periodic_neighbor_is_coarser (
const unsigned int i)
const;
2650 bool at_boundary (
const unsigned int i)
const;
2660 bool at_boundary ()
const;
2669 bool has_boundary_lines ()
const;
2719 void clear_refine_flag ()
const;
2728 bool flag_for_face_refinement (
const unsigned int face_no,
2736 bool flag_for_line_refinement (
const unsigned int line_no)
const;
2751 bool coarsen_flag_set ()
const;
2757 void set_coarsen_flag ()
const;
2762 void clear_coarsen_flag ()
const;
2899 bool direction_flag ()
const;
2926 unsigned int active_cell_index ()
const;
2935 int parent_index ()
const;
2964 bool active ()
const;
2985 bool is_locally_owned ()
const;
2991 bool is_locally_owned_on_level ()
const;
3016 bool is_ghost ()
const;
3044 bool is_artificial ()
const;
3069 void set_neighbor (
const unsigned int i,
3121 unsigned int neighbor_of_neighbor_internal (
const unsigned int neighbor)
const;
3128 template<
int dim_,
int spacedim_ >
3138 void set_active_cell_index (
const unsigned int active_cell_index);
3143 void set_parent (
const unsigned int parent_index);
3151 void set_direction_flag (
const bool new_direction_flag)
const;
3165 friend struct ::internal::Triangulation::Implementation;
3174 template <
int structdim,
int dim,
int spacedim>
3175 template <
typename OtherAccessor>
3180 ExcMessage (
"You are attempting an illegal conversion between " 3181 "iterator/accessor types. The constructor you call " 3182 "only exists to make certain template constructs " 3183 "easier to write as dimension independent code but " 3184 "the conversion is not valid in the current context."));
3189 template <
int structdim,
int dim,
int spacedim>
3190 template <
int structdim2,
int dim2,
int spacedim2>
3195 ExcMessage (
"You are attempting an illegal conversion between " 3196 "iterator/accessor types. The constructor you call " 3197 "only exists to make certain template constructs " 3198 "easier to write as dimension independent code but " 3199 "the conversion is not valid in the current context."));
3204 template <
int dim,
int spacedim>
3205 template <
int structdim2,
int dim2,
int spacedim2>
3210 ExcMessage (
"You are attempting an illegal conversion between " 3211 "iterator/accessor types. The constructor you call " 3212 "only exists to make certain template constructs " 3213 "easier to write as dimension independent code but " 3214 "the conversion is not valid in the current context."));
3219 template <
int structdim,
int dim,
int spacedim>
3220 template <
int structdim2,
int dim2,
int spacedim2>
3225 ExcMessage (
"You are attempting an illegal conversion between " 3226 "iterator/accessor types. The constructor you call " 3227 "only exists to make certain template constructs " 3228 "easier to write as dimension independent code but " 3229 "the conversion is not valid in the current context."));
3234 template <
int dim,
int spacedim>
3235 template <
int structdim2,
int dim2,
int spacedim2>
3240 ExcMessage (
"You are attempting an illegal conversion between " 3241 "iterator/accessor types. The constructor you call " 3242 "only exists to make certain template constructs " 3243 "easier to write as dimension independent code but " 3244 "the conversion is not valid in the current context."));
3262 DEAL_II_NAMESPACE_CLOSE
3265 # include "tria_accessor.templates.h"
TriaAccessor< dim, dim, spacedim >::AccessorData AccessorData
static::ExceptionBase & ExcUnusedCellAsChild()
static::ExceptionBase & ExcCellHasNoChildren()
static::ExceptionBase & ExcNeighborIsNotCoarser()
static::ExceptionBase & ExcUnusedCellAsNeighbor()
unsigned int global_vertex_index
static::ExceptionBase & ExcNeighborIsCoarser()
unsigned char material_id
const Triangulation< dim, spacedim > * tria
TriaAccessorBase< structdim, dim, spacedim >::AccessorData AccessorData
const Triangulation< 1, spacedim > * tria
static::ExceptionBase & ExcFacesHaveNoLevel()
static::ExceptionBase & ExcCellNotUsed()
TriaAccessorBase< structdim, dim, spacedim >::AccessorData AccessorData
static::ExceptionBase & ExcMessage(std::string arg1)
#define DeclException1(Exception1, type1, outsequence)
static::ExceptionBase & ExcSetOnlyEvenChildren(int arg1)
#define Assert(cond, exc)
TriaAccessor(const Triangulation< dim, spacedim > *parent=0, const int level=-1, const int index=-1, const AccessorData *local_data=0)
static::ExceptionBase & ExcUncaughtCase()
const Triangulation< dim, spacedim > * tria
#define DeclException0(Exception0)
static::ExceptionBase & ExcCellNotActive()
typename::internal::TriaAccessor::PresentLevelType< structdim, dim >::type present_level
static::ExceptionBase & ExcNoPeriodicNeighbor()
static::ExceptionBase & ExcCantSetChildren(int arg1)
unsigned int subdomain_id
bool point_inside(const Point< spacedim > &p) const
static::ExceptionBase & ExcCellHasNoParent()
CellAccessor(const Triangulation< dim, spacedim > *parent=0, const int level=-1, const int index=-1, const AccessorData *local_data=0)
Triangulation< dim, spacedim > Container
InvalidAccessor(const Triangulation< dim, spacedim > *parent=0, const int level=-1, const int index=-1, const AccessorData *local_data=0)
unsigned char boundary_id
unsigned int global_vertex_index
void set_all_manifold_ids(const types::manifold_id) const
static::ExceptionBase & ExcDereferenceInvalidObject()
static::ExceptionBase & ExcInternalError()
static::ExceptionBase & ExcCantCompareIterators()