diagonalPreconditioner.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::diagonalPreconditioner
26 
27 Description
28  Diagonal preconditioner for both symmetric and asymmetric matrices.
29 
30  The reciprocal of the diagonal is calculated and stored for reuse
31  because on most systems '*' is faster than '/'.
32 
33 SourceFiles
34  diagonalPreconditioner.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef diagonalPreconditioner_H
39 #define diagonalPreconditioner_H
40 
41 #include "lduMatrix.H"
42 
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 
45 namespace Foam
46 {
47 
48 /*---------------------------------------------------------------------------*\
49  Class diagonalPreconditioner Declaration
50 \*---------------------------------------------------------------------------*/
51 
53 :
55 {
56  // Private Data
57 
58  //- The reciprocal diagonal
59  scalarField rD;
60 
61 
62 public:
63 
64  //- Runtime type information
65  TypeName("diagonal");
66 
67 
68  // Constructors
69 
70  //- Construct from matrix components and preconditioner solver controls
72  (
73  const lduMatrix::solver&,
74  const dictionary& solverControlsUnused
75  );
76 
77  //- Disallow default bitwise copy construction
79 
80 
81  //- Destructor
82  virtual ~diagonalPreconditioner()
83  {}
84 
85 
86  // Member Functions
87 
88  //- Return wA the preconditioned form of residual rA
89  virtual void precondition
90  (
91  scalarField& wA,
92  const scalarField& rA,
93  const direction cmpt=0
94  ) const;
95 
96  //- Return wT the transpose-matrix preconditioned form of residual rT.
97  virtual void preconditionT
98  (
99  scalarField& wT,
100  const scalarField& rT,
101  const direction cmpt=0
102  ) const
103  {
104  return precondition(wT, rT, cmpt);
105  }
106 
107 
108  // Member Operators
109 
110  //- Disallow default bitwise assignment
111  void operator=(const diagonalPreconditioner&) = delete;
112 };
113 
114 
115 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
116 
117 } // End namespace Foam
118 
119 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
120 
121 #endif
122 
123 // ************************************************************************* //
Diagonal preconditioner for both symmetric and asymmetric matrices.
virtual void precondition(scalarField &wA, const scalarField &rA, const direction cmpt=0) const
Return wA the preconditioned form of residual rA.
TypeName("diagonal")
Runtime type information.
diagonalPreconditioner(const lduMatrix::solver &, const dictionary &solverControlsUnused)
Construct from matrix components and preconditioner solver controls.
virtual void preconditionT(scalarField &wT, const scalarField &rT, const direction cmpt=0) const
Return wT the transpose-matrix preconditioned form of residual rT.
void operator=(const diagonalPreconditioner &)=delete
Disallow default bitwise assignment.
virtual ~diagonalPreconditioner()
Destructor.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:162
Abstract base-class for lduMatrix preconditioners.
Definition: lduMatrix.H:411
Abstract base-class for lduMatrix solvers.
Definition: lduMatrix.H:94
Namespace for OpenFOAM.
uint8_t direction
Definition: direction.H:45