00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__fe_poly_h
00013 #define __deal2__fe_poly_h
00014
00015
00016 #include <deal.II/fe/fe.h>
00017
00018 DEAL_II_NAMESPACE_OPEN
00019
00022
00064 template <class POLY, int dim=POLY::dimension, int spacedim=dim>
00065 class FE_Poly : public FiniteElement<dim,spacedim>
00066 {
00067 public:
00071 FE_Poly (const POLY& poly_space,
00072 const FiniteElementData<dim> &fe_data,
00073 const std::vector<bool> &restriction_is_additive_flags,
00074 const std::vector<std::vector<bool> > &nonzero_components);
00075
00082 unsigned int get_degree () const;
00083
00091 std::vector<unsigned int> get_poly_space_numbering() const;
00092
00098 std::vector<unsigned int> get_poly_space_numbering_inverse() const;
00099
00108 virtual double shape_value (const unsigned int i,
00109 const Point<dim> &p) const;
00110
00128 virtual double shape_value_component (const unsigned int i,
00129 const Point<dim> &p,
00130 const unsigned int component) const;
00131
00140 virtual Tensor<1,dim> shape_grad (const unsigned int i,
00141 const Point<dim> &p) const;
00142
00160 virtual Tensor<1,dim> shape_grad_component (const unsigned int i,
00161 const Point<dim> &p,
00162 const unsigned int component) const;
00163
00174 virtual Tensor<2,dim> shape_grad_grad (const unsigned int i,
00175 const Point<dim> &p) const;
00176
00194 virtual Tensor<2,dim> shape_grad_grad_component (const unsigned int i,
00195 const Point<dim> &p,
00196 const unsigned int component) const;
00197 protected:
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
00233
00260 virtual UpdateFlags update_once (const UpdateFlags flags) const;
00261
00316 virtual UpdateFlags update_each (const UpdateFlags flags) const;
00317
00318
00327 class InternalData : public FiniteElement<dim,spacedim>::InternalDataBase
00328 {
00329 public:
00350 std::vector<std::vector<double> > shape_values;
00351
00370 std::vector<std::vector<Tensor<1,dim> > > shape_gradients;
00371 };
00372
00378 POLY poly_space;
00379 };
00380
00383 DEAL_II_NAMESPACE_CLOSE
00384
00385 #endif
00386