Reference documentation for deal.II version 8.4.2
trilinos_precondition.cc
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 2008 - 2015 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE at
12 // the top level of the deal.II distribution.
13 //
14 // ---------------------------------------------------------------------
15 
16 #include <deal.II/lac/trilinos_precondition.h>
17 
18 #ifdef DEAL_II_WITH_TRILINOS
19 
20 # include <deal.II/lac/vector.h>
21 # include <deal.II/lac/sparse_matrix.h>
22 # include <deal.II/lac/trilinos_sparse_matrix.h>
23 
24 DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
25 # include <Ifpack.h>
26 # include <Ifpack_Chebyshev.h>
27 # include <Teuchos_ParameterList.hpp>
28 # include <Teuchos_RCP.hpp>
29 # include <Epetra_MultiVector.h>
31 
32 DEAL_II_NAMESPACE_OPEN
33 
34 namespace TrilinosWrappers
35 {
36 
38 #ifdef DEAL_II_WITH_MPI
39  :
40  communicator (MPI_COMM_SELF)
41 #endif
42  {}
43 
44 
45 
47  :
48  Subscriptor (),
49  preconditioner (base.preconditioner),
50 #ifdef DEAL_II_WITH_MPI
51  communicator (base.communicator),
52 #endif
53  vector_distributor (new Epetra_Map(*base.vector_distributor))
54  {}
55 
56 
57 
59  {}
60 
61 
62 
64  {
65  preconditioner.reset();
66 #ifdef DEAL_II_WITH_MPI
67  communicator = MPI_COMM_SELF;
68 #endif
69  vector_distributor.reset();
70  }
71 
72 
73 
74  /* -------------------------- PreconditionJacobi -------------------------- */
75 
77  AdditionalData (const double omega,
78  const double min_diagonal,
79  const unsigned int n_sweeps)
80  :
81  omega (omega),
82  min_diagonal (min_diagonal),
83  n_sweeps (n_sweeps)
84  {}
85 
86 
87 
88  void
90  const AdditionalData &additional_data)
91  {
92  // release memory before reallocation
93  preconditioner.reset ();
94  preconditioner.reset (Ifpack().Create
95  ("point relaxation",
96  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
97  0));
98 
99  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
100  (preconditioner.get());
101  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
102  "preconditioner"));
103 
104  int ierr;
105 
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",
111  additional_data.min_diagonal);
112 
113  ierr = ifpack->SetParameters(parameter_list);
114  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
115 
116  ierr = ifpack->Initialize();
117  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
118 
119  ierr = ifpack->Compute();
120  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
121  }
122 
123 
124 
125  /* -------------------------- PreconditionSSOR -------------------------- */
126 
128  AdditionalData (const double omega,
129  const double min_diagonal,
130  const unsigned int overlap,
131  const unsigned int n_sweeps)
132  :
133  omega (omega),
134  min_diagonal (min_diagonal),
135  overlap (overlap),
136  n_sweeps (n_sweeps)
137  {}
138 
139 
140 
141  void
143  const AdditionalData &additional_data)
144  {
145  preconditioner.reset ();
146  preconditioner.reset (Ifpack().Create
147  ("point relaxation",
148  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
149  additional_data.overlap));
150 
151  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
152  (preconditioner.get());
153  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
154  "preconditioner"));
155 
156  int ierr;
157 
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",
163  additional_data.min_diagonal);
164  parameter_list.set ("schwarz: combine mode", "Add");
165 
166  ierr = ifpack->SetParameters(parameter_list);
167  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
168 
169  ierr = ifpack->Initialize();
170  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
171 
172  ierr = ifpack->Compute();
173  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
174  }
175 
176 
177 
178  /* -------------------------- PreconditionSOR -------------------------- */
179 
181  AdditionalData (const double omega,
182  const double min_diagonal,
183  const unsigned int overlap,
184  const unsigned int n_sweeps)
185  :
186  omega (omega),
187  min_diagonal (min_diagonal),
188  overlap (overlap),
189  n_sweeps (n_sweeps)
190  {}
191 
192 
193 
194  void
196  const AdditionalData &additional_data)
197  {
198  preconditioner.reset ();
199  preconditioner.reset (Ifpack().Create
200  ("point relaxation",
201  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
202  additional_data.overlap));
203 
204  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
205  (preconditioner.get());
206  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
207  "preconditioner"));
208 
209  int ierr;
210 
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",
216  additional_data.min_diagonal);
217  parameter_list.set ("schwarz: combine mode", "Add");
218 
219  ierr = ifpack->SetParameters(parameter_list);
220  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
221 
222  ierr = ifpack->Initialize();
223  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
224 
225  ierr = ifpack->Compute();
226  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
227  }
228 
229 
230 
231  /* ----------------------- PreconditionBlockJacobi ---------------------- */
232 
234  AdditionalData (const unsigned int block_size,
235  const std::string block_creation_type,
236  const double omega,
237  const double min_diagonal,
238  const unsigned int n_sweeps)
239  :
240  block_size(block_size),
241  block_creation_type(block_creation_type),
242  omega (omega),
243  min_diagonal (min_diagonal),
244  n_sweeps (n_sweeps)
245  {}
246 
247 
248 
249  void
251  const AdditionalData &additional_data)
252  {
253  // release memory before reallocation
254  preconditioner.reset ();
255  preconditioner.reset (Ifpack().Create
256  ("block relaxation",
257  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
258  0));
259 
260  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
261  (preconditioner.get());
262  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
263  "preconditioner"));
264 
265  int ierr;
266 
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",
272  additional_data.min_diagonal);
273  parameter_list.set ("partitioner: type", additional_data.block_creation_type);
274  int n_local_parts = (matrix.trilinos_matrix().NumMyRows()+additional_data.
275  block_size-1)/additional_data.block_size;
276  parameter_list.set ("partitioner: local parts", n_local_parts);
277 
278  ierr = ifpack->SetParameters(parameter_list);
279  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
280 
281  ierr = ifpack->Initialize();
282  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
283 
284  ierr = ifpack->Compute();
285  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
286  }
287 
288 
289 
290  /* ----------------------- PreconditionBlockSSOR ------------------------ */
291 
293  AdditionalData (const unsigned int block_size,
294  const std::string block_creation_type,
295  const double omega,
296  const double min_diagonal,
297  const unsigned int overlap,
298  const unsigned int n_sweeps)
299  :
300  block_size(block_size),
301  block_creation_type(block_creation_type),
302  omega (omega),
303  min_diagonal (min_diagonal),
304  overlap (overlap),
305  n_sweeps (n_sweeps)
306  {}
307 
308 
309 
310  void
312  const AdditionalData &additional_data)
313  {
314  preconditioner.reset ();
315  preconditioner.reset (Ifpack().Create
316  ("block relaxation",
317  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
318  additional_data.overlap));
319 
320  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
321  (preconditioner.get());
322  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
323  "preconditioner"));
324 
325  int ierr;
326 
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",
332  additional_data.min_diagonal);
333  parameter_list.set ("schwarz: combine mode", "Add");
334  parameter_list.set ("partitioner: type", additional_data.block_creation_type);
335  int n_local_parts = (matrix.trilinos_matrix().NumMyRows()+additional_data.
336  block_size-1)/additional_data.block_size;
337  parameter_list.set ("partitioner: local parts", n_local_parts);
338 
339  ierr = ifpack->SetParameters(parameter_list);
340  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
341 
342  ierr = ifpack->Initialize();
343  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
344 
345  ierr = ifpack->Compute();
346  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
347  }
348 
349 
350 
351  /* ------------------------ PreconditionBlockSOR ------------------------ */
352 
354  AdditionalData (const unsigned int block_size,
355  const std::string block_creation_type,
356  const double omega,
357  const double min_diagonal,
358  const unsigned int overlap,
359  const unsigned int n_sweeps)
360  :
361  block_size(block_size),
362  block_creation_type(block_creation_type),
363  omega (omega),
364  min_diagonal (min_diagonal),
365  overlap (overlap),
366  n_sweeps (n_sweeps)
367  {}
368 
369 
370 
371  void
373  const AdditionalData &additional_data)
374  {
375  preconditioner.reset ();
376  preconditioner.reset (Ifpack().Create
377  ("block relaxation",
378  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
379  additional_data.overlap));
380 
381  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
382  (preconditioner.get());
383  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
384  "preconditioner"));
385 
386  int ierr;
387 
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",
393  additional_data.min_diagonal);
394  parameter_list.set ("schwarz: combine mode", "Add");
395  parameter_list.set ("partitioner: type", additional_data.block_creation_type);
396  int n_local_parts = (matrix.trilinos_matrix().NumMyRows()+additional_data.
397  block_size-1)/additional_data.block_size;
398  parameter_list.set ("partitioner: local parts", n_local_parts);
399 
400  ierr = ifpack->SetParameters(parameter_list);
401  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
402 
403  ierr = ifpack->Initialize();
404  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
405 
406  ierr = ifpack->Compute();
407  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
408  }
409 
410 
411 
412  /* -------------------------- PreconditionIC -------------------------- */
413 
415  AdditionalData (const unsigned int ic_fill,
416  const double ic_atol,
417  const double ic_rtol,
418  const unsigned int overlap)
419  :
420  ic_fill (ic_fill),
421  ic_atol (ic_atol),
422  ic_rtol (ic_rtol),
423  overlap (overlap)
424  {}
425 
426 
427 
428  void
430  const AdditionalData &additional_data)
431  {
432  preconditioner.reset ();
433  preconditioner.reset (Ifpack().Create
434  ("IC",
435  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
436  additional_data.overlap));
437 
438  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
439  (preconditioner.get());
440  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
441  "preconditioner"));
442 
443  int ierr;
444 
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");
450 
451  ierr = ifpack->SetParameters(parameter_list);
452  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
453 
454  ierr = ifpack->Initialize();
455  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
456 
457  ierr = ifpack->Compute();
458  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
459  }
460 
461 
462 
463  /* -------------------------- PreconditionILU -------------------------- */
464 
466  AdditionalData (const unsigned int ilu_fill,
467  const double ilu_atol,
468  const double ilu_rtol,
469  const unsigned int overlap)
470  :
471  ilu_fill (ilu_fill),
472  ilu_atol (ilu_atol),
473  ilu_rtol (ilu_rtol),
474  overlap (overlap)
475  {}
476 
477 
478 
479  void
481  const AdditionalData &additional_data)
482  {
483  preconditioner.reset ();
484  preconditioner.reset (Ifpack().Create
485  ("ILU",
486  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
487  additional_data.overlap));
488 
489  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
490  (preconditioner.get());
491  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
492  "preconditioner"));
493 
494  int ierr;
495 
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");
501 
502  ierr = ifpack->SetParameters(parameter_list);
503  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
504 
505  ierr = ifpack->Initialize();
506  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
507 
508  ierr = ifpack->Compute();
509  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
510  }
511 
512 
513 
514  /* -------------------------- PreconditionILUT -------------------------- */
515 
517  AdditionalData (const double ilut_drop,
518  const unsigned int ilut_fill,
519  const double ilut_atol,
520  const double ilut_rtol,
521  const unsigned int overlap)
522  :
523  ilut_drop (ilut_drop),
524  ilut_fill (ilut_fill),
525  ilut_atol (ilut_atol),
526  ilut_rtol (ilut_rtol),
527  overlap (overlap)
528  {}
529 
530 
531 
532  void
534  const AdditionalData &additional_data)
535  {
536  preconditioner.reset ();
537  preconditioner.reset (Ifpack().Create
538  ("ILUT",
539  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
540  additional_data.overlap));
541 
542  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
543  (preconditioner.get());
544  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
545  "preconditioner"));
546 
547  int ierr;
548 
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");
555 
556  ierr = ifpack->SetParameters(parameter_list);
557  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
558 
559  ierr = ifpack->Initialize();
560  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
561 
562  ierr = ifpack->Compute();
563  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
564  }
565 
566 
567 
568  /* ---------------------- PreconditionBlockDirect --------------------- */
569 
571  AdditionalData (const unsigned int overlap)
572  :
573  overlap (overlap)
574  {}
575 
576 
577 
578  void
580  const AdditionalData &additional_data)
581  {
582  preconditioner.reset ();
583  preconditioner.reset (Ifpack().Create
584  ("Amesos",
585  const_cast<Epetra_CrsMatrix *>(&matrix.trilinos_matrix()),
586  additional_data.overlap));
587 
588  Ifpack_Preconditioner *ifpack = static_cast<Ifpack_Preconditioner *>
589  (preconditioner.get());
590  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
591  "preconditioner"));
592 
593  int ierr;
594 
595  Teuchos::ParameterList parameter_list;
596  parameter_list.set ("schwarz: combine mode", "Add");
597 
598  ierr = ifpack->SetParameters(parameter_list);
599  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
600 
601  ierr = ifpack->Initialize();
602  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
603 
604  ierr = ifpack->Compute();
605  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
606  }
607 
608 
609 
610  /* ---------------------- PreconditionBlockDirect --------------------- */
611 
613  AdditionalData (const unsigned int degree,
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)
619  :
620  degree (degree),
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)
626  {}
627 
628 
629 
630  void
632  const AdditionalData &additional_data)
633  {
634  preconditioner.reset ();
635  preconditioner.reset (new Ifpack_Chebyshev (&matrix.trilinos_matrix()));
636 
637  Ifpack_Chebyshev *ifpack = static_cast<Ifpack_Chebyshev *>
638  (preconditioner.get());
639  Assert (ifpack != 0, ExcMessage ("Trilinos could not create this "
640  "preconditioner"));
641 
642  int ierr;
643 
644  Teuchos::ParameterList parameter_list;
645  parameter_list.set ("chebyshev: ratio eigenvalue",
646  additional_data.eigenvalue_ratio);
647  parameter_list.set ("chebyshev: min eigenvalue",
648  additional_data.min_eigenvalue);
649  parameter_list.set ("chebyshev: max eigenvalue",
650  additional_data.max_eigenvalue);
651  parameter_list.set ("chebyshev: degree",
652  (int)additional_data.degree);
653  parameter_list.set ("chebyshev: min diagonal value",
654  additional_data.min_diagonal);
655  parameter_list.set ("chebyshev: zero starting solution",
656  !additional_data.nonzero_starting);
657 
658  ierr = ifpack->SetParameters(parameter_list);
659  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
660 
661  ierr = ifpack->Initialize();
662  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
663 
664  ierr = ifpack->Compute();
665  AssertThrow (ierr == 0, ExcTrilinosError(ierr));
666  }
667 
668 
669 
670 
671 
672 
673 
674 
675  /* -------------------------- PreconditionIdentity --------------------- */
676 
677  void
679  const VectorBase &src) const
680  {
681  dst = src;
682  }
683 
684  void
686  const VectorBase &src) const
687  {
688  dst = src;
689  }
690 
691  void
693  const ::Vector<double> &src) const
694  {
695  dst = src;
696  }
697 
698  void
700  const ::Vector<double> &src) const
701  {
702  dst = src;
703  }
704 
705  void
707  const parallel::distributed::Vector<double> &src) const
708  {
709  dst = src;
710  }
711 
712  void
714  const parallel::distributed::Vector<double> &src) const
715  {
716  dst = src;
717  }
718 }
719 
720 DEAL_II_NAMESPACE_CLOSE
721 
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)
Definition: exceptions.h:358
std_cxx11::shared_ptr< Epetra_Map > vector_distributor
std_cxx11::shared_ptr< Epetra_Operator > preconditioner
#define Assert(cond, exc)
Definition: exceptions.h:294
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())
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())
AdditionalData(const double omega=1, const double min_diagonal=0, const unsigned int n_sweeps=1)