Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / lduSolvers / amg / amgPolicy / pamgPolicy.H
blob13b65d7a2e52d753e6c306847530c76d79fe7c38
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     pamgPolicy
27 Description
28     Pairwise agglomerative AMG policy.  Legacy implementation
30 Author
31     Hrvoje Jasak, Wikki Ltd.  All rights reserved
33 SourceFiles
34     pamgPolicy.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef pamgPolicy_H
39 #define pamgPolicy_H
41 #include "amgPolicy.H"
42 #include "lduMatrix.H"
43 #include "tolerancesSwitch.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 /*---------------------------------------------------------------------------*\
51                            Class pamgPolicy Declaration
52 \*---------------------------------------------------------------------------*/
54 class pamgPolicy
56     public amgPolicy
58     // Private Data
60         //- Reference to matrix
61         const lduMatrix& matrix_;
63         //- Child array: for each fine equation give coarse cluster index
64         labelField child_;
66         //- Number of solo cells
67         label nSolo_;
69         //- Number of coarse equations
70         label nCoarseEqns_;
72         //- Can a coarse level be constructed?
73         bool coarsen_;
76     // Private Member Functions
78         //- Disallow default bitwise copy construct
79         pamgPolicy(const pamgPolicy&);
81         //- Disallow default bitwise assignment
82         void operator=(const pamgPolicy&);
84         //- Calculate child
85         void calcChild();
88     // Private Static Data
90         //- Diagonal scaling factor
91         static const debug::tolerancesSwitch diagFactor_;
94 public:
96         //- Runtime type information
97         TypeName("PAMG");
100     // Constructors
102         //- Construct from matrix and group size
103         pamgPolicy
104         (
105             const lduMatrix& matrix,
106             const label groupSize,
107             const label minCoarseEqns
108         );
110     // Destructor
112         virtual ~pamgPolicy();
115     // Member Functions
117         //- Can a coarse level be constructed?
118         virtual bool coarsen() const
119         {
120             return coarsen_;
121         }
123         //- Restrict matrix
124         virtual autoPtr<amgMatrix> restrictMatrix
125         (
126             const FieldField<Field, scalar>& bouCoeffs,
127             const FieldField<Field, scalar>& intCoeffs,
128             const lduInterfaceFieldPtrsList& interfaces
129         )  const;
131         //- Restrict residual
132         virtual void restrictResidual
133         (
134             const scalarField& res,
135             scalarField& coarseRes
136         ) const;
138         //- Prolongate correction
139         virtual void prolongateCorrection
140         (
141             scalarField& x,
142             const scalarField& coarseX
143         ) const;
148 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
150 } // End namespace Foam
152 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
154 #endif
156 // ************************************************************************* //