Reference documentation for deal.II version 8.4.1
Public Member Functions | List of all members
Manifold< dim, spacedim > Class Template Reference

#include <deal.II/grid/manifold.h>

Inheritance diagram for Manifold< dim, spacedim >:
[legend]

Public Member Functions

virtual ~Manifold ()
 
virtual Point< spacedim > get_new_point (const Quadrature< spacedim > &quad) const
 
virtual Point< spacedim > project_to_manifold (const std::vector< Point< spacedim > > &surrounding_points, const Point< spacedim > &candidate) const
 
virtual Point< spacedim > get_new_point_on_line (const typename Triangulation< dim, spacedim >::line_iterator &line) const
 
virtual Point< spacedim > get_new_point_on_quad (const typename Triangulation< dim, spacedim >::quad_iterator &quad) const
 
virtual Point< spacedim > get_new_point_on_hex (const typename Triangulation< dim, spacedim >::hex_iterator &hex) const
 
Point< spacedim > get_new_point_on_face (const typename Triangulation< dim, spacedim >::face_iterator &face) const
 
Point< spacedim > get_new_point_on_cell (const typename Triangulation< dim, spacedim >::cell_iterator &cell) const
 
- Public Member Functions inherited from Subscriptor
 Subscriptor ()
 
 Subscriptor (const Subscriptor &)
 
virtual ~Subscriptor ()
 
Subscriptoroperator= (const Subscriptor &)
 
void subscribe (const char *identifier=0) const
 
void unsubscribe (const char *identifier=0) const
 
unsigned int n_subscriptions () const
 
void list_subscribers () const
 
 DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects."<< "\n\n"<< "(Additional information: "<< arg3<< ")\n\n"<< "See the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "a lot more information on what this error means and "<< "how to fix programs in which it happens.")
 
 DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier <"<< arg2<< "> subscribes to this object of class "<< arg1<< ". Consequently, it cannot be unsubscribed.")
 
template<class Archive >
void serialize (Archive &ar, const unsigned int version)
 

Detailed Description

template<int dim, int spacedim = dim>
class Manifold< dim, spacedim >

This class is used to represent a manifold to a triangulation. When a triangulation creates a new vertex on this manifold, it determines the new vertex' coordinates through the following function:

...
Point<spacedim> new_vertex = manifold.get_new_point (quadrature);
...

quadrature is a Quadrature<spacedim> object, which contains a collection of points in spacedim dimension, and a collection of weights (Note that unlike almost all other cases in the library, we here interpret the points in the quadrature object to be in real space, not on the reference cell.)

Internally, the get_new_point() function calls the project_to_manifold() function after computing the weighted average of the quadrature points. This allows end users to only overload project_to_manifold() for simple situations.

Should a finer control be necessary, then get_new_point() can be overloaded.

FlatManifold is the specialization from which StraightBoundary is derived, where the project_to_manifold() function is the identity.

Author
Luca Heltai, 2014

Definition at line 83 of file manifold.h.

Constructor & Destructor Documentation

template<int dim, int spacedim>
Manifold< dim, spacedim >::~Manifold ( )
virtual

Destructor. Does nothing here, but needs to be declared to make it virtual.

Definition at line 32 of file manifold.cc.

Member Function Documentation

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point ( const Quadrature< spacedim > &  quad) const
virtual

Return the point which shall become the new vertex surrounded by the given points which make up the quadrature. We use a quadrature object, which should be filled with the surrounding points together with appropriate weights.

In its default implementation it calls internally the function project_to_manifold. User classes can get away by simply implementing that method.

Reimplemented in ChartManifold< dim, spacedim, chartdim >, ChartManifold< dim, spacedim, 1 >, ChartManifold< dim, spacedim, spacedim >, FlatManifold< dim, spacedim >, FlatManifold< dim, chartdim >, CylindricalManifold< dim, spacedim >, and SphericalManifold< dim, spacedim >.

Definition at line 52 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::project_to_manifold ( const std::vector< Point< spacedim > > &  surrounding_points,
const Point< spacedim > &  candidate 
) const
virtual

Given a point which lies close to the given manifold, it modifies it and projects it to manifold itself.

