00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
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