14 #ifndef IFPACK2_DETAILS_LINEARSOLVER_DEF_HPP
15 #define IFPACK2_DETAILS_LINEARSOLVER_DEF_HPP
18 #include "Tpetra_MultiVector.hpp"
31 template <
class SC,
class LO,
class GO,
class NT>
35 , solverName_(solverName) {
37 using Teuchos::rcp_dynamic_cast;
38 const char prefix[] =
"Ifpack2::Details::LinearSolver: ";
40 prefix <<
"Input solver is NULL.");
42 typedef Tpetra::RowMatrix<SC, LO, GO, NT> row_matrix_type;
43 typedef ::Ifpack2::Details::CanChangeMatrix<row_matrix_type> mixin_type;
44 RCP<mixin_type> innerSolver = rcp_dynamic_cast<mixin_type>(solver);
46 "solver does not implement the setMatrix() feature. Only Ifpack2 solvers "
47 "that inherit from Ifpack2::Details::CanChangeMatrix implement this feature.");
50 template <
class SC,
class LO,
class GO,
class NT>
54 using Teuchos::rcp_dynamic_cast;
55 typedef Tpetra::RowMatrix<SC, LO, GO, NT> row_matrix_type;
56 typedef ::Ifpack2::Details::CanChangeMatrix<row_matrix_type> mixin_type;
57 const char prefix[] =
"Ifpack2::Details::LinearSolver::setMatrix: ";
64 RCP<const row_matrix_type> A_row;
66 A_row = rcp_dynamic_cast<
const row_matrix_type>(A);
68 "if not null, must be a Tpetra::RowMatrix.");
71 "This should never happen! Please report this bug to the Ifpack2 "
74 RCP<mixin_type> innerSolver = rcp_dynamic_cast<mixin_type>(solver_);
76 "implement the setMatrix() feature. Only input preconditioners that "
77 "inherit from Ifpack2::Details::CanChangeMatrix implement this. We should"
78 " never get here! Please report this bug to the Ifpack2 developers.");
79 innerSolver->setMatrix(A_row);
84 template <
class SC,
class LO,
class GO,
class NT>
91 template <
class SC,
class LO,
class GO,
class NT>
94 const char prefix[] =
"Ifpack2::Details::LinearSolver::solve: ";
96 "This should never happen. Please report this bug to the Ifpack2 "
99 "set yet. You must call setMatrix() with a nonnull matrix before you "
100 "may call this method.");
101 solver_->apply(B, X);
104 template <
class SC,
class LO,
class GO,
class NT>
107 solver_->setParameters(*params);
110 template <
class SC,
class LO,
class GO,
class NT>
113 const char prefix[] =
"Ifpack2::Details::LinearSolver::symbolic: ";
115 "This should never happen. Please report this bug to the Ifpack2 "
118 "set yet. You must call setMatrix() with a nonnull matrix before you "
119 "may call this method.");
120 solver_->initialize();
123 template <
class SC,
class LO,
class GO,
class NT>
126 const char prefix[] =
"Ifpack2::Details::LinearSolver::numeric: ";
128 "This should never happen. Please report this bug to the Ifpack2 "
131 "set yet. You must call setMatrix() with a nonnull matrix before you "
132 "may call this method.");
136 template <
class SC,
class LO,
class GO,
class NT>
140 const char prefix[] =
"Ifpack2::Details::LinearSolver::description: ";
142 "This should never happen. Please report this bug to the Ifpack2 "
144 return solver_->description();
147 template <
class SC,
class LO,
class GO,
class NT>
151 const char prefix[] =
"Ifpack2::Details::LinearSolver::describe: ";
153 "This should never happen. Please report this bug to the Ifpack2 "
155 solver_->describe(out, verbLevel);
164 #define IFPACK2_DETAILS_LINEARSOLVER_INSTANT(SC, LO, GO, NT) \
165 template class Ifpack2::Details::LinearSolver<SC, LO, GO, NT>;
167 #endif // IFPACK2_DETAILS_LINEARSOLVER_DEF_HPP
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void solve(MV &X, const MV &B)
Solve the linear system AX=B for X.
Definition: Ifpack2_Details_LinearSolver_def.hpp:93
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
Implementation of Teuchos::Describable::describe.
Definition: Ifpack2_Details_LinearSolver_def.hpp:149
Teuchos::RCP< const OP > getMatrix() const
Get the solver's matrix.
Definition: Ifpack2_Details_LinearSolver_def.hpp:87
void symbolic()
Precompute for matrix structure changes.
Definition: Ifpack2_Details_LinearSolver_def.hpp:112
void setMatrix(const Teuchos::RCP< const OP > &A)
Set the solver's matrix.
Definition: Ifpack2_Details_LinearSolver_def.hpp:52
void setParameters(const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Set the solver's parameters.
Definition: Ifpack2_Details_LinearSolver_def.hpp:106
void numeric()
Precompute for matrix values' changes.
Definition: Ifpack2_Details_LinearSolver_def.hpp:125
Declaration of interface for preconditioners that can change their matrix after construction.
std::string description() const
Implementation of Teuchos::Describable::description.
Definition: Ifpack2_Details_LinearSolver_def.hpp:139
LinearSolver(const Teuchos::RCP< prec_type > &solver, const std::string &solverName)
Constructor.
Definition: Ifpack2_Details_LinearSolver_def.hpp:33