include/deal.II/lac/petsc_precondition.h

00001 //---------------------------------------------------------------------------
00002 //    @f$Id: petsc_precondition.h 25345 2012-03-31 08:37:04Z bangerth @f$
00003 //
00004 //    Copyright (C) 2004, 2005, 2006, 2007, 2010, 2012 by the deal.II authors
00005 //
00006 //    This file is subject to QPL and may not be  distributed
00007 //    without copyright and license information. Please refer
00008 //    to the file deal.II/doc/license.html for the  text  and
00009 //    further information on this license.
00010 //
00011 //---------------------------------------------------------------------------
00012 #ifndef __deal2__petsc_precondition_h
00013 #define __deal2__petsc_precondition_h
00014 
00015 
00016 #include <deal.II/base/config.h>
00017 
00018 #ifdef DEAL_II_USE_PETSC
00019 
00020 #  include <deal.II/lac/exceptions.h>
00021 #  include <petscpc.h>
00022 
00023 DEAL_II_NAMESPACE_OPEN
00024 
00025 
00026 
00027 namespace PETScWrappers
00028 {
00029                                    // forward declarations
00030   class MatrixBase;
00031   class VectorBase;
00032   class SolverBase;
00033 
00034 
00051   class PreconditionerBase
00052   {
00053     public:
00057       PreconditionerBase ();
00058 
00062       virtual ~PreconditionerBase ();
00063 
00068       void vmult (VectorBase       &dst,
00069                   const VectorBase &src) const;
00070 
00071 
00076       const PC & get_pc () const;
00077 
00078     protected:
00082       PC pc;
00083 
00088       Mat matrix;
00089 
00095       void create_pc ();
00096 
00105       operator Mat () const;
00106 
00112       friend class SolverBase;
00113   };
00114 
00115 
00116 
00127   class PreconditionJacobi : public PreconditionerBase
00128   {
00129     public:
00135       struct AdditionalData
00136       {};
00137 
00143       PreconditionJacobi ();
00144 
00145 
00152       PreconditionJacobi (const MatrixBase     &matrix,
00153                           const AdditionalData &additional_data = AdditionalData());
00154 
00166       void initialize (const MatrixBase     &matrix,
00167                        const AdditionalData &additional_data = AdditionalData());
00168 
00169     protected:
00174       AdditionalData additional_data;
00175   };
00176 
00177 
00178 
00196   class PreconditionBlockJacobi : public PreconditionerBase
00197   {
00198     public:
00204       struct AdditionalData
00205       {};
00206 
00212       PreconditionBlockJacobi ();
00213 
00220       PreconditionBlockJacobi (const MatrixBase     &matrix,
00221                                const AdditionalData &additional_data = AdditionalData());
00222 
00234       void initialize (const MatrixBase     &matrix,
00235                        const AdditionalData &additional_data = AdditionalData());
00236 
00237     protected:
00242       AdditionalData additional_data;
00243   };
00244 
00245 
00246 
00257   class PreconditionSOR : public PreconditionerBase
00258   {
00259     public:
00265       struct AdditionalData
00266       {
00272           AdditionalData (const double omega = 1);
00273 
00277           double omega;
00278       };
00279 
00285       PreconditionSOR ();
00286 
00293       PreconditionSOR (const MatrixBase     &matrix,
00294                        const AdditionalData &additional_data = AdditionalData());
00295 
00307       void initialize (const MatrixBase     &matrix,
00308                        const AdditionalData &additional_data = AdditionalData());
00309 
00310     protected:
00315       AdditionalData additional_data;
00316   };
00317 
00318 
00319 
00330   class PreconditionSSOR : public PreconditionerBase
00331   {
00332     public:
00338       struct AdditionalData
00339       {
00345           AdditionalData (const double omega = 1);
00346 
00350           double omega;
00351       };
00352 
00358       PreconditionSSOR ();
00359 
00366       PreconditionSSOR (const MatrixBase     &matrix,
00367                         const AdditionalData &additional_data = AdditionalData());
00368 
00380       void initialize (const MatrixBase     &matrix,
00381                        const AdditionalData &additional_data = AdditionalData());
00382 
00383     protected:
00388       AdditionalData additional_data;
00389   };
00390 
00391 
00392 
00403   class PreconditionEisenstat : public PreconditionerBase
00404   {
00405     public:
00411       struct AdditionalData
00412       {
00418           AdditionalData (const double omega = 1);
00419 
00423           double omega;
00424       };
00425 
00431       PreconditionEisenstat ();
00432 
00439       PreconditionEisenstat (const MatrixBase     &matrix,
00440                              const AdditionalData &additional_data = AdditionalData());
00441 
00453       void initialize (const MatrixBase     &matrix,
00454                        const AdditionalData &additional_data = AdditionalData());
00455 
00456     protected:
00461       AdditionalData additional_data;
00462   };
00463 
00464 
00465 
00476   class PreconditionICC : public PreconditionerBase
00477   {
00478     public:
00484       struct AdditionalData
00485       {
00491           AdditionalData (const unsigned int levels = 0);
00492 
00496           unsigned int levels;
00497       };
00498 
00504       PreconditionICC ();
00505 
00512       PreconditionICC (const MatrixBase     &matrix,
00513                        const AdditionalData &additional_data = AdditionalData());
00514 
00526       void initialize (const MatrixBase     &matrix,
00527                        const AdditionalData &additional_data = AdditionalData());
00528 
00529     protected:
00534       AdditionalData additional_data;
00535   };
00536 
00537 
00538 
00549   class PreconditionILU : public PreconditionerBase
00550   {
00551     public:
00557       struct AdditionalData
00558       {
00564           AdditionalData (const unsigned int levels = 0);
00565 
00569           unsigned int levels;
00570       };
00571 
00577       PreconditionILU ();
00578 
00585       PreconditionILU (const MatrixBase     &matrix,
00586                        const AdditionalData &additional_data = AdditionalData());
00587 
00599       void initialize (const MatrixBase     &matrix,
00600                        const AdditionalData &additional_data = AdditionalData());
00601 
00602     protected:
00607       AdditionalData additional_data;
00608   };
00609 
00610 
00611 
00624   class PreconditionLU : public PreconditionerBase
00625   {
00626     public:
00632       struct AdditionalData
00633       {
00639           AdditionalData (const double pivoting = 1.e-6,
00640                           const double zero_pivot = 1.e-12,
00641                           const double damping = 0.0);
00642 
00651           double pivoting;
00652 
00659           double zero_pivot;
00660 
00666           double damping;
00667       };
00668 
00674       PreconditionLU ();
00675 
00682       PreconditionLU (const MatrixBase     &matrix,
00683                       const AdditionalData &additional_data = AdditionalData());
00684 
00696       void initialize (const MatrixBase     &matrix,
00697                        const AdditionalData &additional_data = AdditionalData());
00698 
00699     protected:
00704       AdditionalData additional_data;
00705   };
00706 
00707 
00708 
00709 
00721   class PreconditionBoomerAMG : public PreconditionerBase
00722   {
00723     public:
00729       struct AdditionalData
00730       {
00736           AdditionalData (
00737             const bool symmetric_operator = false,
00738             const double strong_threshold = 0.25,
00739             const double max_row_sum = 0.9,
00740             const unsigned int aggressive_coarsening_num_levels = 0,
00741             const bool output_details = false
00742           );
00743 
00754           bool symmetric_operator;
00755 
00765           double strong_threshold;
00766 
00788           double max_row_sum;
00789 
00796           unsigned int aggressive_coarsening_num_levels;
00797 
00804           bool output_details;
00805       };
00806 
00807 
00808 
00814       PreconditionBoomerAMG ();
00815 
00822       PreconditionBoomerAMG (const MatrixBase     &matrix,
00823                              const AdditionalData &additional_data = AdditionalData());
00824 
00836       void initialize (const MatrixBase     &matrix,
00837                        const AdditionalData &additional_data = AdditionalData());
00838 
00839     protected:
00844       AdditionalData additional_data;
00845   };
00846 }
00847 
00848 
00849 
00850 DEAL_II_NAMESPACE_CLOSE
00851 
00852 
00853 #endif // DEAL_II_USE_PETSC
00854 
00855 /*----------------------------   petsc_precondition.h     ---------------------------*/
00856 
00857 #endif
00858 /*----------------------------   petsc_precondition.h     ---------------------------*/
00859 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

deal.II documentation generated on Wed May 23 2012 06:07:38 by doxygen 1.7.3