43 #ifndef IFPACK2_DETAILS_ONELEVELFACTORY_DEF_HPP 44 #define IFPACK2_DETAILS_ONELEVELFACTORY_DEF_HPP 46 #include "Ifpack2_Chebyshev.hpp" 47 #include "Ifpack2_Details_DenseSolver.hpp" 48 #include "Ifpack2_Diagonal.hpp" 49 #include "Ifpack2_IdentitySolver.hpp" 50 #include "Ifpack2_ILUT.hpp" 51 #include "Ifpack2_Relaxation.hpp" 52 #include "Ifpack2_RILUK.hpp" 53 #include "Ifpack2_Experimental_RBILUK.hpp" 54 #include "Ifpack2_BlockRelaxation.hpp" 55 #include "Ifpack2_BandedContainer.hpp" 56 #include "Ifpack2_DenseContainer.hpp" 57 #include "Ifpack2_TriDiContainer.hpp" 59 #ifdef HAVE_IFPACK2_AMESOS2 60 # include "Ifpack2_Details_Amesos2Wrapper.hpp" 61 #endif // HAVE_IFPACK2_AMESOS2 66 template<
class MatrixType>
67 Teuchos::RCP<typename OneLevelFactory<MatrixType>::prec_type>
69 const Teuchos::RCP<const row_matrix_type>& matrix)
const 77 std::string precTypeUpper (precType);
78 if (precTypeUpper.size () > 0) {
80 for (
size_t k = 0; k < precTypeUpper.size (); ++k) {
81 precTypeUpper[k] = std::toupper<char> (precTypeUpper[k], locale);
85 if (precTypeUpper ==
"CHEBYSHEV") {
88 prec = rcp (new ::Ifpack2::Chebyshev<row_matrix_type> (matrix));
90 else if (precTypeUpper ==
"DENSE" || precTypeUpper ==
"LAPACK") {
93 else if (precTypeUpper ==
"AMESOS2") {
94 #ifdef HAVE_IFPACK2_AMESOS2 97 TEUCHOS_TEST_FOR_EXCEPTION(
98 true, std::invalid_argument,
"Ifpack2::Details::OneLevelFactory: " 99 "You may not ask for the preconditioner \"AMESOS2\" unless " 100 "you have built Trilinos with the Amesos2 package enabled.");
101 #endif // HAVE_IFPACK2_AMESOS2 103 else if (precTypeUpper ==
"DIAGONAL") {
104 prec = rcp (
new Diagonal<row_matrix_type> (matrix));
106 else if (precTypeUpper ==
"ILUT") {
109 else if (precTypeUpper ==
"RELAXATION") {
112 else if (precTypeUpper ==
"RILUK") {
115 else if (precTypeUpper ==
"RBILUK") {
118 else if (precTypeUpper ==
"KRYLOV") {
119 TEUCHOS_TEST_FOR_EXCEPTION
120 (
true, std::invalid_argument,
"The \"KRYLOV\" preconditioner option has " 121 "been deprecated and removed. If you want a Krylov solver, use the " 124 else if (precTypeUpper ==
"BLOCK_RELAXATION" ||
125 precTypeUpper ==
"BLOCK RELAXATION" ||
126 precTypeUpper ==
"BLOCKRELAXATION" ) {
135 else if (precTypeUpper ==
"TRIDI_RELAXATION" ||
136 precTypeUpper ==
"TRIDI RELAXATION" ||
137 precTypeUpper ==
"TRIDIRELAXATION" ||
138 precTypeUpper ==
"TRIDIAGONAL_RELAXATION" ||
139 precTypeUpper ==
"TRIDIAGONAL RELAXATION" ||
140 precTypeUpper ==
"TRIDIAGONALRELAXATION") {
145 else if (precTypeUpper ==
"BANDED_RELAXATION" ||
146 precTypeUpper ==
"BANDED RELAXATION" ||
147 precTypeUpper ==
"BANDEDRELAXATION") {
151 else if (precTypeUpper ==
"IDENTITY" || precTypeUpper ==
"IDENTITY_SOLVER") {
155 TEUCHOS_TEST_FOR_EXCEPTION(
156 true, std::invalid_argument,
"Ifpack2::Details::OneLevelFactory::create: " 157 "Invalid preconditioner type \"" << precType <<
"\".");
160 TEUCHOS_TEST_FOR_EXCEPTION(
161 prec.is_null (), std::logic_error,
"Ifpack2::Details::OneLevelFactory::" 162 "create: Return value is null right before return. This should never " 163 "happen. Please report this bug to the Ifpack2 developers.");
170 #define IFPACK2_DETAILS_ONELEVELFACTORY_INSTANT(S,LO,GO,N) \ 171 template class Ifpack2::Details::OneLevelFactory< Tpetra::RowMatrix<S, LO, GO, N> >; 173 #endif // IFPACK2_DETAILS_ONELEVELFACTORY_DEF_HPP Store and solve a local TriDi linear problem.
Definition: Ifpack2_TriDiContainer_decl.hpp:109
Teuchos::RCP< prec_type > create(const std::string &precType, const Teuchos::RCP< const row_matrix_type > &matrix) const
Create an instance of Preconditioner given the string name of the preconditioner type.
Definition: Ifpack2_Details_OneLevelFactory_def.hpp:68
ILU(k) factorization of a given Tpetra::RowMatrix.
Definition: Ifpack2_RILUK_decl.hpp:243
"Preconditioner" that uses LAPACK's dense LU.
Definition: Ifpack2_Details_DenseSolver_decl.hpp:73
ILUT (incomplete LU factorization with threshold) of a Tpetra sparse matrix.
Definition: Ifpack2_ILUT_decl.hpp:91
Block relaxation preconditioners (or smoothers) for Tpetra::RowMatrix and Tpetra::CrsMatrix sparse ma...
Definition: Ifpack2_BlockRelaxation_decl.hpp:81
Ifpack2 implementation details.
"Identity" preconditioner.
Definition: Ifpack2_IdentitySolver_decl.hpp:59
Store and solve a local dense linear problem.
Definition: Ifpack2_DenseContainer_decl.hpp:109
Wrapper class for direct solvers in Amesos2.
Definition: Ifpack2_Details_Amesos2Wrapper_decl.hpp:102
Relaxation preconditioners for Tpetra::RowMatrix and Tpetra::CrsMatrix sparse matrices.
Definition: Ifpack2_Relaxation_decl.hpp:222
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:72
ILU(k) factorization of a given Tpetra::Experimental::BlockCrsMatrix.
Definition: Ifpack2_Experimental_RBILUK_decl.hpp:128
Store and solve a local Banded linear problem.
Definition: Ifpack2_BandedContainer_decl.hpp:108