Go to the documentation of this file.00001
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
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 }
00115
00116 #endif // constrainedEV_hh