Transferred copyright to the OpenFOAM Foundation
[OpenFOAM-2.0.x.git] / src / finiteVolume / fvMesh / extendedStencil / cellToFace / fullStencils / cellToFaceStencil.H
blobd29130b20c3bcb77c7f48bae1a1a58815504c400
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
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.
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.
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/>.
24 Class
25     Foam::cellToFaceStencil
27 Description
28     Base class for extended cell-to-face stencils (face values from
29     neighbouring cells)
31 SourceFiles
32     faceStencil.C
34 \*---------------------------------------------------------------------------*/
36 #ifndef cellToFaceStencil_H
37 #define cellToFaceStencil_H
39 #include "globalIndex.H"
40 #include "boolList.H"
41 #include "HashSet.H"
42 #include "indirectPrimitivePatch.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 class polyMesh;
51 /*---------------------------------------------------------------------------*\
52                       Class cellToFaceStencil Declaration
53 \*---------------------------------------------------------------------------*/
55 class cellToFaceStencil
57     public labelListList
59     // Private data
61         const polyMesh& mesh_;
63         //- Global numbering for cells and boundary faces
64         const globalIndex globalNumbering_;
67 protected:
69         //- Merge two lists.
70         static void merge
71         (
72             const label,
73             const label,
74             const labelList&,
75             labelList&
76         );
78         //- Merge two lists.
79         static void merge(const label, const labelList&, labelList&);
81         //- Valid boundary faces (not empty and not coupled)
82         void validBoundaryFaces(boolList& isValidBFace) const;
84         //- Return patch of all coupled faces.
85         autoPtr<indirectPrimitivePatch> allCoupledFacesPatch() const;
87         //- Combine operator for labelLists
88         class unionEqOp
89         {
90             public:
91             void operator()( labelList& x, const labelList& y ) const;
92         };
94         //- Collect cell neighbours of faces in global numbering
95         void insertFaceCells
96         (
97             const label exclude0,
98             const label exclude1,
99             const boolList& nonEmptyFace,
100             const labelList& faceLabels,
101             labelHashSet& globals
102         ) const;
104         //- Collect cell neighbours of faces in global numbering
105         labelList calcFaceCells
106         (
107             const boolList& nonEmptyFace,
108             const labelList& faceLabels,
109             labelHashSet& globals
110         ) const;
113         //- Collect cell neighbours into extended stencil
114         void calcFaceStencil
115         (
116             const labelListList& globalCellCells,
117             labelListList& faceStencil
118         ) const;
121 public:
123     // Constructors
125         //- Construct from mesh
126         explicit cellToFaceStencil(const polyMesh&);
129     // Member Functions
131         const polyMesh& mesh() const
132         {
133             return mesh_;
134         }
136         //- Global numbering for cells and boundary faces
137         const globalIndex& globalNumbering() const
138         {
139             return globalNumbering_;
140         }
145 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
147 } // End namespace Foam
149 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
151 #endif
153 // ************************************************************************* //