00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MEROS_SIMPLE_PRECONDITIONERFACTORY_H
00030 #define MEROS_SIMPLE_PRECONDITIONERFACTORY_H
00031
00037 #include "Teuchos_ParameterListAcceptor.hpp"
00038
00039 #include "Thyra_SolveSupportTypes.hpp"
00040 #include "Thyra_LinearOpSourceBase.hpp"
00041 #include "Thyra_PreconditionerBase.hpp"
00042 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00043 #include "Thyra_LinearOpWithSolveBase.hpp"
00044 #include "Thyra_PreconditionerFactoryBase.hpp"
00045
00046 #include "Meros_SIMPLEOperatorSource.h"
00047
00048
00049 namespace Meros
00050 {
00051
00052 using Teuchos::ParameterList;
00053 using Teuchos::RCP;
00054 using Teuchos::rcp;
00055 using Teuchos::null;
00056 using namespace Thyra;
00057
00103 class SIMPLEPreconditionerFactory
00104 : public PreconditionerFactoryBase<double>
00105 {
00106 public:
00109
00111 SIMPLEPreconditionerFactory();
00112
00113
00118 SIMPLEPreconditionerFactory(
00119 RCP<const LinearOpWithSolveFactoryBase<double> > const& FSolveStrategy,
00120 RCP<const LinearOpWithSolveFactoryBase<double> > const& SchurSolveStrategy
00121 );
00122
00124
00127
00131 bool isCompatible(const LinearOpSourceBase<double> &fwdOpSrc ) const;
00132
00143 RCP<PreconditionerBase<double> > createPrec() const;
00144
00145
00147 void initializePrec(const RCP<const LinearOpSourceBase<double> >
00148 &fwdOpSrc,
00149 PreconditionerBase<double> *precOp,
00150 const ESupportSolveUse
00151 supportSolveUse = SUPPORT_SOLVE_UNSPECIFIED) const;
00152
00153
00154
00156 void uninitializePrec(PreconditionerBase<double> *prec,
00157 RCP<const LinearOpSourceBase<double> > *fwdOpSrc,
00158 ESupportSolveUse *supportSolveUse = NULL) const;
00159
00160
00162
00165
00167 void setParameterList(RCP<ParameterList> const& paramList);
00169 RCP<ParameterList> getNonconstParameterList();
00171 RCP<ParameterList> unsetParameterList();
00173 RCP<const ParameterList> getParameterList() const;
00175 RCP<const Teuchos::ParameterList> getValidParameters() const;
00177
00178
00179
00180
00181 private:
00182
00183 mutable RCP<ParameterList> validPL_;
00184 RCP<ParameterList> paramList_;
00185
00186 RCP<const LinearOpWithSolveFactoryBase<double> > FSolveStrategy_;
00187 RCP<const LinearOpWithSolveFactoryBase<double> > SchurSolveStrategy_;
00188
00189 };
00190
00191 }
00192
00193 #endif // MEROS_SIMPLE_PRECONDITIONERFACTORY_H