include/deal.II/grid/tria_boundary.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: tria_boundary.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
00010 //
00011 //---------------------------------------------------------------------------
00012 #ifndef __deal2__tria_boundary_h
00013 #define __deal2__tria_boundary_h
00014 
00015 
00016 /*----------------------------   boundary-function.h     ---------------------------*/
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 /* -------------- declaration of explicit specializations ------------- */
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Wed May 23 2012 12:03:24 by doxygen 1.7.3