Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / matrices / blockLduMatrix / BlockLduSmoothers / BlockLduSmoother / BlockLduSmoother.H
blobe966dfce4dbd1c2ff55112babd3aef8d252ce53f
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     BlockLduSmoother
27 Description
28     Block LDU matrix smoother virtual base class
30 SourceFiles
31     newBlockLduSmoother.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef BlockLduSmoother_H
36 #define BlockLduSmoother_H
38 #include "blockLduMatrices.H"
40 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
42 namespace Foam
45 /*---------------------------------------------------------------------------*\
46                         Class BlockLduSmoother Declaration
47 \*---------------------------------------------------------------------------*/
49 template<class Type>
50 class BlockLduSmoother
52     // Private Member Functions
54         //- Disallow default bitwise copy construct
55         BlockLduSmoother(const BlockLduSmoother&);
57         //- Disallow default bitwise assignment
58         void operator=(const BlockLduSmoother&);
61 protected:
63     // Protected data
65         //- Matrix reference
66         const BlockLduMatrix<Type>& matrix_;
69 public:
71     //- Runtime type information
72     TypeName("BlockLduSmoother");
75     // Declare run-time constructor selection tables
77         declareRunTimeSelectionTable
78         (
79             autoPtr,
80             BlockLduSmoother,
81             dictionary,
82             (
83                 const BlockLduMatrix<Type>& matrix,
84                 const dictionary& dict
85             ),
86             (
87                 matrix,
88                 dict
89             )
90         );
93     // Constructors
95         //- Construct from matrix
96         BlockLduSmoother(const BlockLduMatrix<Type>& matrix)
97         :
98             matrix_(matrix)
99         {}
102     // Selectors
104         //- Select given matrix and dictionary
105         static autoPtr<BlockLduSmoother<Type> > New
106         (
107             const BlockLduMatrix<Type>& matrix,
108             const dictionary& dict,
109             const word keyword = word("smoother")
110         );
113     // Destructor
115         virtual ~BlockLduSmoother()
116         {}
119     // Member Functions
121         //- Execute smoothing
122         virtual void smooth
123         (
124             Field<Type>& x,
125             const Field<Type>& b,
126             const label nSweeps
127         ) const = 0;
131 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
133 } // End namespace Foam
135 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
137 #ifdef NoRepository
138 #   include "BlockLduSmoother.C"
139 #endif
141 #define makeBlockSmoother(SmootherType, typeSmootherType)                    \
142                                                                              \
143 defineNamedTemplateTypeNameAndDebug(typeSmootherType, 0);                    \
144                                                                              \
145 addToRunTimeSelectionTable(SmootherType, typeSmootherType, dictionary);
147 #define makeBlockSmoothers(smootherType)                                       \
148                                                                              \
149 makeBlockSmoother(blockScalarSmoother, smootherType##Scalar);                  \
150 makeBlockSmoother(blockVectorSmoother, smootherType##Vector);                  \
151 makeBlockSmoother(blockTensorSmoother, smootherType##Tensor);
154 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
156 #endif
158 // ************************************************************************* //