00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__persistent_tria_h
00013 #define __deal2__persistent_tria_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/smartpointer.h>
00018 #include <deal.II/grid/tria.h>
00019 #include <vector>
00020
00021 DEAL_II_NAMESPACE_OPEN
00022
00102 template <int dim, int spacedim=dim>
00103 class PersistentTriangulation : public Triangulation<dim, spacedim>
00104 {
00105 public:
00110 static const unsigned int dimension = dim;
00111 static const unsigned int spacedimension = spacedim;
00112
00127 PersistentTriangulation (const Triangulation<dim, spacedim> &coarse_grid);
00128
00137 PersistentTriangulation (const PersistentTriangulation<dim, spacedim> &old_tria);
00138
00142 virtual ~PersistentTriangulation ();
00143
00153 virtual void execute_coarsening_and_refinement ();
00154
00175 void restore ();
00176
00191 void restore (const unsigned int step_no);
00192
00200 unsigned int n_refinement_steps () const;
00201
00218 virtual void copy_triangulation (const Triangulation<dim, spacedim> &tria);
00219
00225 virtual void create_triangulation (const std::vector<Point<spacedim> > &vertices,
00226 const std::vector<CellData<dim> > &cells,
00227 const SubCellData &subcelldata);
00228
00237 virtual void create_triangulation_compatibility (
00238 const std::vector<Point<spacedim> > &vertices,
00239 const std::vector<CellData<dim> > &cells,
00240 const SubCellData &subcelldata);
00241
00246 virtual void write_flags(std::ostream &out) const;
00247
00256 virtual void read_flags(std::istream &in);
00257
00262 virtual void clear_flags();
00263
00269 virtual std::size_t memory_consumption () const;
00270
00274 DeclException0 (ExcTriaNotEmpty);
00278 DeclException0 (ExcFlagsNotCleared);
00279
00280 private:
00285 SmartPointer<const Triangulation<dim,spacedim>,PersistentTriangulation<dim,spacedim> > coarse_grid;
00286
00294 std::vector<std::vector<bool> > refine_flags;
00295
00299 std::vector<std::vector<bool> > coarsen_flags;
00300 };
00301
00302
00303 DEAL_II_NAMESPACE_CLOSE
00304
00305 #endif
00306