00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__tria_h
00013 #define __deal2__tria_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/point.h>
00018 #include <deal.II/base/subscriptor.h>
00019 #include <deal.II/base/smartpointer.h>
00020 #include <deal.II/base/geometry_info.h>
00021 #include <deal.II/base/std_cxx1x/function.h>
00022 #include <deal.II/grid/tria_iterator_selector.h>
00023 #include <deal.II/grid/tria_faces.h>
00024 #include <deal.II/grid/tria_levels.h>
00025
00026 #include <boost/signals2.hpp>
00027 #include <boost/serialization/vector.hpp>
00028 #include <boost/serialization/map.hpp>
00029 #include <boost/serialization/split_member.hpp>
00030
00031 #include <vector>
00032 #include <list>
00033 #include <map>
00034
00035
00036 DEAL_II_NAMESPACE_OPEN
00037
00038 template <int dim, int spacedim> class Boundary;
00039 template <int dim, int spacedim> class StraightBoundary;
00040
00041 template <int, int, int> class TriaAccessor;
00042 template <int spacedim> class TriaAccessor<0,1,spacedim>;
00043
00044 namespace internal
00045 {
00046 namespace Triangulation
00047 {
00048 template <int dim> class TriaLevel;
00049 template <int dim> class TriaFaces;
00050
00058 struct Implementation;
00059 }
00060
00061 namespace TriaAccessor
00062 {
00063 struct Implementation;
00064 }
00065 }
00066
00067 template <int dim, int spacedim> class DoFHandler;
00068 namespace hp
00069 {
00070 template <int dim, int spacedim> class DoFHandler;
00071 }
00072 template <int dim, int spacedim> class MGDoFHandler;
00073
00074
00075
00076
00090 template <int structdim>
00091 struct CellData
00092 {
00097 unsigned int vertices[GeometryInfo<structdim>::vertices_per_cell];
00098
00111 union
00112 {
00113 types::boundary_id_t boundary_id;
00114 types::material_id_t material_id;
00115 };
00116 };
00117
00118
00119
00145 struct SubCellData
00146 {
00152 std::vector<CellData<1> > boundary_lines;
00153
00159 std::vector<CellData<2> > boundary_quads;
00160
00174 bool check_consistency (const unsigned int dim) const;
00175 };
00176
00177
00178
00179
00180
00181 namespace internal
00182 {
00187 namespace Triangulation
00188 {
00189
00204 template <int dim>
00205 struct NumberCache
00206 {
00207 };
00208
00222 template <>
00223 struct NumberCache<1>
00224 {
00230 unsigned int n_levels;
00231
00236 unsigned int n_lines;
00237
00242 std::vector<unsigned int> n_lines_level;
00243
00248 unsigned int n_active_lines;
00249
00254 std::vector<unsigned int> n_active_lines_level;
00255
00260 NumberCache ();
00261
00267 std::size_t memory_consumption () const;
00268
00273 template <class Archive>
00274 void serialize (Archive & ar,
00275 const unsigned int version);
00276 };
00277
00278
00294 template <>
00295 struct NumberCache<2> : public NumberCache<1>
00296 {
00301 unsigned int n_quads;
00302
00307 std::vector<unsigned int> n_quads_level;
00308
00313 unsigned int n_active_quads;
00314
00319 std::vector<unsigned int> n_active_quads_level;
00320
00325 NumberCache ();
00326
00332 std::size_t memory_consumption () const;
00333
00338 template <class Archive>
00339 void serialize (Archive & ar,
00340 const unsigned int version);
00341 };
00342
00343
00359 template <>
00360 struct NumberCache<3> : public NumberCache<2>
00361 {
00366 unsigned int n_hexes;
00367
00372 std::vector<unsigned int> n_hexes_level;
00373
00378 unsigned int n_active_hexes;
00379
00384 std::vector<unsigned int> n_active_hexes_level;
00385
00390 NumberCache ();
00391
00397 std::size_t memory_consumption () const;
00398
00403 template <class Archive>
00404 void serialize (Archive & ar,
00405 const unsigned int version);
00406 };
00407 }
00408 }
00409
00410
00411
00412
00413
01431 template <int dim, int spacedim=dim>
01432 class Triangulation : public Subscriptor
01433 {
01434 private:
01435
01441 typedef internal::Triangulation::Iterators<dim, spacedim> IteratorSelector;
01442
01443 public:
01450 static const StraightBoundary<dim,spacedim> straight_boundary;
01451
01459 enum MeshSmoothing
01460 {
01461 none = 0x0,
01462 limit_level_difference_at_vertices = 0x1,
01463 eliminate_unrefined_islands = 0x2,
01464 patch_level_1 = 0x4,
01465 coarsest_level_1 = 0x8,
01466
01467 allow_anisotropic_smoothing = 0x10,
01468
01469 eliminate_refined_inner_islands = 0x100,
01470 eliminate_refined_boundary_islands = 0x200,
01471 do_not_produce_unrefined_islands = 0x400,
01472
01473 smoothing_on_refinement = (limit_level_difference_at_vertices |
01474 eliminate_unrefined_islands),
01475 smoothing_on_coarsening = (eliminate_refined_inner_islands |
01476 eliminate_refined_boundary_islands |
01477 do_not_produce_unrefined_islands),
01478
01479 maximum_smoothing = 0xffff ^ allow_anisotropic_smoothing
01480 };
01481
01482
01483 typedef typename IteratorSelector::CellAccessor cell_accessor;
01484 typedef typename IteratorSelector::FaceAccessor face_accessor;
01485
01486 typedef typename IteratorSelector::raw_line_iterator raw_line_iterator;
01487 typedef typename IteratorSelector::line_iterator line_iterator;
01488 typedef typename IteratorSelector::active_line_iterator active_line_iterator;
01489
01490 typedef typename IteratorSelector::raw_quad_iterator raw_quad_iterator;
01491 typedef typename IteratorSelector::quad_iterator quad_iterator;
01492 typedef typename IteratorSelector::active_quad_iterator active_quad_iterator;
01493
01494 typedef typename IteratorSelector::raw_hex_iterator raw_hex_iterator;
01495 typedef typename IteratorSelector::hex_iterator hex_iterator;
01496 typedef typename IteratorSelector::active_hex_iterator active_hex_iterator;
01497
01498 typedef typename IteratorSelector::raw_cell_iterator raw_cell_iterator;
01499 typedef typename IteratorSelector::cell_iterator cell_iterator;
01500 typedef typename IteratorSelector::active_cell_iterator active_cell_iterator;
01501
01502 typedef typename IteratorSelector::raw_face_iterator raw_face_iterator;
01503 typedef typename IteratorSelector::face_iterator face_iterator;
01504 typedef typename IteratorSelector::active_face_iterator active_face_iterator;
01505
01521 class RefinementListener
01522 {
01523 public:
01536 virtual ~RefinementListener ();
01537
01552 virtual
01553 void
01554 pre_refinement_notification (const Triangulation<dim, spacedim> &tria);
01555
01570 virtual
01571 void
01572 post_refinement_notification (const Triangulation<dim, spacedim> &tria);
01573
01595 virtual
01596 void
01597 copy_notification (const Triangulation<dim, spacedim> &old_tria,
01598 const Triangulation<dim, spacedim> &new_tria);
01599
01618 virtual
01619 void
01620 create_notification (const Triangulation<dim, spacedim> &tria);
01621 };
01622
01657 struct DistortedCellList : public ::ExceptionBase
01658 {
01670 virtual ~DistortedCellList () throw();
01671
01679 std::list<typename Triangulation<dim,spacedim>::cell_iterator>
01680 distorted_cells;
01681 };
01682
01683
01688 static const unsigned int dimension = dim;
01689
01694 static const unsigned int space_dimension = spacedim;
01695
01722 Triangulation (const MeshSmoothing smooth_grid = none,
01723 const bool check_for_distorted_cells = false);
01724
01757 Triangulation (const Triangulation<dim, spacedim> &t);
01758
01763 virtual ~Triangulation ();
01764
01774 virtual void clear ();
01775
01784 virtual void set_mesh_smoothing (const MeshSmoothing mesh_smoothing);
01785
01839 void set_boundary (const types::boundary_id_t number,
01840 const Boundary<dim,spacedim> &boundary_object);
01841
01851 void set_boundary (const types::boundary_id_t number);
01852
01860 const Boundary<dim,spacedim> & get_boundary (const types::boundary_id_t number) const;
01861
01875 std::vector<types::boundary_id_t> get_boundary_indicators() const;
01876
01926 virtual void copy_triangulation (const Triangulation<dim, spacedim> &old_tria);
01927
02013 virtual void create_triangulation (const std::vector<Point<spacedim> > &vertices,
02014 const std::vector<CellData<dim> > &cells,
02015 const SubCellData &subcelldata);
02016
02033 virtual void create_triangulation_compatibility (
02034 const std::vector<Point<spacedim> > &vertices,
02035 const std::vector<CellData<dim> > &cells,
02036 const SubCellData &subcelldata);
02037
02048 void flip_all_direction_flags();
02049
02068 void distort_random (const double factor,
02069 const bool keep_boundary=true);
02070
02071
02088 void set_all_refine_flags ();
02089
02113 void refine_global (const unsigned int times);
02114
02172 virtual void execute_coarsening_and_refinement ();
02173
02226 bool prepare_coarsening_and_refinement ();
02249 void add_refinement_listener (RefinementListener &listener) const;
02250
02267 void remove_refinement_listener (RefinementListener &listener) const;
02268
02277 struct Signals
02278 {
02279 boost::signals2::signal<void ()> create;
02280 boost::signals2::signal<void ()> pre_refinement;
02281 boost::signals2::signal<void ()> post_refinement;
02282 boost::signals2::signal<void (const Triangulation<dim, spacedim> &original_tria)> copy;
02283 boost::signals2::signal<void ()> clear;
02284 boost::signals2::signal<void ()> any_change;
02285 };
02286
02290 mutable Signals signals;
02291
02305 void save_refine_flags (std::ostream &out) const;
02306
02311 void save_refine_flags (std::vector<bool> &v) const;
02312
02317 void load_refine_flags (std::istream &in);
02318
02323 void load_refine_flags (const std::vector<bool> &v);
02324
02328 void save_coarsen_flags (std::ostream &out) const;
02329
02334 void save_coarsen_flags (std::vector<bool> &v) const;
02335
02339 void load_coarsen_flags (std::istream &out);
02340
02344 void load_coarsen_flags (const std::vector<bool> &v);
02345
02351 bool get_anisotropic_refinement_flag() const;
02362 void clear_user_flags ();
02363
02371 void save_user_flags (std::ostream &out) const;
02372
02379 void save_user_flags (std::vector<bool> &v) const;
02380
02385 void load_user_flags (std::istream &in);
02386
02391 void load_user_flags (const std::vector<bool> &v);
02392
02396 void clear_user_flags_line ();
02397
02401 void save_user_flags_line (std::ostream &out) const;
02402
02409 void save_user_flags_line (std::vector<bool> &v) const;
02410
02414 void load_user_flags_line (std::istream &in);
02415
02419 void load_user_flags_line (const std::vector<bool> &v);
02420
02424 void clear_user_flags_quad ();
02425
02429 void save_user_flags_quad (std::ostream &out) const;
02430
02437 void save_user_flags_quad (std::vector<bool> &v) const;
02438
02442 void load_user_flags_quad (std::istream &in);
02443
02447 void load_user_flags_quad (const std::vector<bool> &v);
02448
02449
02453 void clear_user_flags_hex ();
02454
02458 void save_user_flags_hex (std::ostream &out) const;
02459
02466 void save_user_flags_hex (std::vector<bool> &v) const;
02467
02471 void load_user_flags_hex (std::istream &in);
02472
02476 void load_user_flags_hex (const std::vector<bool> &v);
02477
02483 void clear_user_data ();
02484
02491 void clear_user_pointers ();
02492
02498 void save_user_indices (std::vector<unsigned int> &v) const;
02499
02504 void load_user_indices (const std::vector<unsigned int> &v);
02505
02511 void save_user_pointers (std::vector<void *> &v) const;
02512
02517 void load_user_pointers (const std::vector<void *> &v);
02518
02524 void save_user_indices_line (std::vector<unsigned int> &v) const;
02525
02530 void load_user_indices_line (const std::vector<unsigned int> &v);
02531
02537 void save_user_indices_quad (std::vector<unsigned int> &v) const;
02538
02543 void load_user_indices_quad (const std::vector<unsigned int> &v);
02544
02550 void save_user_indices_hex (std::vector<unsigned int> &v) const;
02551
02556 void load_user_indices_hex (const std::vector<unsigned int> &v);
02562 void save_user_pointers_line (std::vector<void *> &v) const;
02563
02568 void load_user_pointers_line (const std::vector<void *> &v);
02569
02575 void save_user_pointers_quad (std::vector<void *> &v) const;
02576
02581 void load_user_pointers_quad (const std::vector<void *> &v);
02582
02588 void save_user_pointers_hex (std::vector<void *> &v) const;
02589
02594 void load_user_pointers_hex (const std::vector<void *> &v);
02611 raw_cell_iterator begin_raw (const unsigned int level = 0) const;
02612
02620 cell_iterator begin (const unsigned int level = 0) const;
02621
02630 active_cell_iterator begin_active(const unsigned int level = 0) const;
02631
02641 raw_cell_iterator end () const;
02642
02649 cell_iterator end (const unsigned int level) const;
02650
02657 raw_cell_iterator end_raw (const unsigned int level) const;
02658
02665 active_cell_iterator end_active (const unsigned int level) const;
02666
02667
02675 raw_cell_iterator last_raw () const;
02676
02685 raw_cell_iterator last_raw (const unsigned int level) const;
02686
02694 cell_iterator last () const;
02695
02703 cell_iterator last (const unsigned int level) const;
02704
02713 active_cell_iterator last_active () const;
02714
02722 active_cell_iterator last_active (const unsigned int level) const;
02725
02726
02727
02740 raw_face_iterator begin_raw_face () const;
02741
02748 face_iterator begin_face () const;
02749
02758 active_face_iterator begin_active_face() const;
02759
02769 raw_face_iterator end_face () const;
02770
02777 raw_face_iterator end_raw_face () const;
02778
02785 active_face_iterator end_active_face () const;
02786
02794 raw_face_iterator last_raw_face () const;
02795
02803 face_iterator last_face () const;
02804
02813 active_face_iterator last_active_face () const;
02814
02818
02819
02834 raw_line_iterator
02835 begin_raw_line (const unsigned int level = 0) const;
02836
02841 line_iterator
02842 begin_line (const unsigned int level = 0) const;
02843
02848 active_line_iterator
02849 begin_active_line(const unsigned int level = 0) const;
02850
02857 raw_line_iterator
02858 end_line () const;
02859
02866 line_iterator end_line (const unsigned int level) const;
02867
02874 raw_line_iterator end_raw_line (const unsigned int level) const;
02875
02882 active_line_iterator end_active_line (const unsigned int level) const;
02883
02888 raw_line_iterator
02889 last_raw_line () const;
02890
02896 raw_line_iterator
02897 last_raw_line (const unsigned int level) const;
02898
02903 line_iterator
02904 last_line () const;
02905
02910 line_iterator
02911 last_line (const unsigned int level) const;
02912
02917 active_line_iterator
02918 last_active_line () const;
02919
02924 active_line_iterator
02925 last_active_line (const unsigned int level) const;
02928
02929
02933
02944 raw_quad_iterator
02945 begin_raw_quad (const unsigned int level = 0) const;
02946
02951 quad_iterator
02952 begin_quad (const unsigned int level = 0) const;
02953
02958 active_quad_iterator
02959 begin_active_quad(const unsigned int level = 0) const;
02960
02967 raw_quad_iterator end_quad () const;
02968
02975 quad_iterator end_quad (const unsigned int level) const;
02976
02983 raw_quad_iterator end_raw_quad (const unsigned int level) const;
02984
02991 active_quad_iterator end_active_quad (const unsigned int level) const;
02992
02997 raw_quad_iterator
02998 last_raw_quad () const;
02999
03006 raw_quad_iterator
03007 last_raw_quad (const unsigned int level) const;
03008
03013 quad_iterator
03014 last_quad () const;
03015
03020 quad_iterator
03021 last_quad (const unsigned int level) const;
03022
03027 active_quad_iterator
03028 last_active_quad () const;
03029
03034 active_quad_iterator
03035 last_active_quad (const unsigned int level) const;
03038
03039
03043
03051 raw_hex_iterator
03052 begin_raw_hex (const unsigned int level = 0) const;
03053
03058 hex_iterator
03059 begin_hex (const unsigned int level = 0) const;
03060
03065 active_hex_iterator
03066 begin_active_hex(const unsigned int level = 0) const;
03067
03074 raw_hex_iterator end_hex () const;
03075
03082 hex_iterator end_hex (const unsigned int level) const;
03083
03090 raw_hex_iterator end_raw_hex (const unsigned int level) const;
03091
03098 active_hex_iterator end_active_hex (const unsigned int level) const;
03099
03104 raw_hex_iterator last_raw_hex () const;
03105
03112 raw_hex_iterator
03113 last_raw_hex (const unsigned int level) const;
03114
03119 hex_iterator
03120 last_hex () const;
03121
03126 hex_iterator
03127 last_hex (const unsigned int level) const;
03128
03133 active_hex_iterator
03134 last_active_hex () const;
03135
03140 active_hex_iterator
03141 last_active_hex (const unsigned int level) const;
03144
03145
03150
03172 unsigned int n_raw_lines () const;
03173
03178 unsigned int n_raw_lines (const unsigned int level) const;
03179
03184 unsigned int n_lines () const;
03185
03190 unsigned int n_lines (const unsigned int level) const;
03191
03195 unsigned int n_active_lines () const;
03196
03201 unsigned int n_active_lines (const unsigned int level) const;
03202
03207 unsigned int n_raw_quads () const;
03208
03213 unsigned int n_raw_quads (const unsigned int level) const;
03214
03219 unsigned int n_quads () const;
03220
03225 unsigned int n_quads (const unsigned int level) const;
03226
03231 unsigned int n_active_quads () const;
03232
03237 unsigned int n_active_quads (const unsigned int level) const;
03238
03243 unsigned int n_raw_hexs () const;
03244
03249 unsigned int n_raw_hexs (const unsigned int level) const;
03250
03255 unsigned int n_hexs() const;
03256
03262 unsigned int n_hexs(const unsigned int level) const;
03263
03268 unsigned int n_active_hexs() const;
03269
03275 unsigned int n_active_hexs(const unsigned int level) const;
03276
03281 unsigned int n_raw_cells (const unsigned int level) const;
03282
03289 unsigned int n_cells () const;
03290
03297 unsigned int n_cells (const unsigned int level) const;
03298
03304 unsigned int n_active_cells () const;
03305
03312 unsigned int n_active_cells (const unsigned int level) const;
03313
03320 unsigned int n_raw_faces () const;
03321
03330 unsigned int n_faces () const;
03331
03340 unsigned int n_active_faces () const;
03341
03352 unsigned int n_levels () const;
03353
03368 unsigned int n_vertices () const;
03369
03387 const std::vector<Point<spacedim> > &
03388 get_vertices () const;
03389
03396 unsigned int n_used_vertices () const;
03397
03402 bool vertex_used (const unsigned int index) const;
03403
03411 const std::vector<bool> &
03412 get_used_vertices () const;
03413
03437 unsigned int max_adjacent_cells () const;
03438
03450 virtual types::subdomain_id_t locally_owned_subdomain () const;
03465 virtual std::size_t memory_consumption () const;
03466
03479 template <class Archive>
03480 void save (Archive & ar, const unsigned int version) const;
03481
03506 template <class Archive>
03507 void load (Archive & ar, const unsigned int version);
03508
03509 BOOST_SERIALIZATION_SPLIT_MEMBER()
03510
03511
03519 DeclException1 (ExcInvalidLevel,
03520 int,
03521 << "The given level " << arg1
03522 << " is not in the valid range!");
03532 DeclException0 (ExcTriangulationNotEmpty);
03538 DeclException0 (ExcGridReadError);
03543 DeclException0 (ExcFacesHaveNoLevel);
03550 DeclException1 (ExcEmptyLevel,
03551 int,
03552 << "You tried to do something on level " << arg1
03553 << ", but this level is empty.");
03558 DeclException0 (ExcNonOrientableTriangulation);
03560 protected:
03567 MeshSmoothing smooth_grid;
03568
03595 static void write_bool_vector (const unsigned int magic_number1,
03596 const std::vector<bool> &v,
03597 const unsigned int magic_number2,
03598 std::ostream &out);
03599
03605 static void read_bool_vector (const unsigned int magic_number1,
03606 std::vector<bool> &v,
03607 const unsigned int magic_number2,
03608 std::istream &in);
03609
03610 private:
03634 void clear_despite_subscriptions ();
03635
03656 DistortedCellList execute_refinement ();
03657
03666 void execute_coarsening ();
03667
03673 void fix_coarsen_flags ();
03674
03680 std::vector<internal::Triangulation::TriaLevel<dim>*> levels;
03681
03689 internal::Triangulation::TriaFaces<dim> * faces;
03690
03691
03696 std::vector<Point<spacedim> > vertices;
03697
03702 std::vector<bool> vertices_used;
03703
03710 std::map<types::boundary_id_t, SmartPointer<const Boundary<dim, spacedim> , Triangulation<dim, spacedim> > > boundary;
03711
03717 bool anisotropic_refinement;
03718
03719
03726 const bool check_for_distorted_cells;
03727
03744 internal::Triangulation::NumberCache<dim> number_cache;
03745
03769 std::map<unsigned int, types::boundary_id_t> *vertex_to_boundary_id_map_1d;
03770
03782 mutable
03783 std::multimap<const RefinementListener*, std::vector<boost::signals2::connection> >
03784 refinement_listener_map;
03785
03786
03787
03788 template <int,int,int> friend class TriaAccessorBase;
03789 template <int,int,int> friend class TriaAccessor;
03790 friend class TriaAccessor<0, 1, spacedim>;
03791
03792 friend class CellAccessor<dim, spacedim>;
03793
03794 friend struct internal::TriaAccessor::Implementation;
03795
03796 friend class hp::DoFHandler<dim,spacedim>;
03797
03798 friend struct internal::Triangulation::Implementation;
03799 };
03800
03801
03802 #ifndef DOXYGEN
03803
03804 namespace internal
03805 {
03806 namespace Triangulation
03807 {
03808 template <class Archive>
03809 void NumberCache<1>::serialize (Archive & ar,
03810 const unsigned int)
03811 {
03812 ar & n_levels;
03813 ar & n_lines & n_lines_level;
03814 ar & n_active_lines & n_active_lines_level;
03815 }
03816
03817
03818 template <class Archive>
03819 void NumberCache<2>::serialize (Archive & ar,
03820 const unsigned int version)
03821 {
03822 this->NumberCache<1>::serialize (ar, version);
03823
03824 ar & n_quads & n_quads_level;
03825 ar & n_active_quads & n_active_quads_level;
03826 }
03827
03828
03829 template <class Archive>
03830 void NumberCache<3>::serialize (Archive & ar,
03831 const unsigned int version)
03832 {
03833 this->NumberCache<2>::serialize (ar, version);
03834
03835 ar & n_hexes & n_hexes_level;
03836 ar & n_active_hexes & n_active_hexes_level;
03837 }
03838
03839 }
03840 }
03841
03842
03843 template <int dim, int spacedim>
03844 inline
03845 bool
03846 Triangulation<dim,spacedim>::vertex_used(const unsigned int index) const
03847 {
03848 Assert (index < vertices_used.size(),
03849 ExcIndexRange(index, 0, vertices_used.size()));
03850 return vertices_used[index];
03851 }
03852
03853
03854
03855 template <int dim, int spacedim>
03856 inline
03857 unsigned int Triangulation<dim, spacedim>::n_levels () const
03858 {
03859 return number_cache.n_levels;
03860 }
03861
03862
03863
03864 template <int dim, int spacedim>
03865 inline
03866 unsigned int
03867 Triangulation<dim, spacedim>::n_vertices () const
03868 {
03869 return vertices.size();
03870 }
03871
03872
03873
03874 template <int dim, int spacedim>
03875 inline
03876 const std::vector<Point<spacedim> > &
03877 Triangulation<dim, spacedim>::get_vertices () const
03878 {
03879 return vertices;
03880 }
03881
03882
03883 template <int dim, int spacedim>
03884 template <class Archive>
03885 void
03886 Triangulation<dim,spacedim>::save (Archive & ar,
03887 const unsigned int) const
03888 {
03889
03890
03891
03892
03893 ar & smooth_grid;
03894 ar & levels;
03895 ar & faces;
03896 ar & vertices;
03897 ar & vertices_used;
03898
03899 ar & anisotropic_refinement;
03900 ar & number_cache;
03901
03902 ar & check_for_distorted_cells;
03903
03904 if (dim == 1)
03905 ar & vertex_to_boundary_id_map_1d;
03906 }
03907
03908
03909
03910 template <int dim, int spacedim>
03911 template <class Archive>
03912 void
03913 Triangulation<dim,spacedim>::load (Archive & ar,
03914 const unsigned int)
03915 {
03916
03917
03918 clear ();
03919
03920
03921
03922
03923
03924 ar & smooth_grid;
03925 ar & levels;
03926 ar & faces;
03927 ar & vertices;
03928 ar & vertices_used;
03929
03930 ar & anisotropic_refinement;
03931 ar & number_cache;
03932
03933 bool my_check_for_distorted_cells;
03934 ar & my_check_for_distorted_cells;
03935
03936 Assert (my_check_for_distorted_cells == check_for_distorted_cells,
03937 ExcMessage ("The triangulation loaded into here must have the "
03938 "same setting with regard to reporting distorted "
03939 "cell as the one previously stored."));
03940
03941 if (dim == 1)
03942 ar & vertex_to_boundary_id_map_1d;
03943
03944
03945
03946
03947 signals.create();
03948 }
03949
03950
03951
03952
03953 template <> unsigned int Triangulation<1,1>::n_raw_lines (const unsigned int level) const;
03954 template <> unsigned int Triangulation<1,1>::n_quads () const;
03955 template <> unsigned int Triangulation<1,1>::n_quads (const unsigned int level) const;
03956 template <> unsigned int Triangulation<1,1>::n_raw_quads (const unsigned int level) const;
03957 template <> unsigned int Triangulation<2,2>::n_raw_quads (const unsigned int level) const;
03958 template <> unsigned int Triangulation<1,1>::n_raw_hexs (const unsigned int level) const;
03959 template <> unsigned int Triangulation<1,1>::n_active_quads (const unsigned int level) const;
03960 template <> unsigned int Triangulation<1,1>::n_active_quads () const;
03961 template <> unsigned int Triangulation<1,1>::max_adjacent_cells () const;
03962
03963
03964
03965
03966
03967
03968 template <> unsigned int Triangulation<1,2>::n_raw_lines (const unsigned int level) const;
03969 template <> unsigned int Triangulation<1,2>::n_quads () const;
03970 template <> unsigned int Triangulation<1,2>::n_quads (const unsigned int level) const;
03971 template <> unsigned int Triangulation<1,2>::n_raw_quads (const unsigned int level) const;
03972 template <> unsigned int Triangulation<2,3>::n_raw_quads (const unsigned int level) const;
03973 template <> unsigned int Triangulation<1,2>::n_raw_hexs (const unsigned int level) const;
03974 template <> unsigned int Triangulation<1,2>::n_active_quads (const unsigned int level) const;
03975 template <> unsigned int Triangulation<1,2>::n_active_quads () const;
03976 template <> unsigned int Triangulation<1,2>::max_adjacent_cells () const;
03977
03978
03979
03980
03981
03982 template <> unsigned int Triangulation<1,3>::n_raw_lines (const unsigned int level) const;
03983 template <> unsigned int Triangulation<1,3>::n_quads () const;
03984 template <> unsigned int Triangulation<1,3>::n_quads (const unsigned int level) const;
03985 template <> unsigned int Triangulation<1,3>::n_raw_quads (const unsigned int level) const;
03986 template <> unsigned int Triangulation<2,3>::n_raw_quads (const unsigned int level) const;
03987 template <> unsigned int Triangulation<1,3>::n_raw_hexs (const unsigned int level) const;
03988 template <> unsigned int Triangulation<1,3>::n_active_quads (const unsigned int level) const;
03989 template <> unsigned int Triangulation<1,3>::n_active_quads () const;
03990 template <> unsigned int Triangulation<1,3>::max_adjacent_cells () const;
03991
03992
03993
03994
03995
03996
03997
03998 #endif // DOXYGEN
03999
04000 DEAL_II_NAMESPACE_CLOSE
04001
04002
04003
04004
04005
04006 #include <deal.II/grid/tria_accessor.h>
04007
04008 #endif
04009