18#ifdef DEAL_II_WITH_TRILINOS
24# include <Epetra_MultiVector.h>
26# include <Ifpack_Chebyshev.h>
27# include <Teuchos_ParameterList.hpp>
28# include <Teuchos_RCP.hpp>
42 , preconditioner(base.preconditioner)
43 , communicator(base.communicator)
44 , vector_distributor(
new Epetra_Map(*base.vector_distributor))
69 ExcMessage(
"Trying to dereference a null pointer."));
91 const double min_diagonal,
92 const unsigned int n_sweeps)
94 , min_diagonal(min_diagonal)
108 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
121 static_cast<int>(additional_data.
n_sweeps));
142 const double min_diagonal,
143 const unsigned int overlap,
144 const unsigned int n_sweeps)
146 , min_diagonal(min_diagonal)
160 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
173 static_cast<int>(additional_data.
n_sweeps));
195 const double min_diagonal,
196 const unsigned int overlap,
197 const unsigned int n_sweeps)
199 , min_diagonal(min_diagonal)
213 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
226 static_cast<int>(additional_data.
n_sweeps));
248 const unsigned int block_size,
249 const std::string &block_creation_type,
251 const double min_diagonal,
252 const unsigned int n_sweeps)
253 : block_size(block_size)
254 , block_creation_type(block_creation_type)
256 , min_diagonal(min_diagonal)
272 Ifpack().
Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
275 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
288 static_cast<int>(additional_data.
n_sweeps));
296 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
315 const unsigned int block_size,
316 const std::string &block_creation_type,
318 const double min_diagonal,
319 const unsigned int overlap,
320 const unsigned int n_sweeps)
321 : block_size(block_size)
322 , block_creation_type(block_creation_type)
324 , min_diagonal(min_diagonal)
340 Ifpack().
Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
343 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
356 static_cast<int>(additional_data.
n_sweeps));
365 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
384 const unsigned int block_size,
385 const std::string &block_creation_type,
387 const double min_diagonal,
388 const unsigned int overlap,
389 const unsigned int n_sweeps)
390 : block_size(block_size)
391 , block_creation_type(block_creation_type)
393 , min_diagonal(min_diagonal)
409 Ifpack().
Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
412 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
425 static_cast<int>(additional_data.
n_sweeps));
434 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
453 const double ic_atol,
454 const double ic_rtol,
455 const unsigned int overlap)
471 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
503 const double ilu_atol,
504 const double ilu_rtol,
505 const unsigned int overlap)
521 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
534 static_cast<int>(additional_data.
ilu_fill));
554 const unsigned int ilut_fill,
555 const double ilut_atol,
556 const double ilut_rtol,
557 const unsigned int overlap)
558 : ilut_drop(ilut_drop)
559 , ilut_fill(ilut_fill)
560 , ilut_atol(ilut_atol)
561 , ilut_rtol(ilut_rtol)
574 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
588 static_cast<int>(additional_data.
ilut_fill));
608 const unsigned int overlap)
621 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
650 const unsigned int degree,
651 const double max_eigenvalue,
652 const double eigenvalue_ratio,
653 const double min_eigenvalue,
654 const double min_diagonal,
655 const bool nonzero_starting)
657 , max_eigenvalue(max_eigenvalue)
658 , eigenvalue_ratio(eigenvalue_ratio)
659 , min_eigenvalue(min_eigenvalue)
660 , min_diagonal(min_diagonal)
661 , nonzero_starting(nonzero_starting)
689 static_cast<int>(additional_data.
degree));
726 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
767 const ::Vector<double> &src)
const
774 const ::Vector<double> &src)
const
IndexSet locally_owned_range_indices() const
Epetra_MpiComm communicator
Epetra_Operator & trilinos_operator() const
std::shared_ptr< Epetra_Map > vector_distributor
Teuchos::RCP< Epetra_Operator > preconditioner
MPI_Comm get_mpi_communicator() const
IndexSet locally_owned_domain_indices() const
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(MPI::Vector &dst, const MPI::Vector &src) const override
void Tvmult(MPI::Vector &dst, const MPI::Vector &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())
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcTrilinosError(int arg1)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
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)