17 #ifndef __deal2__tria_h 18 #define __deal2__tria_h 21 #include <deal.II/base/config.h> 22 #include <deal.II/base/point.h> 23 #include <deal.II/base/subscriptor.h> 24 #include <deal.II/base/smartpointer.h> 25 #include <deal.II/base/geometry_info.h> 26 #include <deal.II/base/std_cxx1x/function.h> 27 #include <deal.II/grid/tria_iterator_selector.h> 28 #include <deal.II/grid/tria_faces.h> 29 #include <deal.II/grid/tria_levels.h> 31 #include <boost/signals2.hpp> 32 #include <boost/serialization/vector.hpp> 33 #include <boost/serialization/map.hpp> 34 #include <boost/serialization/split_member.hpp> 43 template <
int dim,
int spacedim>
class Boundary;
47 template <
int spacedim>
class TriaAccessor<0,1,spacedim>;
53 template <
int dim>
class TriaLevel;
65 struct Implementation;
70 struct Implementation;
74 template <
int dim,
int spacedim>
class DoFHandler;
77 template <
int dim,
int spacedim>
class DoFHandler;
97 template <
int structdim>
187 bool check_consistency (
const unsigned int dim)
const;
280 std::size_t memory_consumption ()
const;
286 template <
class Archive>
287 void serialize (Archive &ar,
288 const unsigned int version);
345 std::size_t memory_consumption ()
const;
351 template <
class Archive>
352 void serialize (Archive &ar,
353 const unsigned int version);
410 std::size_t memory_consumption ()
const;
416 template <
class Archive>
417 void serialize (Archive &ar,
418 const unsigned int version);
1215 template <
int dim,
int spacedim=dim>
1291 limit_level_difference_at_vertices = 0x1,
1311 eliminate_unrefined_islands = 0x2,
1328 patch_level_1 = 0x4,
1350 coarsest_level_1 = 0x8,
1377 allow_anisotropic_smoothing = 0x10,
1410 eliminate_refined_inner_islands = 0x100,
1415 eliminate_refined_boundary_islands = 0x200,
1421 do_not_produce_unrefined_islands = 0x400,
1427 smoothing_on_refinement = (limit_level_difference_at_vertices |
1428 eliminate_unrefined_islands),
1433 smoothing_on_coarsening = (eliminate_refined_inner_islands |
1434 eliminate_refined_boundary_islands |
1435 do_not_produce_unrefined_islands),
1442 maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing
1451 typedef typename IteratorSelector::line_iterator line_iterator;
1452 typedef typename IteratorSelector::active_line_iterator active_line_iterator;
1454 typedef typename IteratorSelector::quad_iterator quad_iterator;
1455 typedef typename IteratorSelector::active_quad_iterator active_quad_iterator;
1457 typedef typename IteratorSelector::hex_iterator hex_iterator;
1458 typedef typename IteratorSelector::active_hex_iterator active_hex_iterator;
1633 std::list<typename Triangulation<dim,spacedim>::cell_iterator>
1642 static const unsigned int dimension = dim;
1648 static const unsigned int space_dimension = spacedim;
1677 const bool check_for_distorted_cells =
false);
1728 virtual void clear ();
1738 virtual void set_mesh_smoothing (
const MeshSmoothing mesh_smoothing);
1847 std::vector<types::boundary_id> get_boundary_indicators()
const;
1985 virtual void create_triangulation (
const std::vector<
Point<spacedim> > &vertices,
2005 virtual void create_triangulation_compatibility (
2020 void flip_all_direction_flags();
2042 void distort_random (
const double factor,
2062 void set_all_refine_flags ();
2087 void refine_global (const
unsigned int times = 1);
2146 virtual
void execute_coarsening_and_refinement ();
2200 bool prepare_coarsening_and_refinement ();
2223 void add_refinement_listener (RefinementListener &listener) const
DEAL_II_DEPRECATED;
2241 void remove_refinement_listener (RefinementListener &listener) const DEAL_II_DEPRECATED;
2253 boost::signals2::signal<void ()> create;
2254 boost::signals2::signal<void ()> pre_refinement;
2255 boost::signals2::signal<void ()> post_refinement;
2256 boost::signals2::signal<void (const Triangulation<dim, spacedim> &original_tria)> copy;
2257 boost::signals2::signal<void ()> clear;
2258 boost::signals2::signal<void ()> any_change;
2279 void save_refine_flags (std::ostream &out)
const;
2285 void save_refine_flags (std::vector<bool> &v)
const;
2291 void load_refine_flags (std::istream &in);
2297 void load_refine_flags (
const std::vector<bool> &v);
2302 void save_coarsen_flags (std::ostream &out)
const;
2308 void save_coarsen_flags (std::vector<bool> &v)
const;
2313 void load_coarsen_flags (std::istream &out);
2318 void load_coarsen_flags (
const std::vector<bool> &v);
2325 bool get_anisotropic_refinement_flag()
const;
2337 void clear_user_flags ();
2347 void save_user_flags (std::ostream &out)
const;
2356 void save_user_flags (std::vector<bool> &v)
const;
2363 void load_user_flags (std::istream &in);
2370 void load_user_flags (
const std::vector<bool> &v);
2376 void clear_user_flags_line ();
2382 void save_user_flags_line (std::ostream &out)
const;
2391 void save_user_flags_line (std::vector<bool> &v)
const;
2397 void load_user_flags_line (std::istream &in);
2403 void load_user_flags_line (
const std::vector<bool> &v);
2409 void clear_user_flags_quad ();
2415 void save_user_flags_quad (std::ostream &out)
const;
2424 void save_user_flags_quad (std::vector<bool> &v)
const;
2430 void load_user_flags_quad (std::istream &in);
2436 void load_user_flags_quad (
const std::vector<bool> &v);
2443 void clear_user_flags_hex ();
2449 void save_user_flags_hex (std::ostream &out)
const;
2458 void save_user_flags_hex (std::vector<bool> &v)
const;
2464 void load_user_flags_hex (std::istream &in);
2470 void load_user_flags_hex (
const std::vector<bool> &v);
2478 void clear_user_data ();
2495 void save_user_indices (
std::vector<
unsigned int> &v) const;
2502 void load_user_indices (const
std::vector<
unsigned int> &v);
2510 void save_user_pointers (
std::vector<
void *> &v) const;
2517 void load_user_pointers (const
std::vector<
void *> &v);
2525 void save_user_indices_line (
std::vector<
unsigned int> &v) const;
2532 void load_user_indices_line (const
std::vector<
unsigned int> &v);
2540 void save_user_indices_quad (
std::vector<
unsigned int> &v) const;
2547 void load_user_indices_quad (const
std::vector<
unsigned int> &v);
2555 void save_user_indices_hex (
std::vector<
unsigned int> &v) const;
2562 void load_user_indices_hex (const
std::vector<
unsigned int> &v);
2569 void save_user_pointers_line (
std::vector<
void *> &v) const;
2576 void load_user_pointers_line (const
std::vector<
void *> &v);
2584 void save_user_pointers_quad (
std::vector<
void *> &v) const;
2591 void load_user_pointers_quad (const
std::vector<
void *> &v);
2599 void save_user_pointers_hex (
std::vector<
void *> &v) const;
2606 void load_user_pointers_hex (const
std::vector<
void *> &v);
2618 cell_iterator begin (const
unsigned int level = 0) const;
2632 active_cell_iterator begin_active(const
unsigned int level = 0) const;
2640 cell_iterator end () const;
2648 cell_iterator end (const
unsigned int level) const;
2655 active_cell_iterator end_active (const
unsigned int level) const;
2662 cell_iterator last () const;
2668 active_cell_iterator last_active () const;
2681 face_iterator begin_face () const;
2687 active_face_iterator begin_active_face() const;
2695 face_iterator end_face () const;
2727 unsigned int n_lines () const;
2733 unsigned int n_lines (const
unsigned int level) const;
2738 unsigned int n_active_lines () const;
2744 unsigned int n_active_lines (const
unsigned int level) const;
2750 unsigned int n_quads () const;
2756 unsigned int n_quads (const
unsigned int level) const;
2762 unsigned int n_active_quads () const;
2768 unsigned int n_active_quads (const
unsigned int level) const;
2774 unsigned int n_hexs() const;
2781 unsigned int n_hexs(const
unsigned int level) const;
2787 unsigned int n_active_hexs() const;
2794 unsigned int n_active_hexs(const
unsigned int level) const;
2802 unsigned int n_cells () const;
2810 unsigned int n_cells (const
unsigned int level) const;
2817 unsigned int n_active_cells () const;
2825 unsigned int n_active_cells (const
unsigned int level) const;
2835 unsigned int n_faces () const;
2845 unsigned int n_active_faces () const;
2857 unsigned int n_levels () const;
2865 virtual
unsigned int n_global_levels () const;
2881 unsigned int n_vertices () const;
2900 const
std::vector<
Point<spacedim> > &
2901 get_vertices () const;
2909 unsigned int n_used_vertices () const;
2915 bool vertex_used (const
unsigned int index) const;
2924 const
std::vector<
bool> &
2925 get_used_vertices () const;
2950 unsigned int max_adjacent_cells () const;
2963 virtual
types::subdomain_id locally_owned_subdomain () const;
2988 unsigned int n_raw_lines () const;
3007 unsigned int n_raw_lines (const
unsigned int level) const;
3026 unsigned int n_raw_quads () const;
3045 unsigned int n_raw_quads (const
unsigned int level) const;
3064 unsigned int n_raw_hexs () const;
3083 unsigned int n_raw_hexs (const
unsigned int level) const;
3102 unsigned int n_raw_cells (const
unsigned int level) const;
3123 unsigned int n_raw_faces () const;
3139 virtual
std::
size_t memory_consumption () const;
3153 template <class Archive>
3154 void save (Archive &ar,
3155 const
unsigned int version) const;
3181 template <class Archive>
3182 void load (Archive &ar,
3183 const
unsigned int version);
3185 BOOST_SERIALIZATION_SPLIT_MEMBER()
3197 << "The given level " << arg1
3198 << " is not in the valid range!");
3208 DeclException0 (ExcTriangulationNotEmpty);
3214 DeclException0 (ExcGridReadError);
3219 DeclException0 (ExcFacesHaveNoLevel);
3228 << "You tried to do something on level " << arg1
3229 << ", but this level is empty.");
3234 DeclException0 (ExcNonOrientableTriangulation);
3271 static
void write_bool_vector (const
unsigned int magic_number1,
3272 const
std::vector<
bool> &v,
3273 const
unsigned int magic_number2,
3281 static
void read_bool_vector (const
unsigned int magic_number1,
3282 std::vector<
bool> &v,
3283 const
unsigned int magic_number2,
3306 typedef typename IteratorSelector::raw_line_iterator raw_line_iterator;
3307 typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator;
3308 typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
3316 raw_cell_iterator begin_raw (const
unsigned int level = 0) const;
3324 raw_cell_iterator end_raw (const
unsigned int level) const;
3345 begin_raw_line (const
unsigned int level = 0) const;
3352 begin_line (const
unsigned int level = 0) const;
3358 active_line_iterator
3359 begin_active_line(const
unsigned int level = 0) const;
3367 line_iterator end_line () const;
3387 begin_raw_quad (const
unsigned int level = 0) const;
3394 begin_quad (const
unsigned int level = 0) const;
3400 active_quad_iterator
3401 begin_active_quad (const
unsigned int level = 0) const;
3427 begin_raw_hex (const
unsigned int level = 0) const;
3434 begin_hex (const
unsigned int level = 0) const;
3441 begin_active_hex (const
unsigned int level = 0) const;
3477 void clear_despite_subscriptions ();
3499 DistortedCellList execute_refinement ();
3509 void execute_coarsening ();
3516 void fix_coarsen_flags ();
3545 std::vector<
bool> vertices_used;
3560 bool anisotropic_refinement;
3569 const
bool check_for_distorted_cells;
3612 std::map<
unsigned int,
types::boundary_id> *vertex_to_boundary_id_map_1d;
3626 std::multimap<const RefinementListener *,
std::vector<boost::signals2::
connection> >
3627 refinement_listener_map;
3633 friend class TriaAccessor<0, 1, spacedim>;
3637 friend struct ::
internal::TriaAccessor::Implementation;
3651 template <
int structdim>
3655 for (
unsigned int i=0; i<GeometryInfo<structdim>::vertices_per_cell; ++i)
3667 template <
class Archive>
3672 ar &n_lines &n_lines_level;
3673 ar &n_active_lines &n_active_lines_level;
3677 template <
class Archive>
3679 const unsigned int version)
3683 ar &n_quads &n_quads_level;
3684 ar &n_active_quads &n_active_quads_level;
3688 template <
class Archive>
3690 const unsigned int version)
3694 ar &n_hexes &n_hexes_level;
3695 ar &n_active_hexes &n_active_hexes_level;
3702 template <
int dim,
int spacedim>
3707 Assert (index < vertices_used.size(),
3709 return vertices_used[index];
3714 template <
int dim,
int spacedim>
3718 return number_cache.n_levels;
3721 template <
int dim,
int spacedim>
3725 return number_cache.n_levels;
3729 template <
int dim,
int spacedim>
3734 return vertices.size();
3739 template <
int dim,
int spacedim>
3741 const std::vector<Point<spacedim> > &
3748 template <
int dim,
int spacedim>
3749 template <
class Archive>
3752 const unsigned int)
const 3764 ar &anisotropic_refinement;
3767 ar &check_for_distorted_cells;
3770 ar &vertex_to_boundary_id_map_1d;
3775 template <
int dim,
int spacedim>
3776 template <
class Archive>
3795 ar &anisotropic_refinement;
3798 bool my_check_for_distorted_cells;
3799 ar &my_check_for_distorted_cells;
3801 Assert (my_check_for_distorted_cells == check_for_distorted_cells,
3802 ExcMessage (
"The triangulation loaded into here must have the " 3803 "same setting with regard to reporting distorted " 3804 "cell as the one previously stored."));
3807 ar &vertex_to_boundary_id_map_1d;
3865 DEAL_II_NAMESPACE_CLOSE
3871 #include <deal.II/grid/tria_accessor.h> std::vector< CellData< 1 > > boundary_lines
static const unsigned int invalid_unsigned_int
const std::vector< Point< spacedim > > & get_vertices() const
virtual unsigned int n_global_levels() const
std::list< typename Triangulation< dim, spacedim >::cell_iterator > distorted_cells
unsigned char material_id
::ExceptionBase & ExcMessage(std::string arg1)
std::vector< unsigned int > n_active_lines_level
std::vector< unsigned int > n_hexes_level
std::vector< unsigned int > n_quads_level
std::vector< unsigned int > n_active_quads_level
void serialize(Archive &ar, const unsigned int version)
unsigned int n_levels() const
unsigned int n_active_quads() const
unsigned int n_raw_lines() const
#define DeclException1(Exception1, type1, outsequence)
#define Assert(cond, exc)
unsigned int n_raw_quads() const
void load(Archive &ar, const unsigned int version)
::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
::internal::Triangulation::Iterators< dim, spacedim > IteratorSelector
BlockCompressedSparsityPattern CompressedBlockSparsityPattern DEAL_II_DEPRECATED
bool vertex_used(const unsigned int index) const
std::vector< unsigned int > n_active_hexes_level
void serialize(Archive &ar, const unsigned int version)
void save(Archive &ar, const unsigned int version) const
unsigned int n_active_quads
std::vector< CellData< 2 > > boundary_quads
void serialize(Archive &ar, const unsigned int version)
static const StraightBoundary< dim, spacedim > straight_boundary
unsigned int n_quads() const
unsigned int n_raw_hexs() const
unsigned char boundary_id
unsigned int max_adjacent_cells() const
unsigned int n_vertices() const
unsigned int n_active_hexes
unsigned int n_active_lines
std::vector< unsigned int > n_lines_level