Reference documentation for deal.II version 8.4.2
tria_boundary.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1998 - 2016 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii__tria_boundary_h
17 #define dealii__tria_boundary_h
18 
19 
20 /*---------------------------- boundary-function.h ---------------------------*/
21 
22 #include <deal.II/base/config.h>
23 #include <deal.II/base/subscriptor.h>
24 #include <deal.II/base/quadrature_lib.h>
25 #include <deal.II/base/thread_management.h>
26 #include <deal.II/base/point.h>
27 #include <deal.II/grid/tria.h>
28 #include <deal.II/grid/manifold.h>
29 
30 DEAL_II_NAMESPACE_OPEN
31 
32 template <int dim, int space_dim> class Triangulation;
33 
34 
35 
84 template <int dim, int spacedim=dim>
85 class Boundary : public FlatManifold<dim, spacedim>
86 {
87 public:
88 
101 
106  virtual ~Boundary ();
107 
108 
127  virtual
128  void
129  get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
130  std::vector<Point<spacedim> > &points) const;
131 
152  virtual
153  void
154  get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
155  std::vector<Point<spacedim> > &points) const;
156 
163  void
165  std::vector<Point<spacedim> > &points) const;
166 
189  virtual
192  const Point<spacedim> &p) const;
193 
207  virtual
208  void
210  FaceVertexNormals &face_vertex_normals) const;
211 
228  virtual
230  project_to_surface (const typename Triangulation<dim,spacedim>::line_iterator &line,
231  const Point<spacedim> &candidate) const;
232 
241  virtual
243  project_to_surface (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
244  const Point<spacedim> &candidate) const;
245 
254  virtual
256  project_to_surface (const typename Triangulation<dim,spacedim>::hex_iterator &hex,
257  const Point<spacedim> &candidate) const;
258 
259 protected:
268  const std::vector<Point<1> > &
269  get_line_support_points (const unsigned int n_intermediate_points) const;
270 
271 private:
275  mutable std::vector<std_cxx11::shared_ptr<QGaussLobatto<1> > > points;
276 
281 };
282 
283 
284 
299 template <int dim, int spacedim=dim>
300 class StraightBoundary : public Boundary<dim,spacedim>
301 {
302 public:
306  StraightBoundary ();
307 
314  virtual Point<spacedim>
315  get_new_point_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line) const;
316 
325  virtual
327  get_new_point_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad) const;
328 
336  virtual
337  void
338  get_intermediate_points_on_line (const typename Triangulation<dim,spacedim>::line_iterator &line,
339  std::vector<Point<spacedim> > &points) const;
340 
348  virtual
349  void
350  get_intermediate_points_on_quad (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
351  std::vector<Point<spacedim> > &points) const;
352 
359  virtual
362  const Point<spacedim> &p) const;
363 
370  virtual
371  void
373  typename Boundary<dim,spacedim>::FaceVertexNormals &face_vertex_normals) const;
374 
389  virtual
391  project_to_surface (const typename Triangulation<dim,spacedim>::line_iterator &line,
392  const Point<spacedim> &candidate) const;
393 
405  virtual
407  project_to_surface (const typename Triangulation<dim,spacedim>::quad_iterator &quad,
408  const Point<spacedim> &candidate) const;
409 
422  virtual
424  project_to_surface (const typename Triangulation<dim,spacedim>::hex_iterator &hex,
425  const Point<spacedim> &candidate) const;
426 };
427 
428 
429 
430 /* -------------- declaration of explicit specializations ------------- */
431 
432 #ifndef DOXYGEN
433 
434 template <>
435 void
438  std::vector<Point<1> > &) const;
439 
440 template <>
441 void
444  std::vector<Point<2> > &) const;
445 
446 template <>
447 void
450  std::vector<Point<3> > &) const;
451 template <>
452 void
456 template <>
457 void
460  Boundary<2,2>::FaceVertexNormals &face_vertex_normals) const;
461 template <>
462 void
465  Boundary<3,3>::FaceVertexNormals &face_vertex_normals) const;
466 
467 template <>
468 Point<3>
470 get_new_point_on_quad (const Triangulation<3,3>::quad_iterator &quad) const;
471 
472 template <>
473 void
475 get_intermediate_points_on_quad (const Triangulation<3,3>::quad_iterator &quad,
476  std::vector<Point<3> > &points) const;
477 
478 template <>
479 Point<3>
481 project_to_surface (const Triangulation<1, 3>::quad_iterator &quad,
482  const Point<3> &y) const;
483 
484 
485 #endif // DOXYGEN
486 
487 DEAL_II_NAMESPACE_CLOSE
488 
489 #endif
const std::vector< Point< 1 > > & get_line_support_points(const unsigned int n_intermediate_points) const
virtual void get_intermediate_points_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line, std::vector< Point< spacedim > > &points) const
Tensor< 1, spacedim > FaceVertexNormals[GeometryInfo< dim >::vertices_per_face]
virtual Tensor< 1, spacedim > normal_vector(const typename Triangulation< dim, spacedim >::face_iterator &face, const Point< spacedim > &p) const
virtual Point< spacedim > project_to_surface(const typename Triangulation< dim, spacedim >::line_iterator &line, const Point< spacedim > &candidate) const
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const
Definition: tria.h:46
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const
virtual Point< spacedim > get_new_point_on_line(const typename Triangulation< dim, spacedim >::line_iterator &line) const
Definition: manifold.cc:75
std::vector< std_cxx11::shared_ptr< QGaussLobatto< 1 > > > points
virtual ~Boundary()
void get_intermediate_points_on_face(const typename Triangulation< dim, spacedim >::face_iterator &face, std::vector< Point< spacedim > > &points) const
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, FaceVertexNormals &face_vertex_normals) const
Threads::Mutex mutex
virtual Point< spacedim > get_new_point_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad) const
Definition: manifold.cc:85
virtual void get_intermediate_points_on_quad(const typename Triangulation< dim, spacedim >::quad_iterator &quad, std::vector< Point< spacedim > > &points) const
virtual Point< spacedim > project_to_surface(const typename Triangulation< dim, spacedim >::line_iterator &line, const Point< spacedim > &candidate) const
virtual void get_normals_at_vertices(const typename Triangulation< dim, spacedim >::face_iterator &face, typename Boundary< dim, spacedim >::FaceVertexNormals &face_vertex_normals) const