00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_BICGSTABSOLVER_DECL_HPP 00006 #define PLAYA_BICGSTABSOLVER_DECL_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaKrylovSolver.hpp" 00010 #include "PlayaHandleable.hpp" 00011 #include "PlayaPrintable.hpp" 00012 #include "PlayaOut.hpp" 00013 #include "Teuchos_Describable.hpp" 00014 00015 00016 namespace Playa 00017 { 00018 using namespace Teuchos; 00019 00020 /** 00021 * 00022 */ 00023 template <class Scalar> 00024 class BICGSTABSolver : public KrylovSolver<Scalar>, 00025 public Playa::Handleable<LinearSolverBase<Scalar> >, 00026 public Printable, 00027 public Describable 00028 { 00029 public: 00030 /** */ 00031 BICGSTABSolver(const ParameterList& params = ParameterList()); 00032 00033 /** */ 00034 BICGSTABSolver(const ParameterList& params, 00035 const PreconditionerFactory<Scalar>& precond); 00036 00037 /** */ 00038 virtual ~BICGSTABSolver(){;} 00039 00040 /** \name Printable interface */ 00041 //@{ 00042 /** Write to a stream */ 00043 void print(std::ostream& os) const ; 00044 //@} 00045 00046 /** \name Describable interface */ 00047 //@{ 00048 /** Write a brief description */ 00049 std::string description() const {return "BICGSTABSolver";} 00050 //@} 00051 00052 /** \name Handleable interface */ 00053 //@{ 00054 /** Return a ref count pointer to a newly created object */ 00055 virtual RCP<LinearSolverBase<Scalar> > getRcp() 00056 {return rcp(this);} 00057 //@} 00058 00059 protected: 00060 00061 /** */ 00062 virtual SolverState<Scalar> solveUnprec(const LinearOperator<Scalar>& op, 00063 const Vector<Scalar>& rhs, 00064 Vector<Scalar>& soln) const ; 00065 00066 00067 }; 00068 00069 00070 } 00071 00072 #endif