42 #ifndef BELOS_DETAILS_LINEARSOLVER_HPP
43 #define BELOS_DETAILS_LINEARSOLVER_HPP
75 template<
class MV,
class OP,
class ScalarType,
class NormType>
92 solverName_ (solverName)
107 if (problem_.is_null ()) {
109 }
else if (A != problem_->getOperator ()) {
110 problem_->setOperator (A);
116 if (problem_.is_null ()) {
117 return Teuchos::null;
119 return problem_->getOperator ();
126 (problem_.is_null () || problem_->getOperator ().is_null (),
127 std::runtime_error,
"Belos::Details::LinearSolver::solve: "
128 "The matrix A in the linear system to solve has not yet been set. "
129 "Please call setMatrix() with a nonnull input before calling solve().");
133 problem_->setLHS (X_ptr);
134 problem_->setRHS (B_ptr);
135 problem_->setProblem ();
140 if (solver_.is_null ()) {
142 solver_ = factory.create (solverName_, params_);
143 solver_->setProblem (problem_);
147 (void) solver_->solve ();
152 if (! solver_.is_null () && ! params.
is_null ()) {
153 solver_->setParameters (params);
161 (problem_.is_null () || problem_->getOperator ().is_null (),
162 std::runtime_error,
"Belos::Details::LinearSolver::symbolic: "
163 "The matrix A in the linear system to solve has not yet been set. "
164 "Please call setMatrix() with a nonnull input before calling this method.");
169 solver_ = Teuchos::null;
175 (problem_.is_null () || problem_->getOperator ().is_null (),
176 std::runtime_error,
"Belos::Details::LinearSolver::numeric: "
177 "The matrix A in the linear system to solve has not yet been set. "
178 "Please call setMatrix() with a nonnull input before calling this method.");
184 problem_->setProblem ();
189 std::string solverName_;