16 #ifndef dealii_trilinos_precondition_h 17 # define dealii_trilinos_precondition_h 22 # ifdef DEAL_II_WITH_TRILINOS 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> 44 class Ifpack_Preconditioner;
45 class Ifpack_Chebyshev;
48 class MultiLevelPreconditioner;
56 template <
typename number>
58 template <
typename number>
125 get_mpi_communicator()
const;
164 const ::Vector<double> &src)
const;
172 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
180 const ::LinearAlgebra::distributed::Vector<double> &src)
const;
192 trilinos_operator()
const;
205 locally_owned_domain_indices()
const;
213 locally_owned_range_indices()
const;
227 <<
"The sparse matrix the preconditioner is based on " 228 <<
"uses a map that is not compatible to the one in vector " 229 << arg1 <<
". Check preconditioner and matrix setup.");
245 # ifdef DEAL_II_WITH_MPI 248 Epetra_SerialComm communicator;
296 const double min_diagonal = 0,
297 const unsigned int n_sweeps = 1);
382 const double min_diagonal = 0,
383 const unsigned int overlap = 0,
384 const unsigned int n_sweeps = 1);
477 const double min_diagonal = 0,
478 const unsigned int overlap = 0,
479 const unsigned int n_sweeps = 1);
566 const std::string &block_creation_type =
"linear",
567 const double omega = 1,
568 const double min_diagonal = 0,
569 const unsigned int n_sweeps = 1);
670 const std::string &block_creation_type =
"linear",
671 const double omega = 1,
672 const double min_diagonal = 0,
673 const unsigned int overlap = 0,
674 const unsigned int n_sweeps = 1);
782 const std::string &block_creation_type =
"linear",
783 const double omega = 1,
784 const double min_diagonal = 0,
785 const unsigned int overlap = 0,
786 const unsigned int n_sweeps = 1);
908 const double ic_atol = 0.,
909 const double ic_rtol = 1.,
910 const unsigned int overlap = 0);
1028 const double ilu_atol = 0.,
1029 const double ilu_rtol = 1.,
1030 const unsigned int overlap = 0);
1134 const unsigned int ilut_fill = 0,
1135 const double ilut_atol = 0.,
1136 const double ilut_rtol = 1.,
1137 const unsigned int overlap = 0);
1259 const double max_eigenvalue = 10.,
1260 const double eigenvalue_ratio = 30.,
1261 const double min_eigenvalue = 1.,
1262 const double min_diagonal = 1
e-12,
1263 const bool nonzero_starting =
false);
1396 const bool higher_order_elements =
false,
1397 const unsigned int n_cycles = 1,
1398 const bool w_cyle =
false,
1399 const double aggregation_threshold = 1
e-4,
1400 const std::vector<std::vector<bool>> &constant_modes =
1401 std::vector<std::vector<bool>>(0),
1402 const unsigned int smoother_sweeps = 2,
1403 const unsigned int smoother_overlap = 0,
1404 const bool output_details =
false,
1405 const char * smoother_type =
"Chebyshev",
1406 const char * coarse_type =
"Amesos-KLU");
1440 Teuchos::ParameterList & parameter_list,
1441 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1442 const Epetra_RowMatrix &
matrix)
const;
1453 Teuchos::ParameterList & parameter_list,
1454 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1463 set_operator_null_space(
1464 Teuchos::ParameterList & parameter_list,
1465 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1466 const Epetra_RowMatrix & matrix)
const;
1474 set_operator_null_space(
1475 Teuchos::ParameterList & parameter_list,
1476 std::unique_ptr<Epetra_MultiVector> &distributed_constant_modes,
1637 initialize(
const Epetra_RowMatrix &matrix,
1656 const Teuchos::ParameterList &ml_parameters);
1666 initialize(
const Epetra_RowMatrix & matrix,
1667 const Teuchos::ParameterList &ml_parameters);
1675 template <
typename number>
1677 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1679 const double drop_tolerance = 1
e-13,
1680 const ::SparsityPattern *use_this_sparsity =
nullptr);
1719 # if defined(DOXYGEN) || defined(DEAL_II_TRILINOS_WITH_MUELU) 1755 const unsigned int n_cycles = 1,
1756 const bool w_cyle =
false,
1757 const double aggregation_threshold = 1
e-4,
1758 const std::vector<std::vector<bool>> &constant_modes =
1759 std::vector<std::vector<bool>>(0),
1760 const unsigned int smoother_sweeps = 2,
1761 const unsigned int smoother_overlap = 0,
1762 const bool output_details =
false,
1763 const char * smoother_type =
"Chebyshev",
1764 const char * coarse_type =
"Amesos-KLU");
1900 initialize(
const Epetra_CrsMatrix &matrix,
1918 Teuchos::ParameterList &muelu_parameters);
1926 initialize(
const Epetra_CrsMatrix &matrix,
1927 Teuchos::ParameterList &muelu_parameters);
1935 template <
typename number>
1937 initialize(const ::SparseMatrix<number> &deal_ii_sparse_matrix,
1939 const double drop_tolerance = 1
e-13,
1940 const ::SparsityPattern *use_this_sparsity =
nullptr);
2011 const ::Vector<double> &src)
const override;
2019 const ::Vector<double> &src)
const override;
2027 const ::LinearAlgebra::distributed::Vector<double> &src)
2037 const ::LinearAlgebra::distributed::Vector<double> &src)
2059 if (!preconditioner->UseTranspose())
2061 ierr = preconditioner->SetUseTranspose(
true);
2066 ierr = preconditioner->SetUseTranspose(
false);
2076 preconditioner->OperatorRangeMap()),
2077 ExcNonMatchingMaps(
"dst"));
2079 preconditioner->OperatorDomainMap()),
2080 ExcNonMatchingMaps(
"src"));
2091 preconditioner->OperatorRangeMap()),
2092 ExcNonMatchingMaps(
"dst"));
2094 preconditioner->OperatorDomainMap()),
2095 ExcNonMatchingMaps(
"src"));
2097 preconditioner->SetUseTranspose(
true);
2101 preconditioner->SetUseTranspose(
false);
2116 const ::Vector<double> &src)
const 2119 preconditioner->OperatorDomainMap().NumMyElements());
2121 preconditioner->OperatorRangeMap().NumMyElements());
2122 Epetra_Vector tril_dst(
View,
2123 preconditioner->OperatorDomainMap(),
2125 Epetra_Vector tril_src(
View,
2126 preconditioner->OperatorRangeMap(),
2127 const_cast<double *
>(src.begin()));
2129 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2136 const ::Vector<double> &src)
const 2139 preconditioner->OperatorDomainMap().NumMyElements());
2141 preconditioner->OperatorRangeMap().NumMyElements());
2142 Epetra_Vector tril_dst(
View,
2143 preconditioner->OperatorDomainMap(),
2145 Epetra_Vector tril_src(
View,
2146 preconditioner->OperatorRangeMap(),
2147 const_cast<double *
>(src.begin()));
2149 preconditioner->SetUseTranspose(
true);
2150 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2152 preconditioner->SetUseTranspose(
false);
2158 PreconditionBase::vmult(
2163 preconditioner->OperatorDomainMap().NumMyElements());
2165 preconditioner->OperatorRangeMap().NumMyElements());
2166 Epetra_Vector tril_dst(
View,
2167 preconditioner->OperatorDomainMap(),
2169 Epetra_Vector tril_src(
View,
2170 preconditioner->OperatorRangeMap(),
2171 const_cast<double *
>(src.
begin()));
2173 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2178 PreconditionBase::Tvmult(
2183 preconditioner->OperatorDomainMap().NumMyElements());
2185 preconditioner->OperatorRangeMap().NumMyElements());
2186 Epetra_Vector tril_dst(
View,
2187 preconditioner->OperatorDomainMap(),
2189 Epetra_Vector tril_src(
View,
2190 preconditioner->OperatorRangeMap(),
2191 const_cast<double *
>(src.
begin()));
2193 preconditioner->SetUseTranspose(
true);
2194 const int ierr = preconditioner->ApplyInverse(tril_src, tril_dst);
2196 preconditioner->SetUseTranspose(
false);
2209 # endif // DEAL_II_WITH_TRILINOS 2211 #endif // trilinos_precondition_h
static ::ExceptionBase & ExcTrilinosError(int arg1)
size_type local_size() const
void reinit(MatrixBlock< MatrixType > &v, const BlockSparsityPattern &p)
unsigned int smoother_sweeps
#define AssertDimension(dim1, dim2)
typename ::internal::FEValuesViews::ViewType< dim, spacedim, Extractor >::type View
Contents is actually a matrix.
double aggregation_threshold
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
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
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
#define DEAL_II_NAMESPACE_CLOSE
std::shared_ptr< SparseMatrix > trilinos_matrix
std::shared_ptr< SparseMatrix > trilinos_matrix
unsigned int global_dof_index
const Epetra_BlockMap & trilinos_partitioner() const
#define DEAL_II_NAMESPACE_OPEN
std::string block_creation_type
const Epetra_MultiVector & trilinos_vector() const
unsigned int smoother_overlap
Epetra_MpiComm communicator
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
Teuchos::RCP< Epetra_Operator > preconditioner
bool higher_order_elements
std::string block_creation_type