include/deal.II/fe/fe_nedelec.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: fe_nedelec.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2002, 2003, 2004, 2005, 2006, 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_nedelec_h
00013 #define __deal2__fe_nedelec_h
00014 
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/base/table.h>
00017 #include <deal.II/base/tensor.h>
00018 #include <deal.II/base/tensor_base.h>
00019 #include <deal.II/base/polynomials_nedelec.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 #include <vector>
00026 
00027 DEAL_II_NAMESPACE_OPEN
00028 
00029 template <int dim, int spacedim> class MappingQ;
00030 
00031 
00034 
00153 template <int dim>
00154 class FE_Nedelec : public FE_PolyTensor<PolynomialsNedelec<dim>, dim>
00155 {
00156    public:
00161       FE_Nedelec (const unsigned int p);
00162 
00172     virtual std::string get_name () const;
00173 
00174 
00179     virtual bool has_support_on_face (const unsigned int shape_index,
00180                                       const unsigned int face_index) const;
00181 
00192     virtual bool hp_constraints_are_implemented () const;
00193 
00198     virtual FiniteElementDomination::Domination
00199     compare_for_face_domination (const FiniteElement<dim>& fe_other) const;
00221     virtual std::vector<std::pair<unsigned int, unsigned int> >
00222     hp_vertex_dof_identities (const FiniteElement<dim>& fe_other) const;
00223 
00228     virtual std::vector<std::pair<unsigned int, unsigned int> >
00229     hp_line_dof_identities (const FiniteElement<dim>& fe_other) const;
00230 
00235     virtual std::vector<std::pair<unsigned int, unsigned int> >
00236     hp_quad_dof_identities (const FiniteElement<dim>& fe_other) const;
00237 
00251     virtual void
00252     get_face_interpolation_matrix (const FiniteElement<dim>& source,
00253                                    FullMatrix<double>& matrix) const;
00254 
00268     virtual void
00269     get_subface_interpolation_matrix (const FiniteElement<dim>& source,
00270                                       const unsigned int subface,
00271                                       FullMatrix<double>& matrix) const;
00272 
00273     virtual void interpolate (std::vector<double>& local_dofs,
00274                               const std::vector<double>& values) const;
00275 
00276     virtual void interpolate (std::vector<double>& local_dofs,
00277                               const std::vector<Vector<double> >& values,
00278                               unsigned int offset = 0) const;
00279     virtual void interpolate (std::vector<double>& local_dofs,
00280                               const VectorSlice<const std::vector<std::vector<double> > >& values)
00281     const;
00282     virtual std::size_t memory_consumption () const;
00283     virtual FiniteElement<dim> * clone() const;
00284 
00285   private:
00303     static std::vector<unsigned int>
00304       get_dpo_vector (const unsigned int degree, bool dg=false);
00305 
00316     void initialize_support_points (const unsigned int degree);
00317 
00329     void initialize_restriction ();
00330 
00339     class InternalData : public FiniteElement<dim>::InternalDataBase
00340     {
00341       public:
00365         std::vector<std::vector<Tensor<1, dim> > > shape_values;
00366 
00385         std::vector<std::vector<Tensor<2, dim> > > shape_gradients;
00386     };
00387 
00396     Table<2, double> boundary_weights;
00397 
00402     template <int dim1> friend class FE_Nedelec;
00403 };
00404 
00405 /* -------------- declaration of explicit specializations ------------- */
00406 
00407 #ifndef DOXYGEN
00408 
00409 template <>
00410 void
00411 FE_Nedelec<1>::initialize_restriction();
00412 
00413 #endif // DOXYGEN
00414 
00417 DEAL_II_NAMESPACE_CLOSE
00418 
00419 #endif
00420 
 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