00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __deal2__fe_dgq_h
00013 #define __deal2__fe_dgq_h
00014
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/base/tensor_product_polynomials.h>
00017 #include <deal.II/fe/fe_poly.h>
00018
00019 DEAL_II_NAMESPACE_OPEN
00020
00021 template <int dim, int spacedim> class MappingQ;
00022 template <int dim> class Quadrature;
00023
00026
00078 template <int dim, int spacedim=dim>
00079 class FE_DGQ : public FE_Poly<TensorProductPolynomials<dim>, dim, spacedim>
00080 {
00081 public:
00093 FE_DGQ (const unsigned int p);
00094
00104 virtual std::string get_name () const;
00105
00122 virtual void
00123 get_interpolation_matrix (const FiniteElement<dim, spacedim> &source,
00124 FullMatrix<double> &matrix) const;
00125
00147 virtual void
00148 get_face_interpolation_matrix (const FiniteElement<dim, spacedim> &source,
00149 FullMatrix<double> &matrix) const;
00150
00172 virtual void
00173 get_subface_interpolation_matrix (const FiniteElement<dim, spacedim> &source,
00174 const unsigned int subface,
00175 FullMatrix<double> &matrix) const;
00176
00220 virtual
00221 std::vector<std::pair<unsigned int, unsigned int> >
00222 hp_vertex_dof_identities (const FiniteElement<dim, spacedim> &fe_other) const;
00223
00235 virtual
00236 std::vector<std::pair<unsigned int, unsigned int> >
00237 hp_line_dof_identities (const FiniteElement<dim, spacedim> &fe_other) const;
00238
00250 virtual
00251 std::vector<std::pair<unsigned int, unsigned int> >
00252 hp_quad_dof_identities (const FiniteElement<dim, spacedim> &fe_other) const;
00253
00266 virtual bool hp_constraints_are_implemented () const;
00267
00280 virtual
00281 FiniteElementDomination::Domination
00282 compare_for_face_domination (const FiniteElement<dim, spacedim> &fe_other) const;
00283
00301 virtual bool has_support_on_face (const unsigned int shape_index,
00302 const unsigned int face_index) const;
00303
00315 virtual std::size_t memory_consumption () const;
00316
00317
00318 protected:
00333 FE_DGQ (const Quadrature<1>& points);
00334
00342 virtual FiniteElement<dim, spacedim> *clone() const;
00343
00344 private:
00355 static std::vector<unsigned int> get_dpo_vector (const unsigned int degree);
00356
00383 void rotate_indices (std::vector<unsigned int> &indices,
00384 const char direction) const;
00385
00389 template <int dim1, int spacedim1> friend class FE_DGQ;
00390
00396 template <int dim1, int spacedim1> friend class MappingQ;
00397 };
00398
00399
00400
00416 template <int dim>
00417 class FE_DGQArbitraryNodes : public FE_DGQ<dim>
00418 {
00419 public:
00430 FE_DGQArbitraryNodes (const Quadrature<1>& points);
00431
00441 virtual std::string get_name () const;
00442
00443 protected:
00451 virtual FiniteElement<dim> *clone() const;
00452 };
00453
00454
00457 DEAL_II_NAMESPACE_CLOSE
00458
00459 #endif
00460