00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__tria_boundary_h
00013 #define __deal2__tria_boundary_h
00014
00015
00016
00017
00018 #include <deal.II/base/config.h>
00019 #include <deal.II/base/subscriptor.h>
00020 #include <deal.II/base/point.h>
00021 #include <deal.II/grid/tria.h>
00022
00023 DEAL_II_NAMESPACE_OPEN
00024
00025 template <int dim, int space_dim> class Triangulation;
00026
00027
00028
00077 template <int dim, int spacedim=dim>
00078 class Boundary : public Subscriptor
00079 {
00080 public:
00081
00105 typedef Tensor<1,spacedim> FaceVertexNormals[GeometryInfo<dim>::vertices_per_face];
00106
00112 virtual ~Boundary ();
00113
00125 virtual
00126 Point<spacedim>
00127 get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const = 0;
00128
00155 virtual
00156 Point<spacedim>
00157 get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
00158
00171 Point<spacedim>
00172 get_new_point_on_face (const typename Triangulation<dim,spacedim>::face_iterator &face) const;
00173
00198 virtual
00199 void
00200 get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
00201 std::vector<Point<spacedim> > &points) const;
00202
00233 virtual
00234 void
00235 get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
00236 std::vector<Point<spacedim> > &points) const;
00237
00251 void
00252 get_intermediate_points_on_face (const typename Triangulation<dim,spacedim>::face_iterator &face,
00253 std::vector<Point<spacedim> > &points) const;
00254
00290 virtual
00291 Tensor<1,spacedim>
00292 normal_vector (const typename Triangulation<dim,spacedim>::face_iterator &face,
00293 const Point<spacedim> &p) const;
00294
00323 virtual
00324 void
00325 get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
00326 FaceVertexNormals &face_vertex_normals) const;
00327
00359 virtual
00360 Point<spacedim>
00361 project_to_surface (const typename Triangulation<dim,spacedim>::line_iterator &line,
00362 const Point<spacedim> &candidate) const;
00363
00379 virtual
00380 Point<spacedim>
00381 project_to_surface (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
00382 const Point<spacedim> &candidate) const;
00383
00399 virtual
00400 Point<spacedim>
00401 project_to_surface (const typename Triangulation<dim,spacedim>::hex_iterator &hex,
00402 const Point<spacedim> &candidate) const;
00403 };
00404
00405
00406
00422 template <int dim, int spacedim=dim>
00423 class StraightBoundary : public Boundary<dim,spacedim>
00424 {
00425 public:
00431 StraightBoundary ();
00432
00444 virtual Point<spacedim>
00445 get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
00446
00462 virtual
00463 Point<spacedim>
00464 get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
00465
00478 virtual
00479 void
00480 get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
00481 std::vector<Point<spacedim> > &points) const;
00482
00495 virtual
00496 void
00497 get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
00498 std::vector<Point<spacedim> > &points) const;
00499
00509 virtual
00510 Tensor<1,spacedim>
00511 normal_vector (const typename Triangulation<dim,spacedim>::face_iterator &face,
00512 const Point<spacedim> &p) const;
00513
00524 virtual
00525 void
00526 get_normals_at_vertices (const typename Triangulation<dim,spacedim>::face_iterator &face,
00527 typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const;
00528
00557 virtual
00558 Point<spacedim>
00559 project_to_surface (const typename Triangulation<dim,spacedim>::line_iterator &line,
00560 const Point<spacedim> &candidate) const;
00561
00584 virtual
00585 Point<spacedim>
00586 project_to_surface (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
00587 const Point<spacedim> &candidate) const;
00588
00611 virtual
00612 Point<spacedim>
00613 project_to_surface (const typename Triangulation<dim,spacedim>::hex_iterator &hex,
00614 const Point<spacedim> &candidate) const;
00615 };
00616
00617
00618
00619
00620
00621 #ifndef DOXYGEN
00622
00623 template <>
00624 Point<1>
00625 Boundary<1,1>::
00626 get_new_point_on_face (const Triangulation<1,1>::face_iterator &) const;
00627
00628 template <>
00629 void
00630 Boundary<1,1>::
00631 get_intermediate_points_on_face (const Triangulation<1,1>::face_iterator &,
00632 std::vector<Point<1> > &) const;
00633
00634 template <>
00635 Point<2>
00636 Boundary<1,2>::
00637 get_new_point_on_face (const Triangulation<1,2>::face_iterator &) const;
00638
00639 template <>
00640 void
00641 Boundary<1,2>::
00642 get_intermediate_points_on_face (const Triangulation<1,2>::face_iterator &,
00643 std::vector<Point<2> > &) const;
00644
00645
00646
00647 template <>
00648 Point<3>
00649 Boundary<1,3>::
00650 get_new_point_on_face (const Triangulation<1,3>::face_iterator &) const;
00651
00652 template <>
00653 void
00654 Boundary<1,3>::
00655 get_intermediate_points_on_face (const Triangulation<1,3>::face_iterator &,
00656 std::vector<Point<3> > &) const;
00657 template <>
00658 void
00659 StraightBoundary<1,1>::
00660 get_normals_at_vertices (const Triangulation<1,1>::face_iterator &,
00661 Boundary<1,1>::FaceVertexNormals &) const;
00662 template <>
00663 void
00664 StraightBoundary<2,2>::
00665 get_normals_at_vertices (const Triangulation<2,2>::face_iterator &face,
00666 Boundary<2,2>::FaceVertexNormals &face_vertex_normals) const;
00667 template <>
00668 void
00669 StraightBoundary<3,3>::
00670 get_normals_at_vertices (const Triangulation<3,3>::face_iterator &face,
00671 Boundary<3,3>::FaceVertexNormals &face_vertex_normals) const;
00672
00673 template <>
00674 Point<3>
00675 StraightBoundary<3,3>::
00676 get_new_point_on_quad (const Triangulation<3,3>::quad_iterator &quad) const;
00677
00678 template <>
00679 void
00680 StraightBoundary<1,1>::
00681 get_intermediate_points_on_line (const Triangulation<1,1>::line_iterator &,
00682 std::vector<Point<1> > &) const;
00683
00684 template <>
00685 void
00686 StraightBoundary<3,3>::
00687 get_intermediate_points_on_quad (const Triangulation<3,3>::quad_iterator &quad,
00688 std::vector<Point<3> > &points) const;
00689
00690 template <>
00691 Point<3>
00692 StraightBoundary<1,3>::
00693 project_to_surface (const Triangulation<1, 3>::quad_iterator &quad,
00694 const Point<3> &y) const;
00695
00696
00697 #endif // DOXYGEN
00698
00699 DEAL_II_NAMESPACE_CLOSE
00700
00701 #endif
00702