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

eigensolver/constrained.hh
Go to the documentation of this file.
00001 // solves a constrained eigenvalue problem
00002 
00003 #ifndef constrainedEV_hh
00004 #define constrainedEV_hh
00005 
00006 #include <memory>
00007 #include <cstdlib>
00008 #include "eigens.hh"
00009 #include "solverFabric.hh"
00010 #include "space/space.hh"
00011 #include "operator/compositions.hh"
00012 #include "operator/sparseMatrix.hh"
00013 #include "operator/permutation.hh"
00014 #include "sparseqr/givensRotations.hh"
00015 
00016 namespace eigensolver {
00017 
00018   // *********************************************************** Constrained **
00019 
00051   class Constrained : public EigenSolver<Real> {
00052   public:
00059     Constrained(concepts::Operator<Real>& A, concepts::Operator<Real>& M,
00060     const concepts::SparseMatrix<Real>& C, SolverFabric<Real>& solver) :
00061       solver_(solver), computed_(false), A_(A), M_(M), C_(C),
00062       lambda_(0), eigenvectors_(0), ev_(0), kmax_(0),
00063       Pr(0), Prt(0), Qgt(0), Qg(0), ext(0), restr(0), PrQgt(0),
00064       QgPrt(0), restrPrQgt(0), QgPrtext(0), restrPrQgtA(0),
00065       restrPrQgtAQgPrtext(0), restrPrQgtM(0), restrPrQgtMQgPrtext(0),
00066       it_(0), k_conv_(0) {}
00067     virtual ~Constrained();
00068     virtual const concepts::Array<Real>& getEV();
00069     virtual const concepts::Array<concepts::Vector<Real>*>& getEF();
00070     virtual uint iterations() const { return it_; }
00071     virtual uint converged() const { return k_conv_; }
00072   protected:
00073     virtual std::ostream& info(std::ostream& os) const;
00074   private:
00076     SolverFabric<Real>& solver_;
00077 
00081     void compute_();
00083     bool computed_;
00084 
00086     concepts::Operator<Real>& A_;
00088     concepts::Operator<Real>& M_;
00090     const concepts::SparseMatrix<Real>& C_;
00091 
00093     concepts::Array<Real> lambda_;
00095     concepts::Array<Real> eigenvectors_;
00097     concepts::Array<concepts::Vector<Real>*> ev_;
00098 
00100     uint kmax_;
00101 
00102     concepts::Permutation<Real>* Pr;
00103     std::auto_ptr<concepts::Permutation<Real> > Prt;
00104     sparseqr::GivensRotations<Real>* Qgt, * Qg;
00105     concepts::TrivExtendRestrict<Real>* ext, * restr;
00106     std::auto_ptr<concepts::Compose<Real> > PrQgt, QgPrt, restrPrQgt,
00107       QgPrtext, restrPrQgtA, restrPrQgtAQgPrtext, restrPrQgtM,
00108       restrPrQgtMQgPrtext;
00109 
00111     uint it_, k_conv_;
00112   };
00113 
00114 } // namespace eigensolver
00115 
00116 #endif // constrainedEV_hh

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