include/deal.II/hp/fe_values.h

00001 //----------------------------  hp_fe_values.h  ---------------------------
00002 //    @f$Id: fe_values.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 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 //----------------------------  hp_fe_values.h  ---------------------------
00012 #ifndef __deal2__hp_fe_values_h
00013 #define __deal2__hp_fe_values_h
00014 
00015 #include <deal.II/base/config.h>
00016 #include <deal.II/fe/fe.h>
00017 #include <deal.II/hp/fe_collection.h>
00018 #include <deal.II/hp/q_collection.h>
00019 #include <deal.II/hp/mapping_collection.h>
00020 #include <deal.II/fe/fe_values.h>
00021 
00022 #include <map>
00023 #include <deal.II/base/std_cxx1x/shared_ptr.h>
00024 
00025 DEAL_II_NAMESPACE_OPEN
00026 
00027 template <int dim, int spacedim> class MappingQ1;
00028 template <int dim, int spacedim> class FiniteElement;
00029 
00030 
00031 
00032 namespace internal
00033 {
00034   namespace hp
00035   {
00057     template <int dim, int q_dim, class FEValues>
00058     class FEValuesBase
00059     {
00060       public:
00067         FEValuesBase (const ::hp::MappingCollection<dim,FEValues::space_dimension> &mapping_collection,
00068                       const ::hp::FECollection<dim,FEValues::space_dimension>      &fe_collection,
00069                       const ::hp::QCollection<q_dim>     &q_collection,
00070                       const UpdateFlags             update_flags);
00080         FEValuesBase (const ::hp::FECollection<dim,FEValues::space_dimension> &fe_collection,
00081                       const ::hp::QCollection<q_dim> &q_collection,
00082                       const UpdateFlags         update_flags);
00083 
00089         const ::hp::FECollection<dim,FEValues::space_dimension> &
00090         get_fe_collection () const;
00091 
00102         const FEValues & get_present_fe_values () const;
00103 
00104       protected:
00105 
00120         FEValues &
00121         select_fe_values (const unsigned int fe_index,
00122                           const unsigned int mapping_index,
00123                           const unsigned int q_index);
00124 
00125       protected:
00131         const SmartPointer<const ::hp::FECollection<dim,FEValues::space_dimension>,
00132                            FEValuesBase<dim,q_dim,FEValues> > fe_collection;
00133 
00139     const SmartPointer<const ::hp::MappingCollection<dim, FEValues::space_dimension>,
00140                        FEValuesBase<dim,q_dim,FEValues> > mapping_collection;
00141 
00148   const ::hp::QCollection<q_dim> q_collection;
00149 
00150   private:
00175   Table<3,std_cxx1x::shared_ptr<FEValues> > fe_values_table;
00176 
00184   TableIndices<3> present_fe_values_index;
00185 
00190   const UpdateFlags update_flags;
00191 };
00192 
00193 }
00194 
00195 }
00196 
00197 
00198 namespace hp
00199 {
00200 
00247   template <int dim, int spacedim=dim>
00248   class FEValues : public internal::hp::FEValuesBase<dim,dim,::FEValues<dim,spacedim> >
00249   {
00250     public:
00251 
00252       static const unsigned int dimension = dim;
00253 
00254       static const unsigned int space_dimension = spacedim;
00255 
00276       FEValues (const ::hp::MappingCollection<dim,spacedim> &mapping_collection,
00277                 const ::hp::FECollection<dim,spacedim>  &fe_collection,
00278                 const ::hp::QCollection<dim>       &q_collection,
00279                 const UpdateFlags             update_flags);
00280 
00281 
00304       FEValues (const hp::FECollection<dim,spacedim> &fe_collection,
00305                 const hp::QCollection<dim>      &q_collection,
00306                 const UpdateFlags            update_flags);
00307 
00308 
00408       void
00409       reinit (const typename hp::DoFHandler<dim,spacedim>::cell_iterator &cell,
00410               const unsigned int q_index = numbers::invalid_unsigned_int,
00411               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00412               const unsigned int fe_index = numbers::invalid_unsigned_int);
00413 
00443       void
00444       reinit (const typename ::DoFHandler<dim,spacedim>::cell_iterator &cell,
00445               const unsigned int q_index = numbers::invalid_unsigned_int,
00446               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00447               const unsigned int fe_index = numbers::invalid_unsigned_int);
00448 
00478       void
00479       reinit (const typename MGDoFHandler<dim,spacedim>::cell_iterator &cell,
00480               const unsigned int q_index = numbers::invalid_unsigned_int,
00481               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00482               const unsigned int fe_index = numbers::invalid_unsigned_int);
00483 
00514       void
00515       reinit (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00516               const unsigned int q_index = numbers::invalid_unsigned_int,
00517               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00518               const unsigned int fe_index = numbers::invalid_unsigned_int);
00519 
00520 
00521   };
00522 
00523 
00524 
00548   template <int dim, int spacedim=dim>
00549   class FEFaceValues : public internal::hp::FEValuesBase<dim,dim-1,::FEFaceValues<dim,spacedim> >
00550   {
00551     public:
00572       FEFaceValues (const hp::MappingCollection<dim,spacedim> &mapping_collection,
00573                     const hp::FECollection<dim,spacedim>  &fe_collection,
00574                     const hp::QCollection<dim-1>     &q_collection,
00575                     const UpdateFlags             update_flags);
00576 
00577 
00600       FEFaceValues (const hp::FECollection<dim,spacedim>  &fe_collection,
00601                     const hp::QCollection<dim-1> &q_collection,
00602                     const UpdateFlags             update_flags);
00603 
00703       void
00704       reinit (const typename hp::DoFHandler<dim,spacedim>::cell_iterator &cell,
00705               const unsigned int face_no,
00706               const unsigned int q_index = numbers::invalid_unsigned_int,
00707               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00708               const unsigned int fe_index = numbers::invalid_unsigned_int);
00709 
00739       void
00740       reinit (const typename ::DoFHandler<dim,spacedim>::cell_iterator &cell,
00741               const unsigned int face_no,
00742               const unsigned int q_index = numbers::invalid_unsigned_int,
00743               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00744               const unsigned int fe_index = numbers::invalid_unsigned_int);
00745 
00775       void
00776       reinit (const typename MGDoFHandler<dim,spacedim>::cell_iterator &cell,
00777               const unsigned int face_no,
00778               const unsigned int q_index = numbers::invalid_unsigned_int,
00779               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00780               const unsigned int fe_index = numbers::invalid_unsigned_int);
00781 
00812       void
00813       reinit (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
00814               const unsigned int face_no,
00815               const unsigned int q_index = numbers::invalid_unsigned_int,
00816               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00817               const unsigned int fe_index = numbers::invalid_unsigned_int);
00818   };
00819 
00820 
00821 
00829   template <int dim, int spacedim=dim>
00830   class FESubfaceValues : public internal::hp::FEValuesBase<dim,dim-1,::FESubfaceValues<dim,spacedim> >
00831   {
00832     public:
00853       FESubfaceValues (const hp::MappingCollection<dim,spacedim> &mapping_collection,
00854                        const hp::FECollection<dim,spacedim>  &fe_collection,
00855                        const hp::QCollection<dim-1>     &q_collection,
00856                        const UpdateFlags             update_flags);
00857 
00858 
00881       FESubfaceValues (const hp::FECollection<dim,spacedim> &fe_collection,
00882                        const hp::QCollection<dim-1>    &q_collection,
00883                        const UpdateFlags            update_flags);
00884 
00963       void
00964       reinit (const typename hp::DoFHandler<dim,spacedim>::cell_iterator &cell,
00965               const unsigned int face_no,
00966               const unsigned int subface_no,
00967               const unsigned int q_index = numbers::invalid_unsigned_int,
00968               const unsigned int mapping_index = numbers::invalid_unsigned_int,
00969               const unsigned int fe_index = numbers::invalid_unsigned_int);
00970 
01000       void
01001       reinit (const typename ::DoFHandler<dim,spacedim>::cell_iterator &cell,
01002               const unsigned int face_no,
01003               const unsigned int subface_no,
01004               const unsigned int q_index = numbers::invalid_unsigned_int,
01005               const unsigned int mapping_index = numbers::invalid_unsigned_int,
01006               const unsigned int fe_index = numbers::invalid_unsigned_int);
01007 
01037       void
01038       reinit (const typename MGDoFHandler<dim,spacedim>::cell_iterator &cell,
01039               const unsigned int face_no,
01040               const unsigned int subface_no,
01041               const unsigned int q_index = numbers::invalid_unsigned_int,
01042               const unsigned int mapping_index = numbers::invalid_unsigned_int,
01043               const unsigned int fe_index = numbers::invalid_unsigned_int);
01044 
01075       void
01076       reinit (const typename Triangulation<dim,spacedim>::cell_iterator &cell,
01077               const unsigned int face_no,
01078               const unsigned int subface_no,
01079               const unsigned int q_index = numbers::invalid_unsigned_int,
01080               const unsigned int mapping_index = numbers::invalid_unsigned_int,
01081               const unsigned int fe_index = numbers::invalid_unsigned_int);
01082   };
01083 
01084 }
01085 
01086 
01087 // -------------- inline and template functions --------------
01088 
01089 namespace internal
01090 {
01091   namespace hp
01092   {
01093     template <int dim, int q_dim, class FEValues>
01094     inline
01095     const FEValues &
01096     FEValuesBase<dim,q_dim,FEValues>::get_present_fe_values () const
01097     {
01098       return *fe_values_table(present_fe_values_index);
01099     }
01100 
01101 
01102 
01103     template <int dim, int q_dim, class FEValues>
01104     inline
01105     const ::hp::FECollection<dim,FEValues::space_dimension> &
01106     FEValuesBase<dim,q_dim,FEValues>::get_fe_collection () const
01107     {
01108       return *fe_collection;
01109     }
01110   }
01111 
01112 }
01113 
01114 DEAL_II_NAMESPACE_CLOSE
01115 
01116 #endif
01117 
 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