Forward compatibility: flex
[foam-extend-3.2.git] / src / lduSolvers / amg / amgCycle.H
blob703d0855f7d3fdddfe3cae31c61cb3857d2c5347
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     amgCycle
27 Description
28     Algebraic multigrid fixed cycle class
30 Author
31     Hrvoje Jasak, Wikki Ltd.  All rights reserved
33 SourceFiles
34     amgCycle.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef amgCycle_H
39 #define amgCycle_H
41 #include "amgLevel.H"
42 #include "NamedEnum.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 /*---------------------------------------------------------------------------*\
50                            Class amgCycle Declaration
51 \*---------------------------------------------------------------------------*/
53 class amgCycle
55     // Private data
57         //- Pointer to current AMG level
58         autoPtr<amgLevel> levelPtr_;
60         //- Pointer to coarse AMG cycle
61         amgCycle* coarseLevelPtr_;
63         //- Number of coarse levels
64         label nLevels_;
67     // Private Member Functions
69         //- Disallow default bitwise copy construct
70         amgCycle(const amgCycle&);
72         //- Disallow default bitwise assignment
73         void operator=(const amgCycle&);
76 public:
78     // Static data members
80         //- Cycle type
81         enum cycleType
82         {
83             V_CYCLE,
84             W_CYCLE,
85             F_CYCLE
86         };
88         //- Static data
90         //- Cycle type names
91         static const NamedEnum<cycleType, 3> cycleNames_;
94     // Constructors
96         //- Construct from AMG level
97         amgCycle(autoPtr<amgLevel> levelPtr);
100     // Destructor
102         ~amgCycle();
105     // Member Functions
107         //- Make coarse levels
108         void makeCoarseLevels(const label nMaxLevels);
110         //- Return number of levels
111         label nLevels() const
112         {
113             return nLevels_;
114         }
116         //- Calculate residual
117         void residual
118         (
119             const scalarField& x,
120             const scalarField& b,
121             const direction cmpt,
122             scalarField& res
123         ) const
124         {
125             levelPtr_->residual(x, b, cmpt, res);
126         }
129         //- Fixed cycle
130         void fixedCycle
131         (
132             scalarField& x,
133             const scalarField& b,
134             const direction cmpt,
135             scalarField& xBuffer,
136             const cycleType cycle,
137             const label nPreSweeps,
138             const label nPostSweeps,
139             const bool scale
140         ) const;
144 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
146 } // End namespace Foam
148 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
150 #endif
152 // ************************************************************************* //