OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Amesos2BottomSolver.hpp
Go to the documentation of this file.
1 template <class Level>
3  : BottomSolver<Teuchos::RCP<amr::matrix_t>,
4  Teuchos::RCP<amr::multivector_t>,
5  Level>()
6  , solvertype_m(solvertype)
7  , solver_mp(Teuchos::null)
8 { }
9 
10 
11 template <class Level>
12 void Amesos2BottomSolver<Level>::solve(const Teuchos::RCP<mv_t>& x,
13  const Teuchos::RCP<mv_t>& b)
14 {
15  /*
16  * solve linear system Ax = b
17  */
18  solver_mp->solve(x.get(), b.get());
19 }
20 
21 
22 template <class Level>
23 void Amesos2BottomSolver<Level>::setOperator(const Teuchos::RCP<matrix_t>& A,
24  Level* level_p)
25 {
26  try {
27  solver_mp = Amesos2::create<matrix_t, mv_t>(solvertype_m, A);
28  } catch(const std::invalid_argument& ex) {
29  *gmsg << ex.what() << endl;
30  }
31 
32  solver_mp->symbolicFactorization();
33  solver_mp->numericFactorization();
34 
35  this->isInitialized_m = true;
36 }
37 
38 
39 template <class Level>
41  return 1; // direct solvers do only one step
42 }
Inform * gmsg
Definition: Main.cpp:21
Abstract base class for all base level solvers.
Definition: BottomSolver.h:8
void solve(const Teuchos::RCP< mv_t > &x, const Teuchos::RCP< mv_t > &b)
bool amr
Definition: Options.cpp:100
Tpetra::MultiVector< scalar_t, local_ordinal_t, global_ordinal_t, node_t > multivector_t
Inform & endl(Inform &inf)
Definition: Inform.cpp:42
Amesos2BottomSolver(std::string solvertype="klu2")
void setOperator(const Teuchos::RCP< matrix_t > &A, Level *level_p=nullptr)