43 #ifndef IFPACK2_FACTORY_DECL_HPP
44 #define IFPACK2_FACTORY_DECL_HPP
46 #include "Ifpack2_ConfigDefs.hpp"
48 #include "Ifpack2_Details_Factory.hpp"
50 #include "Ifpack2_Chebyshev.hpp"
51 #include "Ifpack2_RILUK.hpp"
52 #include "Ifpack2_Experimental_RBILUK.hpp"
54 #include <type_traits>
126 template<
class MatrixType>
129 typename MatrixType::local_ordinal_type,
130 typename MatrixType::global_ordinal_type,
131 typename MatrixType::node_type> >
136 using Teuchos::rcp_implicit_cast;
137 typedef typename MatrixType::scalar_type SC;
138 typedef typename MatrixType::local_ordinal_type LO;
139 typedef typename MatrixType::global_ordinal_type GO;
140 typedef typename MatrixType::node_type NT;
141 typedef Tpetra::RowMatrix<SC, LO, GO, NT> row_matrix_type;
143 RCP<const row_matrix_type> A;
145 A = rcp_implicit_cast<
const row_matrix_type> (matrix);
147 Ifpack2::Details::Factory<SC, LO, GO, NT> factory;
148 return factory.create (precType, A);
166 template<
class MatrixType>
169 typename MatrixType::local_ordinal_type,
170 typename MatrixType::global_ordinal_type,
171 typename MatrixType::node_type> >
177 using Teuchos::rcp_implicit_cast;
178 typedef typename MatrixType::scalar_type SC;
179 typedef typename MatrixType::local_ordinal_type LO;
180 typedef typename MatrixType::global_ordinal_type GO;
181 typedef typename MatrixType::node_type NT;
182 typedef Tpetra::RowMatrix<SC, LO, GO, NT> row_matrix_type;
184 RCP<const row_matrix_type> A;
186 A = rcp_implicit_cast<
const row_matrix_type> (matrix);
188 Ifpack2::Details::Factory<SC, LO, GO, NT> factory;
189 return factory.create (precType, A, overlap);
192 template<
class MatrixType>
195 isSupported (
const std::string& precType)
197 typedef typename MatrixType::scalar_type SC;
198 typedef typename MatrixType::local_ordinal_type LO;
199 typedef typename MatrixType::global_ordinal_type GO;
200 typedef typename MatrixType::node_type NT;
202 Ifpack2::Details::Factory<SC, LO, GO, NT> factory;
203 return factory.isSupported (precType);
210 #endif // IFPACK2_FACTORY_DECL_HPP
bool supportsUnsymmetric(const std::string &prec_type)
true if the specified preconditioner type supports nonsymmetric matrices, else false.
Definition: Ifpack2_Factory.cpp:56
Interface for all Ifpack2 preconditioners.
Definition: Ifpack2_Preconditioner.hpp:107
static Teuchos::RCP< Preconditioner< typename MatrixType::scalar_type, typename MatrixType::local_ordinal_type, typename MatrixType::global_ordinal_type, typename MatrixType::node_type > > create(const std::string &precType, const Teuchos::RCP< const MatrixType > &matrix)
Create an instance of Ifpack2_Preconditioner given the string name of the preconditioner type...
Definition: Ifpack2_Factory_decl.hpp:132
"Factory" for creating Ifpack2 preconditioners.
Definition: Ifpack2_Factory_decl.hpp:114
static Teuchos::RCP< Preconditioner< typename MatrixType::scalar_type, typename MatrixType::local_ordinal_type, typename MatrixType::global_ordinal_type, typename MatrixType::node_type > > create(const std::string &precType, const Teuchos::RCP< const MatrixType > &matrix, const int overlap)
Create an instance of Ifpack2_Preconditioner given the string name of the preconditioner type...
Definition: Ifpack2_Factory_decl.hpp:172