include/deal.II/fe/fe_abf.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: fe_abf.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2003, 2004, 2005, 2006, 2007, 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_abf_h
00013 #define __deal2__fe_abf_h
00014 
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/base/table.h>
00017 #include <deal.II/base/polynomials_abf.h>
00018 #include <deal.II/base/polynomial.h>
00019 #include <deal.II/base/tensor_product_polynomials.h>
00020 #include <deal.II/base/geometry_info.h>
00021 #include <deal.II/fe/fe.h>
00022 #include <deal.II/fe/fe_poly_tensor.h>
00023 
00024 #include <vector>
00025 
00026 DEAL_II_NAMESPACE_OPEN
00027 
00028 template <int dim, int spacedim> class MappingQ;
00029 
00030 
00033 
00096 template <int dim>
00097 class FE_ABF : public FE_PolyTensor<PolynomialsABF<dim>, dim>
00098 {
00099   public:
00104     FE_ABF (const unsigned int p);
00105 
00115     virtual std::string get_name () const;
00116 
00126     virtual bool has_support_on_face (const unsigned int shape_index,
00127                                       const unsigned int face_index) const;
00128 
00129     virtual void interpolate(std::vector<double>&                local_dofs,
00130                              const std::vector<double>& values) const;
00131     virtual void interpolate(std::vector<double>&                local_dofs,
00132                              const std::vector<Vector<double> >& values,
00133                              unsigned int offset = 0) const;
00134     virtual void interpolate(
00135       std::vector<double>& local_dofs,
00136       const VectorSlice<const std::vector<std::vector<double> > >& values) const;
00137     virtual std::size_t memory_consumption () const;
00138     virtual FiniteElement<dim> * clone() const;
00139 
00140   private:
00150     const unsigned int rt_order;
00151 
00162     static std::vector<unsigned int>
00163     get_dpo_vector (const unsigned int degree);
00164 
00175     void initialize_support_points (const unsigned int rt_degree);
00176 
00188     void initialize_restriction ();
00189 
00209     virtual UpdateFlags update_once (const UpdateFlags flags) const;
00210 
00227     virtual UpdateFlags update_each (const UpdateFlags flags) const;
00228 
00237     class InternalData : public FiniteElement<dim>::InternalDataBase
00238     {
00239       public:
00263         std::vector<std::vector<Tensor<1,dim> > > shape_values;
00264 
00283         std::vector<std::vector<Tensor<2,dim> > > shape_gradients;
00284     };
00285 
00299     Table<2, double> boundary_weights;
00311     Table<3, double> interior_weights;
00312 
00313 
00314 
00328     Table<2, double> boundary_weights_abf;
00340     Table<3, double> interior_weights_abf;
00341 
00342 
00347     template <int dim1> friend class FE_ABF;
00348 };
00349 
00350 
00351 
00355 DEAL_II_NAMESPACE_CLOSE
00356 
00357 #endif
00358 
 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