00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__grid_generator_h
00013 #define __deal2__grid_generator_h
00014
00015
00016 #include <deal.II/base/config.h>
00017 #include <deal.II/base/exceptions.h>
00018 #include <deal.II/base/point.h>
00019 #include <deal.II/base/table.h>
00020 #include <deal.II/grid/tria.h>
00021 #include <map>
00022
00023 DEAL_II_NAMESPACE_OPEN
00024
00025 template <int dim, int spacedim> class Triangulation;
00026 template <typename number> class Vector;
00027 template <typename number> class SparseMatrix;
00028
00029
00051 class GridGenerator
00052 {
00053 public:
00085 template <int dim, int spacedim>
00086 static void hyper_cube (Triangulation<dim,spacedim> &tria,
00087 const double left = 0.,
00088 const double right= 1.);
00089
00116 template <int dim>
00117 static void subdivided_hyper_cube (Triangulation<dim> &tria,
00118 const unsigned int repetitions,
00119 const double left = 0.,
00120 const double right= 1.);
00121
00152 template <int dim, int spacedim>
00153 static void hyper_rectangle (Triangulation<dim,spacedim> &tria,
00154 const Point<spacedim> &p1,
00155 const Point<spacedim> &p2,
00156 const bool colorize = false);
00157
00215 template <int dim>
00216 static
00217 void
00218 subdivided_hyper_rectangle (Triangulation<dim> &tria,
00219 const std::vector<unsigned int> &repetitions,
00220 const Point<dim> &p1,
00221 const Point<dim> &p2,
00222 const bool colorize=false);
00223
00254 template <int dim>
00255 static
00256 void
00257 subdivided_hyper_rectangle(Triangulation<dim> &tria,
00258 const std::vector<std::vector<double> > &step_sizes,
00259 const Point<dim> &p_1,
00260 const Point<dim> &p_2,
00261 const bool colorize);
00262
00277 template <int dim>
00278 static
00279 void
00280 subdivided_hyper_rectangle (Triangulation<dim> &tria,
00281 const std::vector< std::vector<double> > &spacing,
00282 const Point<dim> &p,
00283 const Table<dim,types::material_id_t> &material_id,
00284 const bool colorize=false);
00285
00305 template <int dim>
00306 static void
00307 parallelogram(Triangulation<dim>& tria,
00308 const Tensor<2,dim>& corners,
00309 const bool colorize=false);
00310
00311
00339 template <int dim>
00340 static void enclosed_hyper_cube (Triangulation<dim> &tria,
00341 const double left = 0.,
00342 const double right= 1.,
00343 const double thickness = 1.,
00344 const bool colorize = false);
00345
00373 template <int dim>
00374 static void hyper_ball (Triangulation<dim> &tria,
00375 const Point<dim> ¢er = Point<dim>(),
00376 const double radius = 1.);
00377
00399 template <int dim>
00400 static void half_hyper_ball (Triangulation<dim> &tria,
00401 const Point<dim> ¢er = Point<dim>(),
00402 const double radius = 1.);
00403
00431 template <int dim>
00432 static void cylinder (Triangulation<dim> &tria,
00433 const double radius = 1.,
00434 const double half_length = 1.);
00435
00483 template <int dim>
00484 static void
00485 truncated_cone (Triangulation<dim> &tria,
00486 const double radius_0 = 1.0,
00487 const double radius_1 = 0.5,
00488 const double half_length = 1.0);
00489
00516 template <int dim>
00517 static void hyper_L (Triangulation<dim> &tria,
00518 const double left = -1.,
00519 const double right= 1.);
00520
00552 template <int dim>
00553 static void hyper_cube_slit (Triangulation<dim> &tria,
00554 const double left = 0.,
00555 const double right= 1.,
00556 const bool colorize = false);
00557
00639 template <int dim>
00640 static void hyper_shell (Triangulation<dim> &tria,
00641 const Point<dim> ¢er,
00642 const double inner_radius,
00643 const double outer_radius,
00644 const unsigned int n_cells = 0,
00645 bool colorize = false);
00646
00688 template <int dim>
00689 static void half_hyper_shell (Triangulation<dim> &tria,
00690 const Point<dim> ¢er,
00691 const double inner_radius,
00692 const double outer_radius,
00693 const unsigned int n_cells = 0,
00694 const bool colorize = false);
00695
00696
00722 template <int dim>
00723 static void quarter_hyper_shell (Triangulation<dim> &tria,
00724 const Point<dim> ¢er,
00725 const double inner_radius,
00726 const double outer_radius,
00727 const unsigned int n_cells = 0,
00728 const bool colorize = false);
00729
00752 template <int dim>
00753 static void cylinder_shell (Triangulation<dim> &tria,
00754 const double length,
00755 const double inner_radius,
00756 const double outer_radius,
00757 const unsigned int n_radial_cells = 0,
00758 const unsigned int n_axial_cells = 0);
00759
00760
00761
00782 static void torus (Triangulation<2,3>& tria,
00783 const double R,
00784 const double r);
00785
00786
00816 template<int dim>
00817 static void hyper_cube_with_cylindrical_hole (Triangulation<dim> &triangulation,
00818 const double inner_radius = .25,
00819 const double outer_radius = .5,
00820 const double L = .5,
00821 const unsigned int repetition = 1,
00822 const bool colorize = false);
00823
00836 static void moebius (Triangulation<3,3>& tria,
00837 const unsigned int n_cells,
00838 const unsigned int n_rotations,
00839 const double R,
00840 const double r);
00841
00896 template <int dim, int spacedim>
00897 static
00898 void
00899 merge_triangulations (const Triangulation<dim, spacedim> &triangulation_1,
00900 const Triangulation<dim, spacedim> &triangulation_2,
00901 Triangulation<dim, spacedim> &result);
00902
00925 template <int dim>
00926 static void laplace_transformation (Triangulation<dim> &tria,
00927 const std::map<unsigned int,Point<dim> > &new_points);
00928
00932 DeclException0 (ExcInvalidRadii);
00936 DeclException1 (ExcInvalidRepetitions,
00937 int,
00938 << "The number of repetitions " << arg1
00939 << " must be >=1.");
00943 DeclException1 (ExcInvalidRepetitionsDimension,
00944 int,
00945 << "The vector of repetitions must have "
00946 << arg1 <<" elements.");
00947
00948 private:
00955 template <int dim, int spacedim>
00956 static
00957 void
00958 colorize_hyper_rectangle (Triangulation<dim,spacedim> &tria);
00959
00970 template <int dim>
00971 static
00972 void
00973 colorize_subdivided_hyper_rectangle (Triangulation<dim> &tria,
00974 const Point<dim> &p1,
00975 const Point<dim> &p2,
00976 const double epsilon);
00977
00983 template<int dim>
00984 static
00985 void
00986 colorize_hyper_shell (Triangulation<dim>& tria,
00987 const Point<dim>& center,
00988 const double inner_radius,
00989 const double outer_radius);
00990
00991
00999 template<int dim>
01000 static
01001 void
01002 colorize_quarter_hyper_shell(Triangulation<dim> & tria,
01003 const Point<dim>& center,
01004 const double inner_radius,
01005 const double outer_radius);
01006
01016 static
01017 void
01018 laplace_solve (const SparseMatrix<double> &S,
01019 const std::map<unsigned int,double> &m,
01020 Vector<double> &u);
01021 };
01022
01023
01024
01025 DEAL_II_NAMESPACE_CLOSE
01026
01027 #endif
01028