Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

hp2D/hpAdaptiveSpaceH1.hh
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   // forward declarations
00017   template<class F>
00018     class SMatrixBase;
00019 
00020   class SMatrix1D;
00021 }
00022 
00023 namespace hp2D {
00024 
00025   using concepts::Real;
00026 
00027   // forward declarations
00028   template<class F>
00029     class Quad;
00030 
00031   class hpAdaptiveSpaceH1;
00032 
00033   // ******************************************** hpAdaptiveSpaceH1FromInput **
00034 
00054    hpAdaptiveSpaceH1*
00055    hpAdaptiveSpaceH1FromInput(concepts::Mesh2& msh,
00056                               const concepts::InOutParameters input,
00057                               bool verbose = false);
00058 
00059   // ***************************************************** hpAdaptiveSpaceH1 **
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 } // namespace hp2D
00203 
00204 #endif // hpAdaptSpace2DH1_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)