14#ifndef IFPACK2_DETAILS_LINEARSOLVERFACTORY_DEF_HPP
15#define IFPACK2_DETAILS_LINEARSOLVERFACTORY_DEF_HPP
17#include "Trilinos_Details_LinearSolverFactory.hpp"
19#include "Ifpack2_Details_LinearSolver.hpp"
20#include "Ifpack2_Factory.hpp"
21#include "Tpetra_RowMatrix.hpp"
27template<
class SC,
class LO,
class GO,
class NT>
28Teuchos::RCP<typename LinearSolverFactory<SC, LO, GO, NT>::solver_type>
34 using Teuchos::rcp_dynamic_cast;
35 using Teuchos::TypeNameTraits;
37 typedef Tpetra::RowMatrix<SC, LO, GO, NT>
ROW;
38 const char prefix[] =
"Ifpack2::Details::LinearSolverFactory::getLinearSolver: ";
48 catch (std::exception&
e) {
50 (
true, std::invalid_argument,
prefix <<
"Failed to create Ifpack2 "
51 "preconditioner named \"" <<
solverName <<
"\", for the following "
52 "template parameters: "
57 <<
". Ifpack2::Factory::create threw an exception: " <<
e.what ());
60 (
solver.is_null (), std::invalid_argument,
prefix <<
"Failed to create "
61 "Ifpack2 preconditioner named \"" <<
solverName <<
"\", for the "
62 "following template parameters: "
67 <<
". Ifpack2::Factory::create returned null.");
73template<
class SC,
class LO,
class GO,
class NT>
78 typedef Tpetra::MultiVector<SC, LO, GO, NT> MV;
79 typedef Tpetra::Operator<SC, LO, GO, NT> OP;
80 typedef typename MV::mag_type mag_type;
81 typedef Trilinos::Details::LinearSolverFactory<MV, OP, mag_type>
factory_base_type;
84#ifdef HAVE_TEUCHOSCORE_CXX11
97 "should never happen! Please report this bug to the Ifpack2 developers.");
113 Trilinos::Details::registerLinearSolverFactory<MV, OP, mag_type> (
"Ifpack2",
factoryBase);
121#define IFPACK2_DETAILS_LINEARSOLVERFACTORY_INSTANT( SC, LO, GO, NT ) \
122 template class Ifpack2::Details::LinearSolverFactory<SC, LO, GO, NT>;
Declaration of interface for preconditioners that can change their matrix after construction.
virtual Teuchos::RCP< solver_type > getLinearSolver(const std::string &solverName)
Get an instance of a Ifpack2 solver.
Definition Ifpack2_Details_LinearSolverFactory_def.hpp:30
static void registerLinearSolverFactory()
Register this LinearSolverFactory with the central registry.
Definition Ifpack2_Details_LinearSolverFactory_def.hpp:76
Ifpack2's implementation of Trilinos::Details::LinearSolver interface.
Definition Ifpack2_Details_LinearSolver_decl.hpp:77
Interface for all Ifpack2 preconditioners.
Definition Ifpack2_Preconditioner.hpp:75
Ifpack2 implementation details.
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:41