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/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> 44 class Ifpack_Preconditioner;
45 class Ifpack_Chebyshev;
48 class MultiLevelPreconditioner;
52 DEAL_II_NAMESPACE_OPEN
56 template <
typename number>
class Vector;
132 const ::Vector<double> &src)
const;
139 const ::Vector<double> &src)
const;
146 const ::parallel::distributed::Vector<double> &src)
const;
153 const ::parallel::distributed::Vector<double> &src)
const;
162 Epetra_Operator &trilinos_operator()
const;
169 <<
"The sparse matrix the preconditioner is based on " 170 <<
"uses a map that is not compatible to the one in vector " 172 <<
". Check preconditioner and matrix setup.");
187 #ifdef DEAL_II_WITH_MPI 190 Epetra_SerialComm communicator;
239 const double min_diagonal = 0,
240 const unsigned int n_sweeps = 1);
326 const double min_diagonal = 0,
327 const unsigned int overlap = 0,
328 const unsigned int n_sweeps = 1);
422 const double min_diagonal = 0,
423 const unsigned int overlap = 0,
424 const unsigned int n_sweeps = 1);
511 const std::string block_creation_type =
"linear",
512 const double omega = 1,
513 const double min_diagonal = 0,
514 const unsigned int n_sweeps = 1);
616 const std::string block_creation_type =
"linear",
617 const double omega = 1,
618 const double min_diagonal = 0,
619 const unsigned int overlap = 0,
620 const unsigned int n_sweeps = 1);
729 const std::string block_creation_type =
"linear",
730 const double omega = 1,
731 const double min_diagonal = 0,
732 const unsigned int overlap = 0,
733 const unsigned int n_sweeps = 1);
854 const double ic_atol = 0.,
855 const double ic_rtol = 1.,
856 const unsigned int overlap = 0);
973 const double ilu_atol = 0.,
974 const double ilu_rtol = 1.,
975 const unsigned int overlap = 0);
1081 const unsigned int ilut_fill = 0,
1082 const double ilut_atol = 0.,
1083 const double ilut_rtol = 1.,
1084 const unsigned int overlap = 0);
1207 const double max_eigenvalue = 10.,
1208 const double eigenvalue_ratio = 30.,
1209 const double min_eigenvalue = 1.,
1210 const double min_diagonal = 1e-12,
1211 const bool nonzero_starting =
false);
1325 const bool higher_order_elements =
false,
1326 const unsigned int n_cycles = 1,
1327 const bool w_cyle =
false,
1328 const double aggregation_threshold = 1e-4,
1329 const std::vector<std::vector<bool> > &constant_modes = std::vector<std::vector<bool> > (0),
1330 const unsigned int smoother_sweeps = 2,
1331 const unsigned int smoother_overlap = 0,
1332 const bool output_details =
false,
1333 const char *smoother_type =
"Chebyshev",
1334 const char *coarse_type =
"Amesos-KLU");
1492 void initialize (
const Epetra_RowMatrix &matrix,
1508 const Teuchos::ParameterList &ml_parameters);
1517 void initialize (
const Epetra_RowMatrix &matrix,
1518 const Teuchos::ParameterList &ml_parameters);
1526 template <
typename number>
1527 void initialize (const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1529 const double drop_tolerance = 1e-13,
1530 const ::SparsityPattern *use_this_sparsity = 0);
1566 #if defined(DOXYGEN) || DEAL_II_TRILINOS_VERSION_GTE(11,14,0) 1601 const unsigned int n_cycles = 1,
1602 const bool w_cyle =
false,
1603 const double aggregation_threshold = 1e-4,
1604 const std::vector<std::vector<bool> > &constant_modes = std::vector<std::vector<bool> > (0),
1605 const unsigned int smoother_sweeps = 2,
1606 const unsigned int smoother_overlap = 0,
1607 const bool output_details =
false,
1608 const char *smoother_type =
"Chebyshev",
1609 const char *coarse_type =
"Amesos-KLU");
1738 void initialize (
const Epetra_CrsMatrix &matrix,
1753 Teuchos::ParameterList &muelu_parameters);
1760 void initialize (
const Epetra_CrsMatrix &matrix,
1761 Teuchos::ParameterList &muelu_parameters);
1769 template <
typename number>
1770 void initialize (const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1772 const double drop_tolerance = 1e-13,
1773 const ::SparsityPattern *use_this_sparsity = 0);
1824 const ::Vector<double> &src)
const;
1831 const ::Vector<double> &src)
const;
1838 const ::parallel::distributed::Vector<double> &src)
const;
1846 const ::parallel::distributed::Vector<double> &src)
const;
1862 ExcNonMatchingMaps(
"dst"));
1864 ExcNonMatchingMaps(
"src"));
1877 ExcNonMatchingMaps(
"dst"));
1879 ExcNonMatchingMaps(
"src"));
1881 preconditioner->SetUseTranspose(
true);
1885 preconditioner->SetUseTranspose(
false);
1900 const ::Vector<double> &src)
const 1903 preconditioner->OperatorDomainMap().NumMyElements());
1904 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(src.size()),
1905 preconditioner->OperatorRangeMap().NumMyElements());
1906 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
1908 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
1909 const_cast<double *
>(src.begin()));
1911 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
1918 const ::Vector<double> &src)
const 1921 preconditioner->OperatorDomainMap().NumMyElements());
1922 AssertDimension (static_cast<TrilinosWrappers::types::int_type>(src.size()),
1923 preconditioner->OperatorRangeMap().NumMyElements());
1924 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
1926 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
1927 const_cast<double *
>(src.begin()));
1929 preconditioner->SetUseTranspose(
true);
1930 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
1932 preconditioner->SetUseTranspose(
false);
1943 preconditioner->OperatorDomainMap().NumMyElements());
1945 preconditioner->OperatorRangeMap().NumMyElements());
1946 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
1948 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
1949 const_cast<double *
>(src.
begin()));
1951 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
1961 preconditioner->OperatorDomainMap().NumMyElements());
1963 preconditioner->OperatorRangeMap().NumMyElements());
1964 Epetra_Vector tril_dst (View, preconditioner->OperatorDomainMap(),
1966 Epetra_Vector tril_src (View, preconditioner->OperatorRangeMap(),
1967 const_cast<double *
>(src.
begin()));
1969 preconditioner->SetUseTranspose(
true);
1970 const int ierr = preconditioner->ApplyInverse (tril_src, tril_dst);
1972 preconditioner->SetUseTranspose(
false);
1977 PreconditionBase::trilinos_operator ()
const 1980 return (*preconditioner);
1991 DEAL_II_NAMESPACE_CLOSE
1993 #endif // DEAL_II_WITH_TRILINOS
unsigned int smoother_sweeps
#define AssertDimension(dim1, dim2)
double aggregation_threshold
std::vector< std::vector< bool > > constant_modes
unsigned int smoother_overlap
::ExceptionBase & ExcMessage(std::string arg1)
const char * smoother_type
#define AssertThrow(cond, exc)
unsigned int smoother_sweeps
std_cxx11::shared_ptr< SparseMatrix > trilinos_matrix
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
const Epetra_Map & vector_partitioner() const
std::vector< std::vector< bool > > constant_modes
const Epetra_MultiVector & trilinos_vector() const
std::string block_creation_type
unsigned int smoother_overlap
::types::global_dof_index size_type
size_type local_size() const
Epetra_MpiComm communicator
bool higher_order_elements
std::string block_creation_type