17#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>
59 ExcMessage(
"Trying to dereference a null pointer."));
97 Ifpack().Create(
"point relaxation",
98 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
101 Ifpack_Preconditioner *ifpack =
109 Teuchos::ParameterList parameter_list;
110 parameter_list.set(
"relaxation: sweeps",
111 static_cast<int>(additional_data.
n_sweeps));
112 parameter_list.set(
"relaxation: type",
"Jacobi");
113 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
114 parameter_list.set(
"relaxation: min diagonal value",
117 ierr = ifpack->SetParameters(parameter_list);
120 ierr = ifpack->Initialize();
123 ierr = ifpack->Compute();
149 Ifpack().Create(
"point relaxation",
150 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
153 Ifpack_Preconditioner *ifpack =
161 Teuchos::ParameterList parameter_list;
162 parameter_list.set(
"relaxation: sweeps",
163 static_cast<int>(additional_data.
n_sweeps));
164 parameter_list.set(
"relaxation: type",
"symmetric Gauss-Seidel");
165 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
166 parameter_list.set(
"relaxation: min diagonal value",
168 parameter_list.set(
"schwarz: combine mode",
"Add");
170 ierr = ifpack->SetParameters(parameter_list);
173 ierr = ifpack->Initialize();
176 ierr = ifpack->Compute();
202 Ifpack().Create(
"point relaxation",
203 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
206 Ifpack_Preconditioner *ifpack =
214 Teuchos::ParameterList parameter_list;
215 parameter_list.set(
"relaxation: sweeps",
216 static_cast<int>(additional_data.
n_sweeps));
217 parameter_list.set(
"relaxation: type",
"Gauss-Seidel");
218 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
219 parameter_list.set(
"relaxation: min diagonal value",
221 parameter_list.set(
"schwarz: combine mode",
"Add");
223 ierr = ifpack->SetParameters(parameter_list);
226 ierr = ifpack->Initialize();
229 ierr = ifpack->Compute();
262 Ifpack().Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
265 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
268 Ifpack_Preconditioner *ifpack =
276 Teuchos::ParameterList parameter_list;
277 parameter_list.set(
"relaxation: sweeps",
278 static_cast<int>(additional_data.
n_sweeps));
279 parameter_list.set(
"relaxation: type",
"Jacobi");
280 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
281 parameter_list.set(
"relaxation: min diagonal value",
283 parameter_list.set(
"partitioner: type",
286 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
288 parameter_list.set(
"partitioner: local parts", n_local_parts);
290 ierr = ifpack->SetParameters(parameter_list);
293 ierr = ifpack->Initialize();
296 ierr = ifpack->Compute();
330 Ifpack().Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
333 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
336 Ifpack_Preconditioner *ifpack =
344 Teuchos::ParameterList parameter_list;
345 parameter_list.set(
"relaxation: sweeps",
346 static_cast<int>(additional_data.
n_sweeps));
347 parameter_list.set(
"relaxation: type",
"symmetric Gauss-Seidel");
348 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
349 parameter_list.set(
"relaxation: min diagonal value",
351 parameter_list.set(
"schwarz: combine mode",
"Add");
352 parameter_list.set(
"partitioner: type",
355 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
357 parameter_list.set(
"partitioner: local parts", n_local_parts);
359 ierr = ifpack->SetParameters(parameter_list);
362 ierr = ifpack->Initialize();
365 ierr = ifpack->Compute();
399 Ifpack().Create((matrix.trilinos_matrix().NumMyRows() == 0) ?
402 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
405 Ifpack_Preconditioner *ifpack =
413 Teuchos::ParameterList parameter_list;
414 parameter_list.set(
"relaxation: sweeps",
415 static_cast<int>(additional_data.
n_sweeps));
416 parameter_list.set(
"relaxation: type",
"Gauss-Seidel");
417 parameter_list.set(
"relaxation: damping factor", additional_data.
omega);
418 parameter_list.set(
"relaxation: min diagonal value",
420 parameter_list.set(
"schwarz: combine mode",
"Add");
421 parameter_list.set(
"partitioner: type",
424 (matrix.trilinos_matrix().NumMyRows() + additional_data.
block_size - 1) /
426 parameter_list.set(
"partitioner: local parts", n_local_parts);
428 ierr = ifpack->SetParameters(parameter_list);
431 ierr = ifpack->Initialize();
434 ierr = ifpack->Compute();
460 Ifpack().Create(
"IC",
461 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
464 Ifpack_Preconditioner *ifpack =
472 Teuchos::ParameterList parameter_list;
473 parameter_list.set(
"fact: level-of-fill", additional_data.
ic_fill);
474 parameter_list.set(
"fact: absolute threshold", additional_data.
ic_atol);
475 parameter_list.set(
"fact: relative threshold", additional_data.
ic_rtol);
476 parameter_list.set(
"schwarz: combine mode",
"Add");
478 ierr = ifpack->SetParameters(parameter_list);
481 ierr = ifpack->Initialize();
484 ierr = ifpack->Compute();
510 Ifpack().Create(
"ILU",
511 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
514 Ifpack_Preconditioner *ifpack =
522 Teuchos::ParameterList parameter_list;
523 parameter_list.set(
"fact: level-of-fill",
524 static_cast<int>(additional_data.
ilu_fill));
525 parameter_list.set(
"fact: absolute threshold", additional_data.
ilu_atol);
526 parameter_list.set(
"fact: relative threshold", additional_data.
ilu_rtol);
527 parameter_list.set(
"schwarz: combine mode",
"Add");
529 ierr = ifpack->SetParameters(parameter_list);
532 ierr = ifpack->Initialize();
535 ierr = ifpack->Compute();
563 Ifpack().Create(
"ILUT",
564 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
567 Ifpack_Preconditioner *ifpack =
575 Teuchos::ParameterList parameter_list;
576 parameter_list.set(
"fact: drop value", additional_data.
ilut_drop);
577 parameter_list.set(
"fact: level-of-fill",
578 static_cast<int>(additional_data.
ilut_fill));
579 parameter_list.set(
"fact: absolute threshold", additional_data.
ilut_atol);
580 parameter_list.set(
"fact: relative threshold", additional_data.
ilut_rtol);
581 parameter_list.set(
"schwarz: combine mode",
"Add");
583 ierr = ifpack->SetParameters(parameter_list);
586 ierr = ifpack->Initialize();
589 ierr = ifpack->Compute();
610 Ifpack().Create(
"Amesos",
611 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
614 Ifpack_Preconditioner *ifpack =
622 Teuchos::ParameterList parameter_list;
623 parameter_list.set(
"schwarz: combine mode",
"Add");
625 ierr = ifpack->SetParameters(parameter_list);
628 ierr = ifpack->Initialize();
631 ierr = ifpack->Compute();
640 const unsigned int degree,
661 Teuchos::rcp(
new Ifpack_Chebyshev(&matrix.trilinos_matrix()));
663 Ifpack_Chebyshev *ifpack =
671 Teuchos::ParameterList parameter_list;
672 parameter_list.set(
"chebyshev: ratio eigenvalue",
674 parameter_list.set(
"chebyshev: min eigenvalue",
676 parameter_list.set(
"chebyshev: max eigenvalue",
678 parameter_list.set(
"chebyshev: degree",
679 static_cast<int>(additional_data.
degree));
680 parameter_list.set(
"chebyshev: min diagonal value",
682 parameter_list.set(
"chebyshev: zero starting solution",
685 ierr = ifpack->SetParameters(parameter_list);
688 ierr = ifpack->Initialize();
691 ierr = ifpack->Compute();
715 Ifpack().Create(
"point relaxation",
716 const_cast<Epetra_CrsMatrix *
>(&matrix.trilinos_matrix()),
719 Ifpack_Preconditioner *ifpack =
727 Teuchos::ParameterList parameter_list;
728 parameter_list.set(
"relaxation: sweeps", 1);
729 parameter_list.set(
"relaxation: type",
"Jacobi");
730 parameter_list.set(
"relaxation: damping factor", 1.0);
731 parameter_list.set(
"relaxation: min diagonal value", 0.0);
733 ierr = ifpack->SetParameters(parameter_list);
736 ierr = ifpack->Initialize();
739 ierr = ifpack->Compute();
757 const ::Vector<double> &src)
const
764 const ::Vector<double> &src)
const
IndexSet locally_owned_range_indices() const
Epetra_MpiComm communicator
Epetra_Operator & trilinos_operator() const
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_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_NAMESPACE_CLOSE
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
#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)