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> >
133 const Teuchos::RCP<const MatrixType>& matrix)
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;
144 if (! matrix.is_null ()) {
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> >
173 const Teuchos::RCP<const MatrixType>& matrix,
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;
185 if (! matrix.is_null ()) {
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
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:73