00001 00007 #pragma once 00008 00009 #include "toolbox/set.hh" 00010 #include "hp2D/hpAdaptiveSpace.hh" 00011 00012 namespace hp2D { 00013 00014 using concepts::Real; 00015 00016 // ****************************************************** hpAdaptiveSpaceDG ** 00017 00023 template<class F> 00024 class hpAdaptiveSpaceDG : public concepts::SpaceOnCells<Real> { 00025 public: 00026 typedef concepts::Scan<hp2D::Element<Real> > Scan; 00027 00028 hpAdaptiveSpaceDG(concepts::Mesh2& msh, uint l, uint p, 00029 concepts::Sequence<concepts::Set<uint> > attrib, 00030 concepts::BoundaryConditions* bc = 0, 00031 bool linearTrunk = false); 00032 ~hpAdaptiveSpaceDG(); 00033 inline virtual uint dim() const { return dim_; } 00034 inline virtual uint nelm() const { return nelm_; } 00035 inline virtual Scan* scan() const { 00036 return new concepts::PListScan<Element<Real> >(*elm_); 00037 } 00038 00040 void rebuild(); 00041 00045 void recomputeShapefunctions(); 00046 00047 const concepts::Sequence<F*> spaces() const { return spc_; } 00048 protected: 00049 virtual std::ostream& info(std::ostream& os) const; 00051 concepts::Sequence<F*> spc_; 00052 private: 00054 uint dim_; 00056 uint nelm_; 00058 uint build_; 00060 concepts::Joiner<Element<Real>*, 1>* elm_; 00062 concepts::Sequence<concepts::CellConditions> cc_; 00063 }; 00064 00065 // **************************************************** hpAdaptiveSpaceH1_DG ** 00066 00067 typedef hpAdaptiveSpaceDG<hpAdaptiveSpaceH1> hpAdaptiveSpaceH1_DG; 00068 00069 // ******************************************* hpAdaptiveSpaceH1_DGFromInput ** 00070 00091 hpAdaptiveSpaceH1_DG* 00092 hpAdaptiveSpaceH1_DGFromInput(concepts::Mesh2& msh, 00093 const concepts::InOutParameters input, 00094 bool verbose = false); 00095 00096 00097 } // namespace hp2D