54 #include <Ifpack_config.h> 56 #ifdef HAVE_IFPACK_DYNAMIC_FACTORY 57 #include "Ifpack_DynamicFactory.h" 65 : gmresStateManager_(),
73 precAmesosType_(
"Amesos_Klu")
79 useFullIQR_ = params.
get<
bool>(
"Use full IQR",
true);
82 krylovDim_ = params.
get<
double>(
"IQR Krylov Dim", 0.5);
83 numIter_ = params.get<
int>(
"IQR Number Iterations", 0);
84 doScaling_ = params.get<
bool>(
"IQR Scaling",
false);
85 precType_ = params.get<
string>(
"IQR Initial Prec Type",
"Amesos");
86 precAmesosType_ = params.get<
string>(
"IQR Initial Prec Amesos Type",
"Amesos_Klu");
89 IQRSolver::~IQRSolver()
94 const Epetra_MultiVector& B,
95 Epetra_MultiVector & X)
98 Epetra_CrsMatrix* G = S.G_;
99 #ifdef HAVE_IFPACK_DYNAMIC_FACTORY 100 Ifpack_DynamicFactory Factory;
106 pList.
set(
"amesos: solver type", precAmesosType_,
"");
107 pList.
set(
"Reindex",
true);
108 prec_->SetParameters(pList);
110 IFPACK_CHK_ERR(prec_->Initialize());
111 IFPACK_CHK_ERR(prec_->Compute());
116 int sSize = S.OperatorDomainMap().NumGlobalElements();
117 int kSize = std::floor(krylovDim_ * sSize);
120 new GMRESStateManager(S.OperatorDomainMap(),
121 kSize,
false, doScaling_));
122 gmresStateManager_->isFirst =
true;
126 IQR::GMRES<Epetra_Operator,
129 Ifpack_Preconditioner,
131 std::vector<double>,
double>
132 (S, X, B, &L, &(*prec_), *(gmresStateManager_), kSize, tol);
133 gmresStateManager_->P2 = &(*prec_);
147 const Epetra_MultiVector& B,
148 Epetra_MultiVector & X)
151 IFPACK_CHK_ERR(Compute(S, B, X));
155 IFPACK_CHK_ERR(prec_->ApplyInverse(B, X));
158 GMRESStateManager newGmresManager(S.OperatorDomainMap(),
162 IQR::GMRES<Epetra_Operator, Epetra_MultiVector,
164 std::vector<double>,
double>
165 (S, X, B, &L, &*(gmresStateManager_), newGmresManager, numIter_, tol);
167 IFPACK_CHK_ERR(gmresStateManager_->ApplyInverse(B, X));
T & get(const std::string &name, T def_value)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Encapsulates the IQR inexact solver functionality.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)