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> 25 # include <deal.II/base/std_cxx11/shared_ptr.h> 27 # include <deal.II/lac/trilinos_vector_base.h> 28 # include <deal.II/lac/la_parallel_vector.h> 30 DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
31 # ifdef DEAL_II_WITH_MPI 32 # include <Epetra_MpiComm.h> 34 # include <Epetra_SerialComm.h> 36 # include <Epetra_Map.h> 38 # include <Teuchos_ParameterList.hpp> 39 # include <Epetra_RowMatrix.h> 40 # include <Epetra_Vector.h> 41 DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
44 class Ifpack_Preconditioner;
45 class Ifpack_Chebyshev;
48 class MultiLevelPreconditioner;
52 DEAL_II_NAMESPACE_OPEN
56 template <
typename number>
class Vector;
119 MPI_Comm get_mpi_communicator ()
const;
149 const ::Vector<double> &src)
const;
156 const ::Vector<double> &src)
const;
163 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
170 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
181 Epetra_Operator &trilinos_operator ()
const;
193 IndexSet locally_owned_domain_indices()
const;
200 IndexSet locally_owned_range_indices()
const;
214 <<
"The sparse matrix the preconditioner is based on " 215 <<
"uses a map that is not compatible to the one in vector " 217 <<
". Check preconditioner and matrix setup.");
233 #ifdef DEAL_II_WITH_MPI 236 Epetra_SerialComm communicator;
285 const double min_diagonal = 0,
286 const unsigned int n_sweeps = 1);
372 const double min_diagonal = 0,
373 const unsigned int overlap = 0,
374 const unsigned int n_sweeps = 1);
468 const double min_diagonal = 0,
469 const unsigned int overlap = 0,
470 const unsigned int n_sweeps = 1);
557 const std::string &block_creation_type =
"linear",
558 const double omega = 1,
559 const double min_diagonal = 0,
560 const unsigned int n_sweeps = 1);
662 const std::string &block_creation_type =
"linear",
663 const double omega = 1,
664 const double min_diagonal = 0,
665 const unsigned int overlap = 0,
666 const unsigned int n_sweeps = 1);
775 const std::string &block_creation_type =
"linear",
776 const double omega = 1,
777 const double min_diagonal = 0,
778 const unsigned int overlap = 0,
779 const unsigned int n_sweeps = 1);
900 const double ic_atol = 0.,
901 const double ic_rtol = 1.,
902 const unsigned int overlap = 0);
1019 const double ilu_atol = 0.,
1020 const double ilu_rtol = 1.,
1021 const unsigned int overlap = 0);
1127 const unsigned int ilut_fill = 0,
1128 const double ilut_atol = 0.,
1129 const double ilut_rtol = 1.,
1130 const unsigned int overlap = 0);
1253 const double max_eigenvalue = 10.,
1254 const double eigenvalue_ratio = 30.,
1255 const double min_eigenvalue = 1.,
1256 const double min_diagonal = 1e-12,
1257 const bool nonzero_starting =
false);
1371 const bool higher_order_elements =
false,
1372 const unsigned int n_cycles = 1,
1373 const bool w_cyle =
false,
1374 const double aggregation_threshold = 1e-4,
1375 const std::vector<std::vector<bool> > &constant_modes = std::vector<std::vector<bool> > (0),
1376 const unsigned int smoother_sweeps = 2,
1377 const unsigned int smoother_overlap = 0,
1378 const bool output_details =
false,
1379 const char *smoother_type =
"Chebyshev",
1380 const char *coarse_type =
"Amesos-KLU");
1538 void initialize (
const Epetra_RowMatrix &matrix,
1554 const Teuchos::ParameterList &ml_parameters);
1563 void initialize (
const Epetra_RowMatrix &matrix,
1564 const Teuchos::ParameterList &ml_parameters);
1572 template <
typename number>
1573 void initialize (const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1575 const double drop_tolerance = 1e-13,
1576 const ::SparsityPattern *use_this_sparsity = 0);
1612 #if defined(DOXYGEN) || DEAL_II_TRILINOS_VERSION_GTE(11,14,0) 1648 const unsigned int n_cycles = 1,
1649 const bool w_cyle =
false,
1650 const double aggregation_threshold = 1e-4,
1651 const std::vector<std::vector<bool> > &constant_modes = std::vector<std::vector<bool> > (0),
1652 const unsigned int smoother_sweeps = 2,
1653 const unsigned int smoother_overlap = 0,
1654 const bool output_details =
false,
1655 const char *smoother_type =
"Chebyshev",
1656 const char *coarse_type =
"Amesos-KLU");
1790 void initialize (
const Epetra_CrsMatrix &matrix,
1805 Teuchos::ParameterList &muelu_parameters);
1812 void initialize (
const Epetra_CrsMatrix &matrix,
1813 Teuchos::ParameterList &muelu_parameters);
1821 template <
typename number>
1822 void initialize (const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1824 const double drop_tolerance = 1e-13,
1825 const ::SparsityPattern *use_this_sparsity = 0);
1898 const ::Vector<double> &src)
const;
1905 const ::Vector<double> &src)
const;
1912 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
1920 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
1933 PreconditionBase::transpose ()
1942 if (!preconditioner->UseTranspose())
1944 ierr = preconditioner->SetUseTranspose (
true);
1949 ierr = preconditioner->SetUseTranspose (
false);
1961 ExcNonMatchingMaps(
"dst"));
1963 ExcNonMatchingMaps(
"src"));
1976 ExcNonMatchingMaps(
"dst"));
1978 ExcNonMatchingMaps(
"src"));
1980 preconditioner->SetUseTranspose(
true);
1984 preconditioner->SetUseTranspose(
false);
1999 const ::Vector<double> &src)
const 2002 preconditioner->OperatorDomainMap().NumMyElements());
2003 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(src.size()),
2004 preconditioner->OperatorRangeMap().NumMyElements());
2005 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
2007 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
2008 const_cast<double *
>(src.begin()));
2010 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
2017 const ::Vector<double> &src)
const 2020 preconditioner->OperatorDomainMap().NumMyElements());
2021 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(src.size()),
2022 preconditioner->OperatorRangeMap().NumMyElements());
2023 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
2025 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
2026 const_cast<double *
>(src.begin()));
2028 preconditioner->SetUseTranspose(
true);
2029 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
2031 preconditioner->SetUseTranspose(
false);
2042 preconditioner->OperatorDomainMap().NumMyElements());
2044 preconditioner->OperatorRangeMap().NumMyElements());
2045 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
2047 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
2048 const_cast<double *
>(src.
begin()));
2050 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
2060 preconditioner->OperatorDomainMap().NumMyElements());
2062 preconditioner->OperatorRangeMap().NumMyElements());
2063 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
2065 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
2066 const_cast<double *
>(src.
begin()));
2068 preconditioner->SetUseTranspose(
true);
2069 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
2071 preconditioner->SetUseTranspose(
false);
2082 DEAL_II_NAMESPACE_CLOSE
2084 #endif // DEAL_II_WITH_TRILINOS
static::ExceptionBase & ExcTrilinosError(int arg1)
unsigned int smoother_sweeps
#define AssertDimension(dim1, dim2)
double aggregation_threshold
std::vector< std::vector< bool > > constant_modes
unsigned int smoother_overlap
const char * smoother_type
#define AssertThrow(cond, exc)
unsigned int smoother_sweeps
std_cxx11::shared_ptr< SparseMatrix > trilinos_matrix
size_type local_size() const
std_cxx11::shared_ptr< Epetra_Map > vector_distributor
std::string block_creation_type
std_cxx11::shared_ptr< Epetra_Operator > preconditioner
#define DeclException1(Exception1, type1, outsequence)
double aggregation_threshold
const char * smoother_type
#define Assert(cond, exc)
std_cxx11::shared_ptr< SparseMatrix > trilinos_matrix
std::vector< std::vector< bool > > constant_modes
const Epetra_Map & vector_partitioner() const
std::string block_creation_type
const Epetra_MultiVector & trilinos_vector() const
unsigned int smoother_overlap
::types::global_dof_index size_type
Epetra_MpiComm communicator
bool higher_order_elements
std::string block_creation_type