16 #include <deal.II/lac/trilinos_precondition.h> 18 #ifdef DEAL_II_WITH_TRILINOS 20 # include <deal.II/lac/vector.h> 21 # include <deal.II/lac/sparse_matrix.h> 22 # include <deal.II/lac/trilinos_sparse_matrix.h> 24 DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
26 # include <Ifpack_Chebyshev.h> 27 # include <Teuchos_ParameterList.hpp> 28 # include <Teuchos_RCP.hpp> 29 # include <Epetra_MultiVector.h> 32 DEAL_II_NAMESPACE_OPEN
38 #ifdef DEAL_II_WITH_MPI 40 communicator (MPI_COMM_SELF)
49 preconditioner (base.preconditioner),
50 #ifdef DEAL_II_WITH_MPI
51 communicator (base.communicator),
53 vector_distributor (new Epetra_Map(*base.vector_distributor))
66 #ifdef DEAL_II_WITH_MPI 78 const double min_diagonal,
79 const unsigned int n_sweeps)
82 min_diagonal (min_diagonal),
99 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 106 Teuchos::ParameterList parameter_list;
107 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
108 parameter_list.set (
"relaxation: type",
"Jacobi");
109 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
110 parameter_list.set (
"relaxation: min diagonal value",
113 ierr = ifpack->SetParameters(parameter_list);
116 ierr = ifpack->Initialize();
119 ierr = ifpack->Compute();
130 const unsigned int overlap,
134 min_diagonal (min_diagonal),
151 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 158 Teuchos::ParameterList parameter_list;
159 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
160 parameter_list.set (
"relaxation: type",
"symmetric Gauss-Seidel");
161 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
162 parameter_list.set (
"relaxation: min diagonal value",
164 parameter_list.set (
"schwarz: combine mode",
"Add");
166 ierr = ifpack->SetParameters(parameter_list);
169 ierr = ifpack->Initialize();
172 ierr = ifpack->Compute();
187 min_diagonal (min_diagonal),
204 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 211 Teuchos::ParameterList parameter_list;
212 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
213 parameter_list.set (
"relaxation: type",
"Gauss-Seidel");
214 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
215 parameter_list.set (
"relaxation: min diagonal value",
217 parameter_list.set (
"schwarz: combine mode",
"Add");
219 ierr = ifpack->SetParameters(parameter_list);
222 ierr = ifpack->Initialize();
225 ierr = ifpack->Compute();
235 const std::string block_creation_type,
240 block_size(block_size),
241 block_creation_type(block_creation_type),
243 min_diagonal (min_diagonal),
260 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 267 Teuchos::ParameterList parameter_list;
268 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
269 parameter_list.set (
"relaxation: type",
"Jacobi");
270 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
271 parameter_list.set (
"relaxation: min diagonal value",
274 int n_local_parts = (matrix.
trilinos_matrix().NumMyRows()+additional_data.
276 parameter_list.set (
"partitioner: local parts", n_local_parts);
278 ierr = ifpack->SetParameters(parameter_list);
281 ierr = ifpack->Initialize();
284 ierr = ifpack->Compute();
297 const unsigned int overlap,
300 block_size(block_size),
301 block_creation_type(block_creation_type),
303 min_diagonal (min_diagonal),
320 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 327 Teuchos::ParameterList parameter_list;
328 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
329 parameter_list.set (
"relaxation: type",
"symmetric Gauss-Seidel");
330 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
331 parameter_list.set (
"relaxation: min diagonal value",
333 parameter_list.set (
"schwarz: combine mode",
"Add");
335 int n_local_parts = (matrix.
trilinos_matrix().NumMyRows()+additional_data.
337 parameter_list.set (
"partitioner: local parts", n_local_parts);
339 ierr = ifpack->SetParameters(parameter_list);
342 ierr = ifpack->Initialize();
345 ierr = ifpack->Compute();
361 block_size(block_size),
362 block_creation_type(block_creation_type),
364 min_diagonal (min_diagonal),
381 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 388 Teuchos::ParameterList parameter_list;
389 parameter_list.set (
"relaxation: sweeps", static_cast<int>(additional_data.
n_sweeps));
390 parameter_list.set (
"relaxation: type",
"Gauss-Seidel");
391 parameter_list.set (
"relaxation: damping factor", additional_data.
omega);
392 parameter_list.set (
"relaxation: min diagonal value",
394 parameter_list.set (
"schwarz: combine mode",
"Add");
396 int n_local_parts = (matrix.
trilinos_matrix().NumMyRows()+additional_data.
398 parameter_list.set (
"partitioner: local parts", n_local_parts);
400 ierr = ifpack->SetParameters(parameter_list);
403 ierr = ifpack->Initialize();
406 ierr = ifpack->Compute();
416 const double ic_atol,
417 const double ic_rtol,
438 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 445 Teuchos::ParameterList parameter_list;
446 parameter_list.set (
"fact: level-of-fill",(
int)additional_data.
ic_fill);
447 parameter_list.set (
"fact: absolute threshold",additional_data.
ic_atol);
448 parameter_list.set (
"fact: relative threshold",additional_data.
ic_rtol);
449 parameter_list.set (
"schwarz: combine mode",
"Add");
451 ierr = ifpack->SetParameters(parameter_list);
454 ierr = ifpack->Initialize();
457 ierr = ifpack->Compute();
467 const double ilu_atol,
468 const double ilu_rtol,
489 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 496 Teuchos::ParameterList parameter_list;
497 parameter_list.set (
"fact: level-of-fill", static_cast<int>(additional_data.
ilu_fill));
498 parameter_list.set (
"fact: absolute threshold", additional_data.
ilu_atol);
499 parameter_list.set (
"fact: relative threshold", additional_data.
ilu_rtol);
500 parameter_list.set (
"schwarz: combine mode",
"Add");
502 ierr = ifpack->SetParameters(parameter_list);
505 ierr = ifpack->Initialize();
508 ierr = ifpack->Compute();
518 const unsigned int ilut_fill,
519 const double ilut_atol,
520 const double ilut_rtol,
523 ilut_drop (ilut_drop),
524 ilut_fill (ilut_fill),
525 ilut_atol (ilut_atol),
526 ilut_rtol (ilut_rtol),
542 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 549 Teuchos::ParameterList parameter_list;
550 parameter_list.set (
"fact: drop value",additional_data.
ilut_drop);
551 parameter_list.set (
"fact: level-of-fill",(
int)additional_data.
ilut_fill);
552 parameter_list.set (
"fact: absolute threshold",additional_data.
ilut_atol);
553 parameter_list.set (
"fact: relative threshold",additional_data.
ilut_rtol);
554 parameter_list.set (
"schwarz: combine mode",
"Add");
556 ierr = ifpack->SetParameters(parameter_list);
559 ierr = ifpack->Initialize();
562 ierr = ifpack->Compute();
588 Ifpack_Preconditioner *ifpack =
static_cast<Ifpack_Preconditioner *
> 595 Teuchos::ParameterList parameter_list;
596 parameter_list.set (
"schwarz: combine mode",
"Add");
598 ierr = ifpack->SetParameters(parameter_list);
601 ierr = ifpack->Initialize();
604 ierr = ifpack->Compute();
614 const double max_eigenvalue,
615 const double eigenvalue_ratio,
616 const double min_eigenvalue,
617 const double min_diagonal,
618 const bool nonzero_starting)
621 max_eigenvalue (max_eigenvalue),
622 eigenvalue_ratio (eigenvalue_ratio),
623 min_eigenvalue (min_eigenvalue),
624 min_diagonal (min_diagonal),
625 nonzero_starting (nonzero_starting)
637 Ifpack_Chebyshev *ifpack =
static_cast<Ifpack_Chebyshev *
> 644 Teuchos::ParameterList parameter_list;
645 parameter_list.set (
"chebyshev: ratio eigenvalue",
647 parameter_list.set (
"chebyshev: min eigenvalue",
649 parameter_list.set (
"chebyshev: max eigenvalue",
651 parameter_list.set (
"chebyshev: degree",
652 (
int)additional_data.
degree);
653 parameter_list.set (
"chebyshev: min diagonal value",
655 parameter_list.set (
"chebyshev: zero starting solution",
658 ierr = ifpack->SetParameters(parameter_list);
661 ierr = ifpack->Initialize();
664 ierr = ifpack->Compute();
693 const ::Vector<double> &src)
const 700 const ::Vector<double> &src)
const 720 DEAL_II_NAMESPACE_CLOSE
722 #endif // DEAL_II_WITH_TRILINOS
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)
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
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 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)
::ExceptionBase & ExcMessage(std::string arg1)
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())
AdditionalData(const unsigned int ilu_fill=0, const double ilu_atol=0., const double ilu_rtol=1., const unsigned int overlap=0)
#define AssertThrow(cond, exc)
AdditionalData(const unsigned int overlap=0)
std_cxx11::shared_ptr< Epetra_Map > vector_distributor
std::string block_creation_type
std_cxx11::shared_ptr< Epetra_Operator > preconditioner
#define Assert(cond, exc)
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
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)
const Epetra_CrsMatrix & trilinos_matrix() const
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int overlap=0, const unsigned int n_sweeps=1)
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
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)
void vmult(VectorBase &dst, const VectorBase &src) const
void Tvmult(VectorBase &dst, const VectorBase &src) const
void initialize(const SparseMatrix &matrix, const AdditionalData &additional_data=AdditionalData())
std::string block_creation_type
AdditionalData(const unsigned int ic_fill=0, const double ic_atol=0., const double ic_rtol=1., const unsigned int overlap=0)
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())
Epetra_MpiComm communicator
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int n_sweeps=1)
std::string block_creation_type