16 #ifndef dealii_trilinos_precondition_h
17 #define dealii_trilinos_precondition_h
22 #ifdef DEAL_II_WITH_TRILINOS
29 # include <Epetra_Map.h>
30 # include <Epetra_MpiComm.h>
31 # include <Epetra_MultiVector.h>
32 # include <Epetra_RowMatrix.h>
33 # include <Epetra_Vector.h>
34 # include <Teuchos_ParameterList.hpp>
40 class Ifpack_Preconditioner;
41 class Ifpack_Chebyshev;
44 class MultiLevelPreconditioner;
52 template <
typename number>
54 template <
typename number>
149 const ::Vector<double> &src)
const;
157 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
165 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
211 <<
"The sparse matrix the preconditioner is based on "
212 <<
"uses a map that is not compatible to the one in vector "
213 << arg1 <<
". Check preconditioner and matrix setup.");
355 const unsigned int overlap = 0,
449 const unsigned int overlap = 0,
535 const double omega = 1,
638 const double omega = 1,
640 const unsigned int overlap = 0,
749 const double omega = 1,
751 const unsigned int overlap = 0,
875 const unsigned int overlap = 0);
994 const unsigned int overlap = 0);
1100 const unsigned int overlap = 0);
1361 std::vector<std::vector<bool>>(0),
1400 Teuchos::ParameterList ¶meter_list,
1401 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1402 const Epetra_RowMatrix &
matrix)
const;
1413 Teuchos::ParameterList ¶meter_list,
1414 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1424 Teuchos::ParameterList ¶meter_list,
1425 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1426 const Epetra_RowMatrix &
matrix)
const;
1435 Teuchos::ParameterList ¶meter_list,
1436 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1624 const Teuchos::ParameterList &ml_parameters);
1635 const Teuchos::ParameterList &ml_parameters);
1643 template <
typename number>
1645 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1647 const double drop_tolerance = 1
e-13,
1648 const ::SparsityPattern *use_this_sparsity =
nullptr);
1687 # if defined(DOXYGEN) || defined(DEAL_II_TRILINOS_WITH_MUELU)
1726 std::vector<std::vector<bool>>(0),
1885 Teuchos::ParameterList &muelu_parameters);
1894 Teuchos::ParameterList &muelu_parameters);
1902 template <
typename number>
1904 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1906 const double drop_tolerance = 1
e-13,
1907 const ::SparsityPattern *use_this_sparsity =
nullptr);
1976 const ::Vector<double> &src)
const override;
1984 const ::Vector<double> &src)
const override;
1992 const ::LinearAlgebra::distributed::Vector<double> &src)
2002 const ::LinearAlgebra::distributed::Vector<double> &src)
2040 Assert(dst.trilinos_partitioner().SameAs(
2043 Assert(src.trilinos_partitioner().SameAs(
2047 const int ierr =
preconditioner->ApplyInverse(src.trilinos_vector(),
2048 dst.trilinos_vector());
2055 Assert(dst.trilinos_partitioner().SameAs(
2058 Assert(src.trilinos_partitioner().SameAs(
2063 const int ierr =
preconditioner->ApplyInverse(src.trilinos_vector(),
2064 dst.trilinos_vector());
2081 const ::Vector<double> &src)
const
2087 Epetra_Vector tril_dst(
View,
2090 Epetra_Vector tril_src(
View,
2092 const_cast<double *
>(src.begin()));
2094 const int ierr =
preconditioner->ApplyInverse(tril_src, tril_dst);
2101 const ::Vector<double> &src)
const
2107 Epetra_Vector tril_dst(
View,
2110 Epetra_Vector tril_src(
View,
2112 const_cast<double *
>(src.begin()));
2115 const int ierr =
preconditioner->ApplyInverse(tril_src, tril_dst);
2131 Epetra_Vector tril_dst(
View,
2134 Epetra_Vector tril_src(
View,
2136 const_cast<double *
>(src.
begin()));
2138 const int ierr =
preconditioner->ApplyInverse(tril_src, tril_dst);
2151 Epetra_Vector tril_dst(
View,
2154 Epetra_Vector tril_src(
View,
2156 const_cast<double *
>(src.
begin()));
2159 const int ierr =
preconditioner->ApplyInverse(tril_src, tril_dst);
size_type locally_owned_size() const
std::shared_ptr< SparseMatrix > trilinos_matrix
size_type memory_consumption() const
virtual ~PreconditionAMGMueLu() override=default
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
~PreconditionAMG() override
std::shared_ptr< SparseMatrix > trilinos_matrix
size_type memory_consumption() const
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
IndexSet locally_owned_range_indices() const
Epetra_MpiComm communicator
virtual void Tvmult(::LinearAlgebra::distributed::Vector< double > &dst, const ::LinearAlgebra::distributed::Vector< double > &src) const
virtual void Tvmult(MPI::Vector &dst, const MPI::Vector &src) const
virtual void vmult(MPI::Vector &dst, const MPI::Vector &src) const
Epetra_Operator & trilinos_operator() const
Teuchos::RCP< Epetra_Operator > preconditioner
virtual void Tvmult(::Vector< double > &dst, const ::Vector< double > &src) const
MPI_Comm get_mpi_communicator() const
virtual void vmult(::Vector< double > &dst, const ::Vector< double > &src) const
IndexSet locally_owned_domain_indices() const
virtual void vmult(::LinearAlgebra::distributed::Vector< double > &dst, const ::LinearAlgebra::distributed::Vector< double > &src) const
::types::global_dof_index size_type
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void vmult(LinearAlgebra::distributed::Vector< double > &dst, const ::LinearAlgebra::distributed::Vector< double > &src) const override
void vmult(MPI::Vector &dst, const MPI::Vector &src) const override
void Tvmult(MPI::Vector &dst, const MPI::Vector &src) const override
void Tvmult(LinearAlgebra::distributed::Vector< double > &dst, const ::LinearAlgebra::distributed::Vector< double > &src) const override
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
virtual size_type size() const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcTrilinosError(int arg1)
static ::ExceptionBase & ExcNonMatchingMaps(std::string arg1)
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
#define DeclException1(Exception1, type1, outsequence)
#define AssertThrow(cond, exc)
typename ::internal::FEInterfaceViews::ViewType< dim, spacedim, Extractor >::type View
@ matrix
Contents is actually a matrix.
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
unsigned int global_dof_index
AdditionalData(const bool elliptic=true, const unsigned int n_cycles=1, const bool w_cycle=false, const double aggregation_threshold=1e-4, const std::vector< std::vector< bool >> &constant_modes=std::vector< std::vector< bool >>(0), const unsigned int smoother_sweeps=2, const unsigned int smoother_overlap=0, const bool output_details=false, const char *smoother_type="Chebyshev", const char *coarse_type="Amesos-KLU")
double aggregation_threshold
std::vector< std::vector< bool > > constant_modes
unsigned int smoother_sweeps
unsigned int smoother_overlap
const char * smoother_type
std::vector< std::vector< bool > > constant_modes
double aggregation_threshold
AdditionalData(const bool elliptic=true, const bool higher_order_elements=false, const unsigned int n_cycles=1, const bool w_cycle=false, const double aggregation_threshold=1e-4, const std::vector< std::vector< bool >> &constant_modes=std::vector< std::vector< bool >>(0), const unsigned int smoother_sweeps=2, const unsigned int smoother_overlap=0, const bool output_details=false, const char *smoother_type="Chebyshev", const char *coarse_type="Amesos-KLU")
unsigned int smoother_sweeps
bool higher_order_elements
unsigned int smoother_overlap
void set_operator_null_space(Teuchos::ParameterList ¶meter_list, std::unique_ptr< Epetra_MultiVector > &distributed_constant_modes, const Epetra_RowMatrix &matrix) const
const char * smoother_type
void set_parameters(Teuchos::ParameterList ¶meter_list, std::unique_ptr< Epetra_MultiVector > &distributed_constant_modes, const Epetra_RowMatrix &matrix) const
std::string block_creation_type
AdditionalData(const unsigned int block_size=1, const std::string &block_creation_type="linear", const double omega=1, const double min_diagonal=0, const unsigned int n_sweeps=1)
std::string block_creation_type
AdditionalData(const unsigned int block_size=1, const std::string &block_creation_type="linear", const double omega=1, const double min_diagonal=0, const unsigned int overlap=0, const unsigned int n_sweeps=1)
AdditionalData(const unsigned int block_size=1, const std::string &block_creation_type="linear", const double omega=1, const double min_diagonal=0, const unsigned int overlap=0, const unsigned int n_sweeps=1)
std::string block_creation_type
AdditionalData(const unsigned int overlap=0)
AdditionalData(const unsigned int degree=1, const double max_eigenvalue=10., const double eigenvalue_ratio=30., const double min_eigenvalue=1., const double min_diagonal=1e-12, const bool nonzero_starting=false)
AdditionalData(const unsigned int ic_fill=0, const double ic_atol=0., const double ic_rtol=1., const unsigned int overlap=0)
AdditionalData(const double ilut_drop=0., const unsigned int ilut_fill=0, const double ilut_atol=0., const double ilut_rtol=1., const unsigned int overlap=0)
AdditionalData(const unsigned int ilu_fill=0, const double ilu_atol=0., const double ilu_rtol=1., const unsigned int overlap=0)
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int n_sweeps=1)
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int overlap=0, const unsigned int n_sweeps=1)
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int overlap=0, const unsigned int n_sweeps=1)