00001 /*@HEADER 00002 // 00003 //@HEADER 00004 */ 00005 00006 00007 #ifndef PLAYA_PARAMETERLIST_PRECONDITIONERFACTORY_HPP 00008 #define PLAYA_PARAMETERLIST_PRECONDITIONERFACTORY_HPP 00009 00010 #include "PlayaDefs.hpp" 00011 #include "PlayaPreconditionerFactoryBase.hpp" 00012 #include "PlayaILUKPreconditionerFactory.hpp" 00013 #include "PlayaLinearOperatorDecl.hpp" 00014 #include "Teuchos_ParameterList.hpp" 00015 #include "PlayaILUFactorizableOp.hpp" 00016 #include "PlayaLinearSolverBaseDecl.hpp" 00017 #include "PlayaMLOperator.hpp" 00018 00019 namespace Playa 00020 { 00021 using namespace Teuchos; 00022 00023 /** 00024 * 00025 */ 00026 class ParameterListPreconditionerFactory 00027 : public PreconditionerFactoryBase<double> 00028 { 00029 public: 00030 00031 /** Construct with a parameter list */ 00032 ParameterListPreconditionerFactory(const ParameterList& params) 00033 : PreconditionerFactoryBase<double>(), params_(params) 00034 { 00035 const std::string& pName = params_.name(); 00036 TEUCHOS_TEST_FOR_EXCEPTION(pName != "Preconditioner", std::runtime_error, 00037 "expected tag=Preconditioner in parameter list " << std::endl 00038 << params_); 00039 } 00040 00041 /** virtual dtor */ 00042 virtual ~ParameterListPreconditionerFactory(){;} 00043 00044 /** */ 00045 Preconditioner<double> 00046 createPreconditioner(const LinearOperator<double>& A) const ; 00047 00048 /* Handleable boilerplate */ 00049 GET_RCP(PreconditionerFactoryBase<double>); 00050 private: 00051 00052 ParameterList params_; 00053 }; 00054 00055 00056 } 00057 00058 #endif 00059 00060 00061 00062