Go to the documentation of this file.00001
00006 #ifndef hpAdaptSpace2DH1_hh
00007 #define hpAdaptSpace2DH1_hh
00008
00009 #include "basics/typedefs.hh"
00010 #include "toolbox/inputOutput.hh"
00011 #include "hp2D/hpAdaptiveSpace.hh"
00012 #include "hp2D/buildH1TColumns.hh"
00013
00014 namespace concepts {
00015
00016
00017 template<class F>
00018 class SMatrixBase;
00019
00020 class SMatrix1D;
00021 }
00022
00023 namespace hp2D {
00024
00025 using concepts::Real;
00026
00027
00028 template<class F>
00029 class Quad;
00030
00031 class hpAdaptiveSpaceH1;
00032
00033
00034
00054 hpAdaptiveSpaceH1*
00055 hpAdaptiveSpaceH1FromInput(concepts::Mesh2& msh,
00056 const concepts::InOutParameters input,
00057 bool verbose = false);
00058
00059
00060
00061 class hpAdaptiveSpaceH1 : public hpAdaptiveSpace<Real> {
00062 public:
00063 typedef concepts::Scan<hp2D::Element<Real> > Scan;
00064
00079 hpAdaptiveSpaceH1(concepts::Mesh2& msh, uint l, uint p,
00080 concepts::BoundaryConditions* bc = 0,
00081 concepts::CellConditions* cc = 0);
00082
00104 hpAdaptiveSpaceH1(hpFull& prebuild,
00105 concepts::BoundaryConditions* bc = 0,
00106 concepts::CellConditions* cc = 0 , uint spcNo = 0,
00107 uint* offset = 0, uint* idx = 0);
00108
00112 hpAdaptiveSpaceH1(const hpAdaptiveSpaceH1& spc);
00113 virtual ~hpAdaptiveSpaceH1();
00114
00126 void buildVertexDofs(const BuildTColumnsBase<Real>* b) {
00127 setBuildVertexDofs_(b);
00128 }
00136 void buildEdgeDofs(const BuildTColumnsBase<Real>* b) {
00137 setBuildEdgeDofs_(b);
00138 }
00147 void buildInnerDofs(const BuildTColumnsBase<Real>* b) {
00148 setBuildInnerDofs_(b);
00149 }
00151
00155 virtual void recomputeShapefunctions();
00156 protected:
00157 virtual std::ostream& info(std::ostream& os) const;
00158
00161 virtual Element<Real>* newElement_(concepts::Cell2& cell, ushort* pMax,
00162 concepts::TColumn<Real>* T0,
00163 concepts::TColumn<Real>* T1) const;
00164
00169 virtual concepts::TColumn<Real>*
00170 applySmatrices_(const concepts::Element<Real>& elm, uint i,
00171 const concepts::TColumn<Real>* T0,
00172 const concepts::TColumn<Real>* T1);
00173 private:
00180 void recomputeSmatrices_(const Quad<Real>& elm);
00181
00183 std::auto_ptr<concepts::SMatrix1D> S1left_, S1right_;
00184
00188 std::auto_ptr<concepts::SMatrixBase<Real> > Smatrices2H_[2];
00189
00193 std::auto_ptr<concepts::SMatrixBase<Real> > Smatrices2V_[2];
00194
00198 std::auto_ptr<concepts::SMatrixBase<Real> > Smatrices4_[4];
00199
00200 };
00201
00202 }
00203
00204 #endif // hpAdaptSpace2DH1_hh