00001 #ifndef KAYLOGHINPRECONDITIONERFACTORY_H 00002 #define KAYLOGHINPRECONDITIONERFACTORY_H 00003 00004 #include "TSFDefs.h" 00005 #include "TSFSmartPtr.h" 00006 #include "TSFPreconditionerFactoryBase.h" 00007 #include "TSFLinearSolver.h" 00008 #include "StaticLinearProblem.h" 00009 #include "Mesh.h" 00010 #include "Expr.h" 00011 #include <vector> 00012 #include <iostream> 00013 #include <string> 00014 00015 namespace Sundance 00016 { 00017 using namespace TSF; 00018 using std::vector; 00019 using std::string; 00020 using std::ostream; 00021 00022 00023 /** \ingroup Preconditioner 00024 * 00025 */ 00026 00027 class KayLoghinPreconditionerFactory : public TSFPreconditionerFactoryBase 00028 { 00029 public: 00030 /** */ 00031 KayLoghinPreconditionerFactory(const Mesh& mesh, 00032 const Expr& u0, 00033 const Expr& reynolds); 00034 /** TUVD */ 00035 virtual ~KayLoghinPreconditionerFactory(); 00036 00037 /** create a concrete preconditioner */ 00038 virtual TSFPreconditioner createPreconditioner(const TSFLinearOperator& A) const; 00039 00040 /** write to a string */ 00041 virtual string toString() const; 00042 00043 private: 00044 TSFLinearSolver mpSolver_; 00045 TSFLinearSolver apSolver_; 00046 mutable StaticLinearProblem mpProb_; 00047 mutable StaticLinearProblem apProb_; 00048 mutable StaticLinearProblem fpProb_; 00049 }; 00050 00051 } 00052 00053 00054 #endif