16 #ifndef dealii_trilinos_precondition_h 17 # define dealii_trilinos_precondition_h 20 # include <deal.II/base/config.h> 22 # ifdef DEAL_II_WITH_TRILINOS 24 # include <deal.II/base/subscriptor.h> 26 # include <deal.II/lac/la_parallel_vector.h> 27 # include <deal.II/lac/trilinos_vector.h> 31 # ifdef DEAL_II_WITH_MPI 32 # include <Epetra_MpiComm.h> 34 # include <Epetra_SerialComm.h> 36 # include <Epetra_Map.h> 37 # include <Epetra_MultiVector.h> 38 # include <Epetra_RowMatrix.h> 39 # include <Epetra_Vector.h> 40 # include <Teuchos_ParameterList.hpp> 43 class Ifpack_Preconditioner;
44 class Ifpack_Chebyshev;
47 class MultiLevelPreconditioner;
51 DEAL_II_NAMESPACE_OPEN
54 template <
typename number>
56 template <
typename number>
122 get_mpi_communicator()
const;
161 const ::Vector<double> &src)
const;
169 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
177 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
189 trilinos_operator()
const;
202 locally_owned_domain_indices()
const;
210 locally_owned_range_indices()
const;
224 <<
"The sparse matrix the preconditioner is based on " 225 <<
"uses a map that is not compatible to the one in vector " 226 << arg1 <<
". Check preconditioner and matrix setup.");
242 # ifdef DEAL_II_WITH_MPI 245 Epetra_SerialComm communicator;
293 const double min_diagonal = 0,
294 const unsigned int n_sweeps = 1);
379 const double min_diagonal = 0,
380 const unsigned int overlap = 0,
381 const unsigned int n_sweeps = 1);
474 const double min_diagonal = 0,
475 const unsigned int overlap = 0,
476 const unsigned int n_sweeps = 1);
563 const std::string &block_creation_type =
"linear",
564 const double omega = 1,
565 const double min_diagonal = 0,
566 const unsigned int n_sweeps = 1);
667 const std::string &block_creation_type =
"linear",
668 const double omega = 1,
669 const double min_diagonal = 0,
670 const unsigned int overlap = 0,
671 const unsigned int n_sweeps = 1);
779 const std::string &block_creation_type =
"linear",
780 const double omega = 1,
781 const double min_diagonal = 0,
782 const unsigned int overlap = 0,
783 const unsigned int n_sweeps = 1);
905 const double ic_atol = 0.,
906 const double ic_rtol = 1.,
907 const unsigned int overlap = 0);
1025 const double ilu_atol = 0.,
1026 const double ilu_rtol = 1.,
1027 const unsigned int overlap = 0);
1131 const unsigned int ilut_fill = 0,
1132 const double ilut_atol = 0.,
1133 const double ilut_rtol = 1.,
1134 const unsigned int overlap = 0);
1256 const double max_eigenvalue = 10.,
1257 const double eigenvalue_ratio = 30.,
1258 const double min_eigenvalue = 1.,
1259 const double min_diagonal = 1e-12,
1260 const bool nonzero_starting =
false);
1393 const bool higher_order_elements =
false,
1394 const unsigned int n_cycles = 1,
1395 const bool w_cyle =
false,
1396 const double aggregation_threshold = 1e-4,
1397 const std::vector<std::vector<bool>> &constant_modes =
1398 std::vector<std::vector<bool>>(0),
1399 const unsigned int smoother_sweeps = 2,
1400 const unsigned int smoother_overlap = 0,
1401 const bool output_details =
false,
1402 const char * smoother_type =
"Chebyshev",
1403 const char * coarse_type =
"Amesos-KLU");
1437 Teuchos::ParameterList & parameter_list,
1438 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1439 const Epetra_RowMatrix & matrix)
const;
1450 Teuchos::ParameterList & parameter_list,
1451 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1460 set_operator_null_space(
1461 Teuchos::ParameterList & parameter_list,
1462 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1463 const Epetra_RowMatrix & matrix)
const;
1471 set_operator_null_space(
1472 Teuchos::ParameterList & parameter_list,
1473 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1634 initialize(
const Epetra_RowMatrix &matrix,
1653 const Teuchos::ParameterList &ml_parameters);
1663 initialize(
const Epetra_RowMatrix & matrix,
1664 const Teuchos::ParameterList &ml_parameters);
1672 template <
typename number>
1674 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1676 const double drop_tolerance = 1e-13,
1677 const ::SparsityPattern *use_this_sparsity =
nullptr);
1705 memory_consumption()
const;
1716 # if defined(DOXYGEN) || DEAL_II_TRILINOS_VERSION_GTE(11, 14, 0) 1750 const unsigned int n_cycles = 1,
1751 const bool w_cyle =
false,
1752 const double aggregation_threshold = 1e-4,
1753 const std::vector<std::vector<bool>> &constant_modes =
1754 std::vector<std::vector<bool>>(0),
1755 const unsigned int smoother_sweeps = 2,
1756 const unsigned int smoother_overlap = 0,
1757 const bool output_details =
false,
1758 const char * smoother_type =
"Chebyshev",
1759 const char * coarse_type =
"Amesos-KLU");
1895 initialize(
const Epetra_CrsMatrix &matrix,
1913 Teuchos::ParameterList &muelu_parameters);
1921 initialize(
const Epetra_CrsMatrix &matrix,
1922 Teuchos::ParameterList &muelu_parameters);
1930 template <
typename number>
1932 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1934 const double drop_tolerance = 1e-13,
1935 const ::SparsityPattern *use_this_sparsity =
nullptr);
1948 memory_consumption()
const;
2006 const ::Vector<double> &src)
const override;
2014 const ::Vector<double> &src)
const override;
2022 const ::LinearAlgebra::distributed::Vector<double> &src)
2032 const ::LinearAlgebra::distributed::Vector<double> &src)
2054 if (!preconditioner->UseTranspose())
2056 ierr = preconditioner->SetUseTranspose(
true);
2061 ierr = preconditioner->SetUseTranspose(
false);
2071 preconditioner->OperatorRangeMap()),
2072 ExcNonMatchingMaps(
"dst"));
2074 preconditioner->OperatorDomainMap()),
2075 ExcNonMatchingMaps(
"src"));
2086 preconditioner->OperatorRangeMap()),
2087 ExcNonMatchingMaps(
"dst"));
2089 preconditioner->OperatorDomainMap()),
2090 ExcNonMatchingMaps(
"src"));
2092 preconditioner->SetUseTranspose(
true);
2096 preconditioner->SetUseTranspose(
false);
2111 const ::Vector<double> &src)
const 2114 preconditioner->OperatorDomainMap().NumMyElements());
2116 preconditioner->OperatorRangeMap().NumMyElements());
2117 Epetra_Vector tril_dst(View,
2118 preconditioner->OperatorDomainMap(),
2120 Epetra_Vector tril_src(View,
2121 preconditioner->OperatorRangeMap(),
2122 const_cast<double *
>(src.begin()));
2124 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2131 const ::Vector<double> &src)
const 2134 preconditioner->OperatorDomainMap().NumMyElements());
2136 preconditioner->OperatorRangeMap().NumMyElements());
2137 Epetra_Vector tril_dst(View,
2138 preconditioner->OperatorDomainMap(),
2140 Epetra_Vector tril_src(View,
2141 preconditioner->OperatorRangeMap(),
2142 const_cast<double *
>(src.begin()));
2144 preconditioner->SetUseTranspose(
true);
2145 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2147 preconditioner->SetUseTranspose(
false);
2153 PreconditionBase::vmult(
2158 preconditioner->OperatorDomainMap().NumMyElements());
2160 preconditioner->OperatorRangeMap().NumMyElements());
2161 Epetra_Vector tril_dst(View,
2162 preconditioner->OperatorDomainMap(),
2164 Epetra_Vector tril_src(View,
2165 preconditioner->OperatorRangeMap(),
2166 const_cast<double *
>(src.
begin()));
2168 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2173 PreconditionBase::Tvmult(
2178 preconditioner->OperatorDomainMap().NumMyElements());
2180 preconditioner->OperatorRangeMap().NumMyElements());
2181 Epetra_Vector tril_dst(View,
2182 preconditioner->OperatorDomainMap(),
2184 Epetra_Vector tril_src(View,
2185 preconditioner->OperatorRangeMap(),
2186 const_cast<double *
>(src.
begin()));
2188 preconditioner->SetUseTranspose(
true);
2189 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2191 preconditioner->SetUseTranspose(
false);
2202 DEAL_II_NAMESPACE_CLOSE
2204 # endif // DEAL_II_WITH_TRILINOS 2206 #endif // trilinos_precondition_h
static ::ExceptionBase & ExcTrilinosError(int arg1)
size_type local_size() const
unsigned int smoother_sweeps
#define AssertDimension(dim1, dim2)
::types::global_dof_index size_type
double aggregation_threshold
std::vector< std::vector< bool > > constant_modes
unsigned int smoother_overlap
const char * smoother_type
std::shared_ptr< Epetra_Map > vector_distributor
#define AssertThrow(cond, exc)
unsigned int smoother_sweeps
LinearAlgebra::distributed::Vector< Number > Vector
std::string block_creation_type
#define DeclException1(Exception1, type1, outsequence)
double aggregation_threshold
const char * smoother_type
#define Assert(cond, exc)
std::vector< std::vector< bool > > constant_modes
SymmetricTensor< rank_, dim, Number > transpose(const SymmetricTensor< rank_, dim, Number > &t)
std::shared_ptr< SparseMatrix > trilinos_matrix
std::shared_ptr< SparseMatrix > trilinos_matrix
unsigned int global_dof_index
const Epetra_BlockMap & trilinos_partitioner() const
std::string block_creation_type
const Epetra_MultiVector & trilinos_vector() const
unsigned int smoother_overlap
Epetra_MpiComm communicator
Teuchos::RCP< Epetra_Operator > preconditioner
bool higher_order_elements
std::string block_creation_type