include/deal.II/fe/fe_dg_vector.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: fe_dg_vector.h 25460 2012-04-27 09:19:06Z bangerth @f$
00003 //
00004 //    Copyright (C) 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_dg_vector_h
00013 #define __deal2__fe_dg_vector_h
00014 
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/base/table.h>
00017 #include <deal.II/base/polynomials_raviart_thomas.h>
00018 #include <deal.II/base/polynomials_nedelec.h>
00019 #include <deal.II/base/polynomials_bdm.h>
00020 #include <deal.II/base/polynomial.h>
00021 #include <deal.II/base/tensor_product_polynomials.h>
00022 #include <deal.II/base/geometry_info.h>
00023 #include <deal.II/fe/fe.h>
00024 #include <deal.II/fe/fe_poly_tensor.h>
00025 
00026 #include <vector>
00027 
00028 DEAL_II_NAMESPACE_OPEN
00029 
00030 template <int dim, int spacedim> class MappingQ;
00031 
00032 
00051 template <class POLY, int dim, int spacedim=dim>
00052 class FE_DGVector
00053   :
00054   public FE_PolyTensor<POLY, dim, spacedim>
00055 {
00056   public:
00061     FE_DGVector (const unsigned int p, MappingType m);
00062   public:
00063 
00064     FiniteElement<dim, spacedim>* clone() const;
00065 
00075     virtual std::string get_name () const;
00076 
00077 
00085     virtual bool has_support_on_face (const unsigned int shape_index,
00086                                       const unsigned int face_index) const;
00087 
00088     virtual void interpolate(std::vector<double>&                local_dofs,
00089                              const std::vector<double>& values) const;
00090     virtual void interpolate(std::vector<double>&                local_dofs,
00091                              const std::vector<Vector<double> >& values,
00092                              unsigned int offset = 0) const;
00093     virtual void interpolate(
00094       std::vector<double>& local_dofs,
00095       const VectorSlice<const std::vector<std::vector<double> > >& values) const;
00096     virtual std::size_t memory_consumption () const;
00097 
00098   private:
00109     static std::vector<unsigned int>
00110     get_dpo_vector (const unsigned int degree);
00111 
00120     void initialize_support_points (const unsigned int degree);
00121 
00133     void initialize_restriction ();
00134 
00143     class InternalData : public FiniteElement<dim>::InternalDataBase
00144     {
00145       public:
00169         std::vector<std::vector<Tensor<1,dim> > > shape_values;
00170 
00189         std::vector<std::vector<Tensor<2,dim> > > shape_gradients;
00190     };
00191     Table<3, double> interior_weights;
00192 };
00193 
00194 
00195 
00203 template <int dim, int spacedim=dim>
00204 class FE_DGNedelec : public FE_DGVector<PolynomialsNedelec<dim>, dim, spacedim>
00205 {
00206 public:
00211   FE_DGNedelec (const unsigned int p);
00212 
00222   virtual std::string get_name () const;
00223 };
00224 
00225 
00226 
00234 template <int dim, int spacedim=dim>
00235 class FE_DGRaviartThomas : public FE_DGVector<PolynomialsRaviartThomas<dim>, dim, spacedim>
00236 {
00237 public:
00242   FE_DGRaviartThomas (const unsigned int p);
00243 
00253   virtual std::string get_name () const;
00254 };
00255 
00256 
00257 
00265 template <int dim, int spacedim=dim>
00266 class FE_DGBDM : public FE_DGVector<PolynomialsBDM<dim>, dim, spacedim>
00267 {
00268 public:
00273   FE_DGBDM (const unsigned int p);
00274 
00284   virtual std::string get_name () const;
00285 };
00286 
00287 
00288 DEAL_II_NAMESPACE_CLOSE
00289 
00290 #endif
00291 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

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