This class is used by the default implementation of the function get_new_point(). It should be made pure virtual, but for historical reason, derived classes like Boundary<dim, spacedim> do not implement it. The default behavior of this class, however, is to throw an exception when called.

If your manifold is simple, you could implement this function only, and the default behavior should work out of the box.

Reimplemented in FlatManifold< dim, spacedim >, FlatManifold< dim, chartdim >, OpenCASCADE::NormalToMeshProjectionBoundary< dim, spacedim >, OpenCASCADE::DirectionalProjectionBoundary< dim, spacedim >, and OpenCASCADE::NormalProjectionBoundary< dim, spacedim >.

Definition at line 40 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point_on_line ( const typename Triangulation< dim, spacedim >::line_iterator &  line) const
virtual

Backward compatibility interface. Return the point which shall become the new middle vertex of the two children of a regular line. In 2D, this line is a line at the boundary, while in 3d, it is bounding a face at the boundary (the lines therefore is also on the boundary).

The default implementation of this function passes its argument to the Manifolds::get_default_quadrature() function, and then calls the Manifold<dim,spacedim>::get_new_point() function. User derived classes can overload Manifold<dim,spacedim>::get_new_point() or Manifold<dim,spacedim>::project_to_surface(), which is called by the default implementation of Manifold<dim,spacedim>::get_new_point().

Reimplemented in TorusBoundary< dim, spacedim >, HyperBallBoundary< dim, spacedim >, StraightBoundary< dim, spacedim >, StraightBoundary< dim, dim >, and CylinderBoundary< dim, spacedim >.

Definition at line 75 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point_on_quad ( const typename Triangulation< dim, spacedim >::quad_iterator &  quad) const
virtual

Backward compatibility interface. Return the point which shall become the common point of the four children of a quad at the boundary in three or more spatial dimensions. This function therefore is only useful in at least three dimensions and should not be called for lower dimensions.

This function is called after the four lines bounding the given quad are refined, so you may want to use the information provided by quad->line(i)->child(j), i=0...3, j=0,1.

The default implementation of this function passes its argument to the Manifolds::get_default_quadrature() function, and then calls the Manifold<dim,spacedim>::get_new_point() function. User derived classes can overload Manifold<dim,spacedim>::get_new_point() or Manifold<dim,spacedim>::project_to_surface(), which is called by the default implementation of Manifold<dim,spacedim>::get_new_point().

Reimplemented in TorusBoundary< dim, spacedim >, HyperBallBoundary< dim, spacedim >, StraightBoundary< dim, spacedim >, StraightBoundary< dim, dim >, and CylinderBoundary< dim, spacedim >.

Definition at line 85 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point_on_hex ( const typename Triangulation< dim, spacedim >::hex_iterator &  hex) const
virtual

Backward compatibility interface. Return the point which shall become the common point of the eight children of a hex in three or spatial dimensions. This function therefore is only useful in at least three dimensions and should not be called for lower dimensions.

This function is called after the all the bounding objects of the given hex are refined, so you may want to use the information provided by hex->quad(i)->line(j)->child(k), i=0...5, j=0...3, k=0,1.

The default implementation of this function passes its argument to the Manifolds::get_default_quadrature() function, and then calls the Manifold<dim,spacedim>::get_new_point() function. User derived classes can overload Manifold<dim,spacedim>::get_new_point() or Manifold<dim,spacedim>::project_to_surface(), which is called by the default implementation of Manifold<dim,spacedim>::get_new_point().

Definition at line 192 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point_on_face ( const typename Triangulation< dim, spacedim >::face_iterator &  face) const

Backward compatibility interface. Depending on dim=2 or dim=3 this function calls the get_new_point_on_line or the get_new_point_on_quad function. It throws an exception for dim=1. This wrapper allows dimension independent programming.

Definition at line 94 of file manifold.cc.

template<int dim, int spacedim>
Point< spacedim > Manifold< dim, spacedim >::get_new_point_on_cell ( const typename Triangulation< dim, spacedim >::cell_iterator &  cell) const

Backward compatibility interface. Depending on dim=1, dim=2 or dim=3 this function calls the get_new_point_on_line, get_new_point_on_quad or the get_new_point_on_hex function. This wrapper allows dimension independent programming.

Definition at line 114 of file manifold.cc.


The documentation for this class was generated from the following files: