FE_Poly< POLY, dim, spacedim > Class Template Reference
[Base classes]

Inheritance diagram for FE_Poly< POLY, dim, spacedim >:
Inheritance graph
[legend]

List of all members.

Classes

class  InternalData

Public Member Functions

 FE_Poly (const POLY &poly_space, const FiniteElementData< dim > &fe_data, const std::vector< bool > &restriction_is_additive_flags, const std::vector< std::vector< bool > > &nonzero_components)
unsigned int get_degree () const
virtual double shape_value (const unsigned int i, const Point< dim > &p) const
virtual double shape_value_component (const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual Tensor< 1, dim > shape_grad (const unsigned int i, const Point< dim > &p) const
virtual Tensor< 1, dim > shape_grad_component (const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual Tensor< 2, dim > shape_grad_grad (const unsigned int i, const Point< dim > &p) const
virtual Tensor< 2, dim > shape_grad_grad_component (const unsigned int i, const Point< dim > &p, const unsigned int component) const
virtual unsigned int n_base_elements () const
virtual const FiniteElement
< dim, spacedim > & 
base_element (const unsigned int index) const
virtual unsigned int element_multiplicity (const unsigned int index) const

Protected Member Functions

virtual Mapping< dim, spacedim >
::InternalDataBase
get_data (const UpdateFlags, const Mapping< dim, spacedim > &mapping, const Quadrature< dim > &quadrature) const
virtual void fill_fe_values (const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const Quadrature< dim > &quadrature, typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, typename Mapping< dim, spacedim >::InternalDataBase &fe_internal, FEValuesData< dim, spacedim > &data, enum CellSimilarity::Similarity &cell_similarity) const
virtual void fill_fe_face_values (const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const Quadrature< dim-1 > &quadrature, typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, typename Mapping< dim, spacedim >::InternalDataBase &fe_internal, FEValuesData< dim, spacedim > &data) const
virtual void fill_fe_subface_values (const Mapping< dim, spacedim > &mapping, const typename Triangulation< dim, spacedim >::cell_iterator &cell, const unsigned int face_no, const unsigned int sub_no, const Quadrature< dim-1 > &quadrature, typename Mapping< dim, spacedim >::InternalDataBase &mapping_internal, typename Mapping< dim, spacedim >::InternalDataBase &fe_internal, FEValuesData< dim, spacedim > &data) const
virtual UpdateFlags update_once (const UpdateFlags flags) const
virtual UpdateFlags update_each (const UpdateFlags flags) const

Protected Attributes

POLY poly_space

Detailed Description

template<class POLY, int dim, int spacedim = dim>
class FE_Poly< POLY, dim, spacedim >

This class gives a unified framework for the implementation of FiniteElement classes based on a polynomial spaces like the TensorProductPolynomials or a PolynomialSpace classes.

Every class that implements following functions can be used as template parameter POLY.

 double compute_value (const unsigned int i,
                       const Point<dim> &p) const;

 Tensor<1,dim> compute_grad (const unsigned int i,
                             const Point<dim> &p) const;

 Tensor<2,dim> compute_grad_grad (const unsigned int i,
                                  const Point<dim> &p) const;

Example classes are TensorProductPolynomials, PolynomialSpace or PolynomialsP.

This class is not a fully implemented FiniteElement class. Instead there are several pure virtual functions declared in the FiniteElement and FiniteElement classes which cannot implemented by this class but are left for implementation in derived classes.

Furthermore, this class assumes that shape functions of the FiniteElement under consideration do not depend on the actual shape of the cells in real space, i.e. update_once() includes update_values. For FiniteElements whose shape functions depend on the cells in real space, the update_once() and update_each() functions must be overloaded.

Todos:

Author:
Ralf Hartmann 2004

Constructor & Destructor Documentation

template<class POLY, int dim, int spacedim = dim>
FE_Poly< POLY, dim, spacedim >::FE_Poly ( const POLY &  poly_space,
const FiniteElementData< dim > &  fe_data,
const std::vector< bool > &  restriction_is_additive_flags,
const std::vector< std::vector< bool > > &  nonzero_components 
)

Constructor.


Member Function Documentation

template<class POLY, int dim, int spacedim = dim>
unsigned int FE_Poly< POLY, dim, spacedim >::get_degree (  )  const

Return the polynomial degree of this finite element, i.e. the value passed to the constructor.

template<class POLY, int dim, int spacedim = dim>
virtual double FE_Poly< POLY, dim, spacedim >::shape_value ( const unsigned int  i,
const Point< dim > &  p 
) const [virtual]

Return the value of the ith shape function at the point p. See the FiniteElement base class for more information about the semantics of this function.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual double FE_Poly< POLY, dim, spacedim >::shape_value_component ( const unsigned int  i,
const Point< dim > &  p,
const unsigned int  component 
) const [virtual]

Return the value of the componentth vector component of the ith shape function at the point p. See the FiniteElement base class for more information about the semantics of this function.

Since this element is scalar, the returned value is the same as if the function without the _component suffix were called, provided that the specified component is zero.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual Tensor<1,dim> FE_Poly< POLY, dim, spacedim >::shape_grad ( const unsigned int  i,
const Point< dim > &  p 
) const [virtual]

Return the gradient of the ith shape function at the point p. See the FiniteElement base class for more information about the semantics of this function.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual Tensor<1,dim> FE_Poly< POLY, dim, spacedim >::shape_grad_component ( const unsigned int  i,
const Point< dim > &  p,
const unsigned int  component 
) const [virtual]

Return the gradient of the componentth vector component of the ith shape function at the point p. See the FiniteElement base class for more information about the semantics of this function.

Since this element is scalar, the returned value is the same as if the function without the _component suffix were called, provided that the specified component is zero.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual Tensor<2,dim> FE_Poly< POLY, dim, spacedim >::shape_grad_grad ( const unsigned int  i,
const Point< dim > &  p 
) const [virtual]

Return the tensor of second derivatives of the ith shape function at point p on the unit cell. See the FiniteElement base class for more information about the semantics of this function.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual Tensor<2,dim> FE_Poly< POLY, dim, spacedim >::shape_grad_grad_component ( const unsigned int  i,
const Point< dim > &  p,
const unsigned int  component 
) const [virtual]

Return the second derivative of the componentth vector component of the ith shape function at the point p. See the FiniteElement base class for more information about the semantics of this function.

Since this element is scalar, the returned value is the same as if the function without the _component suffix were called, provided that the specified component is zero.

Reimplemented from FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual unsigned int FE_Poly< POLY, dim, spacedim >::n_base_elements (  )  const [virtual]

Number of base elements in a mixed discretization. Since this is a scalar element, return one.

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual const FiniteElement<dim,spacedim>& FE_Poly< POLY, dim, spacedim >::base_element ( const unsigned int  index  )  const [virtual]

Access to base element objects. Since this element is scalar, base_element(0) is this, and all other indices throw an error.

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual unsigned int FE_Poly< POLY, dim, spacedim >::element_multiplicity ( const unsigned int  index  )  const [virtual]

Multiplicity of base element index. Since this is a scalar element, element_multiplicity(0) returns one, and all other indices will throw an error.

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual Mapping<dim,spacedim>::InternalDataBase* FE_Poly< POLY, dim, spacedim >::get_data ( const   flags,
const Mapping< dim, spacedim > &  mapping,
const Quadrature< dim > &  quadrature 
) const [protected, virtual]

Prepare internal data structures and fill in values independent of the cell. Returns a pointer to an object of which the caller of this function then has to assume ownership (which includes destruction when it is no more needed).

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual void FE_Poly< POLY, dim, spacedim >::fill_fe_values ( const Mapping< dim, spacedim > &  mapping,
const typename Triangulation< dim, spacedim >::cell_iterator &  cell,
const Quadrature< dim > &  quadrature,
typename Mapping< dim, spacedim >::InternalDataBase mapping_internal,
typename Mapping< dim, spacedim >::InternalDataBase fe_internal,
FEValuesData< dim, spacedim > &  data,
enum CellSimilarity::Similarity cell_similarity 
) const [protected, virtual]

Fill the fields of FEValues. This function performs all the operations needed to compute the data of an FEValues object.

The same function in mapping must have been called for the same cell first!

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual void FE_Poly< POLY, dim, spacedim >::fill_fe_face_values ( const Mapping< dim, spacedim > &  mapping,
const typename Triangulation< dim, spacedim >::cell_iterator &  cell,
const unsigned int  face_no,
const Quadrature< dim-1 > &  quadrature,
typename Mapping< dim, spacedim >::InternalDataBase mapping_internal,
typename Mapping< dim, spacedim >::InternalDataBase fe_internal,
FEValuesData< dim, spacedim > &  data 
) const [protected, virtual]

Fill the fields of FEFaceValues. This function performs all the operations needed to compute the data of an FEFaceValues object.

The same function in mapping must have been called for the same cell first!

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual void FE_Poly< POLY, dim, spacedim >::fill_fe_subface_values ( const Mapping< dim, spacedim > &  mapping,
const typename Triangulation< dim, spacedim >::cell_iterator &  cell,
const unsigned int  face_no,
const unsigned int  sub_no,
const Quadrature< dim-1 > &  quadrature,
typename Mapping< dim, spacedim >::InternalDataBase mapping_internal,
typename Mapping< dim, spacedim >::InternalDataBase fe_internal,
FEValuesData< dim, spacedim > &  data 
) const [protected, virtual]

Fill the fields of FESubfaceValues. This function performs all the operations needed to compute the data of an FESubfaceValues object.

The same function in mapping must have been called for the same cell first!

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual UpdateFlags FE_Poly< POLY, dim, spacedim >::update_once ( const UpdateFlags  flags  )  const [protected, virtual]

Determine the values that need to be computed on the unit cell to be able to compute all values required by flags.

For the purpuse of this function, refer to the documentation in FiniteElement.

This class assumes that shape functions of this FiniteElement do not depend on the actual shape of the cells in real space. Therefore, the effect in this element is as follows: if update_values is set in flags, copy it to the result. All other flags of the result are cleared, since everything else must be computed for each cell.

Implements FiniteElement< dim, spacedim >.

template<class POLY, int dim, int spacedim = dim>
virtual UpdateFlags FE_Poly< POLY, dim, spacedim >::update_each ( const UpdateFlags  flags  )  const [protected, virtual]

Determine the values that need to be computed on every cell to be able to compute all values required by flags.

For the purpuse of this function, refer to the documentation in FiniteElement.

This class assumes that shape functions of this FiniteElement do not depend on the actual shape of the cells in real space.

The effect in this element is as follows:

  • if update_gradients is set, the result will contain update_gradients and update_covariant_transformation. The latter is required to transform the gradient on the unit cell to the real cell. Remark, that the action required by update_covariant_transformation is actually performed by the Mapping object used in conjunction with this finite element.
  • if update_hessians is set, the result will contain update_hessians and update_covariant_transformation. The rationale is the same as above and no higher derivatives of the transformation are required, since we use difference quotients for the actual computation.

Implements FiniteElement< dim, spacedim >.


Member Data Documentation

template<class POLY, int dim, int spacedim = dim>
POLY FE_Poly< POLY, dim, spacedim >::poly_space [protected]

The polynomial space. Its type is given by the template parameter POLY.


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

deal.II documentation generated on Mon Nov 23 22:57:41 2009 by doxygen 1.6.1