1 #ifndef SHYLU_ITERATIVESOLVER_INTERFACE_DEF_HPP 2 #define SHYLU_ITERATIVESOLVER_INTERFACE_DEF_HPP 4 #include "ShyLUCore_config.h" 5 #include "shylu_iterativesolver_interface_decl.hpp" 7 #include <Teuchos_XMLParameterListHelpers.hpp> 13 template <
class Matrix,
class Vector>
14 IterativeSolverInterface<Matrix,Vector>::IterativeSolverInterface()
17 template <
class Matrix,
class Vector>
18 IterativeSolverInterface<Matrix,Vector>::IterativeSolverInterface(Matrix *inA, Teuchos::ParameterList *inpList)
24 template <
class Matrix,
class Vector>
25 IterativeSolverInterface<Matrix,Vector>::~IterativeSolverInterface()
28 template <
class Matrix,
class Vector>
29 int IterativeSolverInterface<Matrix,Vector>::init_matrix(Matrix *inA, Teuchos::ParameterList *inpList)
36 template <
class Matrix,
class Vector>
37 int IterativeSolverInterface<Matrix,Vector>::solveAztec(Vector *b, Vector *x)
39 printf(
"**Error** Aztec only supported by Epetra \n");
45 int IterativeSolverInterface<Epetra_CrsMatrix,Epetra_MultiVector>::solveAztec(Epetra_MultiVector *b, Epetra_MultiVector *x)
48 Teuchos::ParameterList subList = pList->sublist(
"Aztec Input");
52 e_problem.SetOperator(A);
57 solver_aztec =
new AztecOO(e_problem);
58 solver_aztec->SetAztecOption(AZ_precond, AZ_none);
59 solver_aztec->SetAztecOption(AZ_solver, AZ_gmres);
60 solver_aztec->SetAztecOption(AZ_max_iter, 1000);
63 solver_aztec->Iterate(1000, 1e-5);
68 template <
class Matrix,
class Vector>
69 int IterativeSolverInterface<Matrix,Vector>::solveBelos(Vector *b, Vector *x)
72 typedef typename Matrix::scalar_type scalar_type;
73 typedef typename Matrix::local_ordinal_type local_ordinal_type;
74 typedef typename Matrix::global_ordinal_type global_ordinal_type;
75 typedef typename Matrix::node_type node_type;
76 typedef Tpetra::Operator<scalar_type, local_ordinal_type, global_ordinal_type, node_type> OP;
84 Teuchos::RCP<Teuchos::ParameterList> pListRCP = Teuchos::rcp(pList,
false);
85 Teuchos::RCP<Teuchos::ParameterList> belosList = Teuchos::sublist(pListRCP,
"Belos Input");
92 if(belosList->isParameter(
"Solver"))
95 solver_name = belosList->get<
string>(
"Solver");
107 printf(
"load belos parameters\n");
108 Teuchos::RCP<Belos::LinearProblem<scalar_type, Vector, OP> > belos_problem;
109 belos_problem = Teuchos::rcp(
new Belos::LinearProblem<scalar_type, Vector, OP>());
111 belos_problem->setOperator(Teuchos::rcp(A,
false));
112 belos_problem->setRHS(Teuchos::rcp(x,
false));
113 belos_problem->setLHS(Teuchos::rcp(b,
false));
114 belos_problem->setProblem();
118 Belos::SolverFactory<scalar_type, Vector, OP> factory;
120 Teuchos::RCP<Belos::SolverManager<scalar_type,Vector,OP> > solver_belos;
122 solver_belos = factory.create(solver_name, belosList);
124 solver_belos->setProblem(belos_problem);
135 (void) solver_belos->solve();
141 int IterativeSolverInterface<Epetra_CrsMatrix,Epetra_MultiVector>::solveBelos(Epetra_MultiVector *b, Epetra_MultiVector *x)
202 template <
class Matrix,
class Vector>
203 int IterativeSolverInterface<Matrix,Vector>::solve(Vector *b, Vector* x)
205 string solverpackage = Teuchos::getParameter<string>(*pList,
"Iterative Solver Package");
207 cout <<
"found package " << solverpackage << endl;
209 if(solverpackage.compare(
"Aztec")==0)
211 printf(
"**Warning** Aztec is not preferred \n");
214 else if(solverpackage.compare(
"Belos")==0)
220 printf(
"**Error**Iterative Solver Package Not Provided\n");
229 #endif //end ifdef shylu_interative_fie