Final cumulative bug fix for 3.2. Author: Hrvoje Jasak. Merge: Hrvoje Jasak.
[foam-extend-3.2.git] / src / foam / matrices / blockLduMatrix / BlockLduSolvers / BlockIterativeSolver / BlockIterativeSolver.H
blob752078cf3c55d34d12eea5cd48a22ef92ef19748
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     BlockIterativeSolver
27 Description
28     Virtual base class for a block iterative solvers
30 Author
31     Hrvoje Jasak, Wikki Ltd.  All rights reserved
33 SourceFiles
34     BlockIterativeSolver.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef BlockIterativeSolver_H
39 #define BlockIterativeSolver_H
41 #include "BlockLduSolver.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 /*---------------------------------------------------------------------------*\
49                     Class BlockIterativeSolver Declaration
50 \*---------------------------------------------------------------------------*/
52 template<class Type>
53 class BlockIterativeSolver
55     public BlockLduSolver<Type>
57     // Private data
59         //- Solver tolerance
60         scalar tolerance_;
62         //- Relative tolerance
63         scalar relTolerance_;
65         //- Minimum number of iterations
66         //  (forced irrespective of convergence)
67         label minIter_;
69         //- Maximum number of iterations
70         label maxIter_;
73     // Private Member Functions
75         //- Disallow default bitwise copy construct
76         BlockIterativeSolver(const BlockIterativeSolver&);
78         //- Disallow default bitwise assignment
79         void operator=(const BlockIterativeSolver&);
82 protected:
84     // Protected Member Functions
86         //- Return normalisation factor
87         scalar normFactor
88         (
89             Field<Type>& x,
90             const Field<Type>& b
91         ) const;
93         //- Is the stop criterion reached
94         bool stop(BlockSolverPerformance<Type>& solverPerf) const;
97 public:
99     // Constructors
101         //- Construct from matrix components and solver data stream
102         BlockIterativeSolver
103         (
104             const word& fieldName,
105             const BlockLduMatrix<Type>& matrix,
106             const dictionary& dict
107         );
110     // Destructor
112         virtual ~BlockIterativeSolver()
113         {}
116     // Member Functions
118         // Access
120             //- Return tolerance
121             scalar tolerance() const
122             {
123                 return tolerance_;
124             }
126             //- Return relative tolerance
127             scalar relTolerance() const
128             {
129                 return relTolerance_;
130             }
132             //- Return minimum number of iterations
133             label minIter() const
134             {
135                 return minIter_;
136             }
138             //- Return maximum number of iterations
139             label maxIter() const
140             {
141                 return maxIter_;
142             }
145         // Solve
147             //- Solve the matrix with this solver
148             virtual BlockSolverPerformance<Type> solve
149             (
150                 Field<Type>& x,
151                 const Field<Type>& b
152             ) = 0;
156 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
158 } // End namespace Foam
160 #ifdef NoRepository
161 #   include "BlockIterativeSolver.C"
162 #endif
164 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
166 #endif
168 // ************************************************************************* //