Go to the documentation of this file.00001
00002
00003 #ifndef arpackFabric_hh
00004 #define arpackFabric_hh
00005
00006 #include <memory>
00007 #include "operator/compositions.hh"
00008 #include "ARPACKsymm.hh"
00009 #include "solverFabric.hh"
00010
00011 namespace eigensolver {
00012
00013
00014
00021 class ArPackFabric : public SolverFabric<Real> {
00022 public:
00033 ArPackFabric(int kmax = 1, Real tol = 0.0, const int maxiter = 300,
00034 enum ArPackSymm::which target = ArPackSymm::SM,
00035 enum ArPackSymm::modus mode = ArPackSymm::REGINV,
00036 const Real sigma = 0.0,
00037 const concepts::Vector<Real>* start = 0) :
00038 solver_(0), OP_(0), B_(0), tmp1_(0), tmp2_(0), kmax_(kmax),
00039 maxiter_(maxiter), tol_(tol), target_(target), mode_(mode),
00040 sigma_(sigma), start_(start) {}
00041 virtual ~ArPackFabric();
00042 virtual ArPackSymm& operator()(concepts::Operator<Real>& stiff,
00043 concepts::Operator<Real>& mass);
00044 protected:
00045 virtual std::ostream& info(std::ostream& os) const;
00046 private:
00047 std::auto_ptr<ArPackSymm> solver_;
00048 std::auto_ptr<concepts::Operator<Real> > OP_, B_, tmp1_, tmp2_;
00050 int kmax_;
00052 int maxiter_;
00054 Real tol_;
00056 enum ArPackSymm::which target_;
00058 enum ArPackSymm::modus mode_;
00060 const Real sigma_;
00062 const concepts::Vector<Real>* start_;
00063 ArPackFabric(const ArPackFabric&);
00064
00065 void normalMode_(concepts::Operator<Real>& stiff,
00066 concepts::Operator<Real>& mass);
00067 void reginvMode_(concepts::Operator<Real>& stiff,
00068 concepts::Operator<Real>& mass);
00069 void shiftinvMode_(concepts::Operator<Real>& stiff,
00070 concepts::Operator<Real>& mass);
00071 void bucklingMode_(concepts::Operator<Real>& stiff,
00072 concepts::Operator<Real>& mass);
00073 void cayleyMode_(concepts::Operator<Real>& stiff,
00074 concepts::Operator<Real>& mass);
00075 };
00076
00077 }
00078
00079 #endif // arpackFabric_hh