00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_BLOCKTRIANGULARSOLVER_DECL_HPP 00006 #define PLAYA_BLOCKTRIANGULARSOLVER_DECL_HPP 00007 00008 #include "PlayaDefs.hpp" 00009 #include "PlayaLinearSolverDecl.hpp" 00010 00011 00012 namespace Playa 00013 { 00014 /** */ 00015 template <class Scalar> 00016 class BlockTriangularSolver : public LinearSolverBase<Scalar>, 00017 public Playa::Handleable<LinearSolverBase<Scalar> > 00018 { 00019 public: 00020 /** */ 00021 BlockTriangularSolver(const LinearSolver<Scalar>& solver); 00022 00023 /** */ 00024 BlockTriangularSolver(const Array<LinearSolver<Scalar> >& solvers); 00025 00026 /** */ 00027 virtual ~BlockTriangularSolver(){} 00028 00029 /** */ 00030 virtual SolverState<Scalar> solve(const LinearOperator<Scalar>& op, 00031 const Vector<Scalar>& rhs, 00032 Vector<Scalar>& soln) const ; 00033 00034 /* */ 00035 GET_RCP(LinearSolverBase<Scalar>); 00036 private: 00037 Array<LinearSolver<Scalar> > solvers_; 00038 }; 00039 00040 } 00041 00042 #endif