15#ifndef dealii_trilinos_tpetra_precondition_h
16#define dealii_trilinos_tpetra_precondition_h
26#ifdef DEAL_II_TRILINOS_WITH_TPETRA
33# include <Teuchos_BLAS_types.hpp>
34# include <Teuchos_ConfigDefs.hpp>
35# include <Teuchos_ParameterList.hpp>
36# include <Teuchos_RCPDecl.hpp>
37# include <Tpetra_Operator.hpp>
44 namespace TpetraWrappers
53 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
171 <<
"The sparse matrix the preconditioner is based on "
172 <<
"uses a map that is not compatible to the one in vector " <<
arg1
173 <<
". Check preconditioner and matrix setup.");
180 "The chosen preconditioner does not support transposing the matrix.");
207# ifdef DEAL_II_TRILINOS_WITH_IFPACK2
217 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
248 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
277 <<
"You tried to select the preconditioner type <" <<
arg1 <<
">\n"
278 <<
"but this preconditioner is not supported by Trilinos/Ifpack22\n"
279 <<
"due to one of the following reasons:\n"
280 <<
"* This preconditioner does not exist\n"
281 <<
"* This preconditioner has a specialized constructor not supported by the Ifpack2 Factory.\n"
282 <<
"* This preconditioner is not (yet) supported by Trilinos/Ifpack2\n"
283 <<
"* Trilinos/Ifpack2 was not configured for its use.");
308 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
353 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
362 struct AdditionalData
375 AdditionalData(
const double omega = 1.,
377 const double min_diagonal = 0.,
378 const int n_sweeps = 1);
422 const AdditionalData &additional_data = AdditionalData());
437 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
446 struct AdditionalData
460 AdditionalData(
const double omega = 1.,
462 const double min_diagonal = 0.,
463 const int n_sweeps = 1);
508 const AdditionalData &additional_data = AdditionalData());
524 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
533 struct AdditionalData
548 AdditionalData(
const double omega = 1,
549 const double eta = 1.5,
551 const double min_diagonal = 0,
552 const int n_sweeps = 1);
606 const AdditionalData &additional_data = AdditionalData());
620 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
628 struct AdditionalData
642 AdditionalData(
const double omega = 1.,
643 const int overlap = 0,
645 const double min_diagonal = 0.,
646 const int n_sweeps = 1);
701 const AdditionalData &additional_data = AdditionalData());
712 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
720 struct AdditionalData
734 AdditionalData(
const double omega = 1.,
735 const int overlap = 0,
737 const double min_diagonal = 0.,
738 const int n_sweeps = 1);
794 const AdditionalData &additional_data = AdditionalData());
805 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
814 struct AdditionalData
826 AdditionalData(
const int degree = 1,
827 const double max_eigenvalue = 10.,
828 const double min_eigenvalue = 1.,
829 const double eigenvalue_ratio = 30.,
830 const double min_diagonal = 1e-12,
831 const bool nonzero_starting =
false);
847 double max_eigenvalue;
852 double min_eigenvalue;
857 double eigenvalue_ratio;
878 bool nonzero_starting;
895 const AdditionalData &additional_data = AdditionalData());
917 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
925 struct AdditionalData
940 AdditionalData(
const int ilu_fill = 0,
941 const double ilu_atol = 0.,
942 const double ilu_rtol = 1.,
943 const int overlap = 0);
989 const AdditionalData &additional_data = AdditionalData());
1001 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
1009 struct AdditionalData
1025 AdditionalData(
const double ilut_drop = 0.,
1026 const double ilut_fill = 0.,
1027 const double ilut_atol = 0.,
1028 const double ilut_rtol = 1.,
1029 const int overlap = 0);
1086 const AdditionalData &additional_data = AdditionalData());
1104 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
1113 struct AdditionalData
1127 const double omega = 1.,
1129 const int n_sweeps = 1);
1170 const AdditionalData &additional_data = AdditionalData());
1184 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
1193 struct AdditionalData
1206 const double omega = 1,
1207 const int overlap = 0,
1208 const int n_sweeps = 1);
1243 const AdditionalData &additional_data = AdditionalData());
1257 template <
typename Number,
typename MemorySpace = ::MemorySpace::Host>
1266 struct AdditionalData
1279 const double omega = 1,
1280 const int overlap = 1,
1281 const int n_sweeps = 1);
1315 const AdditionalData &additional_data = AdditionalData());
IndexSet locally_owned_range_indices() const
virtual void Tvmult(Vector< Number, MemorySpace > &dst, const Vector< Number, MemorySpace > &src) const
Apply the transpose preconditioner.
IndexSet locally_owned_domain_indices() const
Teuchos::ParameterList parameter_list
The list of preconditioner parameters.
void clear()
Destructor. Destroys the preconditioner, leaving an object like just after having called the construc...
virtual void vmult(::Vector< Number > &dst, ::Vector< Number > &src) const
Apply the preconditioner.
Teuchos::RCP< TpetraTypes::LinearOperator< Number, MemorySpace > > preconditioner
Teuchos::RCP< TpetraTypes::LinearOperator< Number, MemorySpace > > trilinos_rcp() const
Access to underlying Trilinos data.
virtual void Tvmult(::Vector< Number > &dst, ::Vector< Number > &src) const
Apply the transpose preconditioner.
PreconditionBase()=default
Constructor. Does not do anything. The initialize function of the derived classes will have to create...
const TpetraTypes::LinearOperator< Number, MemorySpace > & trilinos_operator() const
Access to underlying Trilinos data.
virtual void vmult(Vector< Number, MemorySpace > &dst, const Vector< Number, MemorySpace > &src) const
Apply the preconditioner.
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNonMatchingMaps(std::string arg1)
#define DeclExceptionMsg(Exception, defaulttext)
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcTransposeNotSupported()
PETScWrappers::PreconditionILU PreconditionILU
Tpetra::Operator< Number, LO, GO, NodeType< MemorySpace > > LinearOperator
Standardized data struct to pipe additional flags to the preconditioner.