Thyra_AmesosLinearOpWithSolveFactory.hpp
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
00030
00031 #ifndef THYRA_AMESOS_LINEAR_OP_WITH_SOLVE_FACTORY_HPP
00032 #define THYRA_AMESOS_LINEAR_OP_WITH_SOLVE_FACTORY_HPP
00033
00034 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00035 #include "Thyra_AmesosTypes.hpp"
00036 #include "Amesos_BaseSolver.h"
00037 #include "Thyra_EpetraOperatorViewExtractorBase.hpp"
00038 #include "Teuchos_StandardMemberCompositionMacros.hpp"
00039 #include "Teuchos_StandardCompositionMacros.hpp"
00040
00041 namespace Thyra {
00042
00069 class AmesosLinearOpWithSolveFactory : public LinearOpWithSolveFactoryBase<double> {
00070 public:
00071
00074
00076 static const std::string SolverType_name;
00078 static const std::string RefactorizationPolicy_name;
00080 static const std::string ThrowOnPreconditionerInput_name;
00082 static const std::string Amesos_Settings_name;
00083
00085
00088
00090 ~AmesosLinearOpWithSolveFactory();
00091
00094 AmesosLinearOpWithSolveFactory(
00095 const Amesos::ESolverType solverType
00096 #ifdef HAVE_AMESOS_KLU
00097 = Amesos::KLU
00098 #else
00099 = Amesos::LAPACK
00100 #endif
00101 ,const Amesos::ERefactorizationPolicy refactorizationPolicy = Amesos::REPIVOT_ON_REFACTORIZATION
00102 ,const bool throwOnPrecInput = true
00103 );
00104
00113 STANDARD_COMPOSITION_MEMBERS( EpetraOperatorViewExtractorBase, epetraFwdOpViewExtractor );
00114
00116
00119
00123 bool isCompatible( const LinearOpSourceBase<double> &fwdOpSrc ) const;
00124
00126 Teuchos::RCP<LinearOpWithSolveBase<double> > createOp() const;
00127
00129 void initializeOp(
00130 const Teuchos::RCP<const LinearOpSourceBase<double> > &fwdOpSrc
00131 ,LinearOpWithSolveBase<double> *Op
00132 ,const ESupportSolveUse supportSolveUse
00133 ) const;
00134
00136 bool supportsPreconditionerInputType(const EPreconditionerInputType precOpType) const;
00137
00141 void initializePreconditionedOp(
00142 const Teuchos::RCP<const LinearOpSourceBase<double> > &fwdOpSrc
00143 ,const Teuchos::RCP<const PreconditionerBase<double> > &prec
00144 ,LinearOpWithSolveBase<double> *Op
00145 ,const ESupportSolveUse supportSolveUse
00146 ) const;
00147
00151 void initializePreconditionedOp(
00152 const Teuchos::RCP<const LinearOpSourceBase<double> > &fwdOpSrc
00153 ,const Teuchos::RCP<const LinearOpSourceBase<double> > &approxFwdOpSrc
00154 ,LinearOpWithSolveBase<double> *Op
00155 ,const ESupportSolveUse supportSolveUse
00156 ) const;
00157
00159 void uninitializeOp(
00160 LinearOpWithSolveBase<double> *Op
00161 ,Teuchos::RCP<const LinearOpSourceBase<double> > *fwdOpSrc
00162 ,Teuchos::RCP<const PreconditionerBase<double> > *prec
00163 ,Teuchos::RCP<const LinearOpSourceBase<double> > *approxFwdOpSrc
00164 ,ESupportSolveUse *supportSolveUse
00165 ) const;
00166
00168
00171
00173 void setParameterList(Teuchos::RCP<Teuchos::ParameterList> const& paramList);
00175 Teuchos::RCP<Teuchos::ParameterList> getParameterList();
00177 Teuchos::RCP<Teuchos::ParameterList> unsetParameterList();
00179 Teuchos::RCP<const Teuchos::ParameterList> getParameterList() const;
00181 Teuchos::RCP<const Teuchos::ParameterList> getValidParameters() const;
00182
00184
00187
00189 std::string description() const;
00190
00192
00193 private:
00194
00195
00196
00197
00198 Amesos::ESolverType solverType_;
00199 Amesos::ERefactorizationPolicy refactorizationPolicy_;
00200 bool throwOnPrecInput_;
00201 Teuchos::RCP<Teuchos::ParameterList> paramList_;
00202
00203
00204
00205
00206 static Teuchos::RCP<const Teuchos::ParameterList>
00207 generateAndGetValidParameters();
00208
00209 };
00210
00211 }
00212
00213 #endif // THYRA_AMESOS_LINEAR_OP_WITH_SOLVE_FACTORY_HPP