include/deal.II/fe/fe_poly_tensor.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: fe_poly_tensor.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2005, 2006, 2009, 2010, 2011, 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__fe_poly_tensor_h
00013 #define __deal2__fe_poly_tensor_h
00014 
00015 
00016 #include <deal.II/lac/full_matrix.h>
00017 #include <deal.II/fe/fe.h>
00018 #include <deal.II/base/derivative_form.h>
00019 
00020 DEAL_II_NAMESPACE_OPEN
00021 
00114 template <class POLY, int dim, int spacedim=dim>
00115 class FE_PolyTensor : public FiniteElement<dim,spacedim>
00116 {
00117   public:
00126     FE_PolyTensor (const unsigned int degree,
00127                    const FiniteElementData<dim> &fe_data,
00128                    const std::vector<bool> &restriction_is_additive_flags,
00129                    const std::vector<std::vector<bool> > &nonzero_components);
00130 
00136     virtual double shape_value (const unsigned int i,
00137                                 const Point<dim> &p) const;
00138 
00139     virtual double shape_value_component (const unsigned int i,
00140                                           const Point<dim> &p,
00141                                           const unsigned int component) const;
00142 
00148     virtual Tensor<1,dim> shape_grad (const unsigned int  i,
00149                                       const Point<dim>   &p) const;
00150 
00151     virtual Tensor<1,dim> shape_grad_component (const unsigned int i,
00152                                                 const Point<dim> &p,
00153                                                 const unsigned int component) const;
00154 
00160     virtual Tensor<2,dim> shape_grad_grad (const unsigned int  i,
00161                                            const Point<dim> &p) const;
00162 
00163     virtual Tensor<2,dim> shape_grad_grad_component (const unsigned int i,
00164                                                      const Point<dim> &p,
00165                                                      const unsigned int component) const;
00166 
00177     virtual UpdateFlags update_once (const UpdateFlags flags) const;
00188     virtual UpdateFlags update_each (const UpdateFlags flags) const;
00189 
00190   protected:
00197     MappingType mapping_type;
00198 
00199     virtual
00200     typename Mapping<dim,spacedim>::InternalDataBase *
00201     get_data (const UpdateFlags,
00202               const Mapping<dim,spacedim>& mapping,
00203               const Quadrature<dim>& quadrature) const ;
00204 
00205     virtual void
00206     fill_fe_values (const Mapping<dim,spacedim>                       &mapping,
00207                     const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00208                     const Quadrature<dim>                             &quadrature,
00209                     typename Mapping<dim,spacedim>::InternalDataBase  &mapping_internal,
00210                     typename Mapping<dim,spacedim>::InternalDataBase  &fe_internal,
00211                     FEValuesData<dim,spacedim>                        &data,
00212                     CellSimilarity::Similarity                   &cell_similarity) const;
00213 
00214     virtual void
00215     fill_fe_face_values (const Mapping<dim,spacedim> &mapping,
00216                          const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00217                          const unsigned int                                  face_no,
00218                          const Quadrature<dim-1>                            &quadrature,
00219                          typename Mapping<dim,spacedim>::InternalDataBase   &mapping_internal,
00220                          typename Mapping<dim,spacedim>::InternalDataBase   &fe_internal,
00221                          FEValuesData<dim,spacedim>& data) const ;
00222 
00223     virtual void
00224     fill_fe_subface_values (const Mapping<dim,spacedim> &mapping,
00225                             const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00226                             const unsigned int                    face_no,
00227                             const unsigned int                    sub_no,
00228                             const Quadrature<dim-1>                &quadrature,
00229                             typename Mapping<dim,spacedim>::InternalDataBase      &mapping_internal,
00230                             typename Mapping<dim,spacedim>::InternalDataBase      &fe_internal,
00231                             FEValuesData<dim,spacedim>& data) const ;
00232 
00248     class InternalData : public FiniteElement<dim,spacedim>::InternalDataBase
00249     {
00250       public:
00260         std::vector<std::vector<Tensor<1,dim> > > shape_values;
00261 
00271         std::vector< std::vector< DerivativeForm<1, dim, spacedim> > > shape_grads;
00272     };
00273 
00279     POLY poly_space;
00280 
00301     FullMatrix<double> inverse_node_matrix;
00302 
00313     mutable Point<dim> cached_point;
00314 
00320     mutable std::vector<Tensor<1,dim> > cached_values;
00321 
00327     mutable std::vector<Tensor<2,dim> > cached_grads;
00328 
00334     mutable std::vector<Tensor<3,dim> > cached_grad_grads;
00335 };
00336 
00337 DEAL_II_NAMESPACE_CLOSE
00338 
00339 #endif
00340 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Tue May 22 2012 12:06:08 by doxygen 1.7.3