00001 /* hp extension for 1D FEM: ie. determine wether to refine or raise p 00002 * in an element 00003 */ 00004 00005 #ifndef hpExtension1D_hh 00006 #define hpExtension1D_hh 00007 00008 #include "basics/typedefs.hh" 00009 #include "basics/exceptions.hh" 00010 #include "space/postProcess.hh" 00011 00012 namespace concepts { 00013 // forward declaration 00014 template<typename F> 00015 class Vector; 00016 00017 template<typename F> 00018 class Array; 00019 } 00020 00021 namespace hp1D { 00022 using concepts::Real; 00023 00024 // ******************************************************** RefineOrRaise ** 00025 00037 template<typename F> 00038 class RefineOrRaise : public concepts::CellPostprocess<F> { 00039 public: 00045 RefineOrRaise(const concepts::Vector<F>& solution, 00046 const Real theta, 00047 concepts::AdaptiveSpace<Real, 00048 concepts::AdaptiveAdjustP<1> >& spc); 00049 virtual void operator() (const concepts::Element<F>& elm) 00050 throw(concepts::MissingFeature); 00051 virtual void operator() (const concepts::Cell& cell) 00052 throw(concepts::MissingFeature) {} 00053 private: 00055 concepts::Array<F> coeff_; 00057 concepts::Array<F> legendre_; 00059 const concepts::Vector<F>& solution_; 00061 concepts::AdaptiveSpace<Real, concepts::AdaptiveAdjustP<1> >& spc_; 00063 const Real theta_; 00064 }; 00065 00066 } // namespace hp1D 00067 00068 #endif // hpExtension1D_hh