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

eigensolver/arpackFabric.hh
Go to the documentation of this file.
00001 // fabric for eigensolver ARPACK
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   // ********************************************************** ArPackFabric **
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 } // namespace eigensolver
00078 
00079 #endif // arpackFabric_hh

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