PlayaParameterListPreconditionerFactory.hpp

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 
00026 class ParameterListPreconditionerFactory
00027   : public PreconditionerFactoryBase<double>
00028 {
00029 public:
00030 
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 
00042   virtual ~ParameterListPreconditionerFactory(){;}
00043     
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 

doxygen