initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / finiteVolume / fvMesh / extendedStencil / cellToFace / fullStencils / cellToFaceStencil.H
blobe577a857d51ee0371b6c86b8ff9fd6de3f1f41e7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     Foam::cellToFaceStencil
28 Description
29     baseclass for extended cell-to-facel stencils (face values from
30     neighbouring cells)
32 SourceFiles
33     faceStencil.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef cellToFaceStencil_H
38 #define cellToFaceStencil_H
40 #include "globalIndex.H"
41 #include "boolList.H"
42 #include "HashSet.H"
43 #include "indirectPrimitivePatch.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 class polyMesh;
52 /*---------------------------------------------------------------------------*\
53                            Class cellToFaceStencil Declaration
54 \*---------------------------------------------------------------------------*/
56 class cellToFaceStencil
58     public labelListList
60     // Private data
62         const polyMesh& mesh_;
64         //- Global numbering for cells and boundary faces
65         const globalIndex globalNumbering_;
68     // Private Member Functions
70         //- Disallow default bitwise copy construct
71         cellToFaceStencil(const cellToFaceStencil&);
73         //- Disallow default bitwise assignment
74         void operator=(const cellToFaceStencil&);
77 protected:
79         //- Merge two lists.
80         static void merge
81         (
82             const label,
83             const label,
84             const labelList&,
85             labelList&
86         );
88         //- Merge two lists.
89         static void merge(const label, const labelList&, labelList&);
91         //- Valid boundary faces (not empty and not coupled)
92         void validBoundaryFaces(boolList& isValidBFace) const;
94         //- Return patch of all coupled faces.
95         autoPtr<indirectPrimitivePatch> allCoupledFacesPatch() const;
97         //- Combine operator for labelLists
98         class unionEqOp
99         {
100             public:
101             void operator()( labelList& x, const labelList& y ) const;
102         };
104         //- Collect cell neighbours of faces in global numbering
105         void insertFaceCells
106         (
107             const label exclude0,
108             const label exclude1,
109             const boolList& nonEmptyFace,
110             const labelList& faceLabels,
111             labelHashSet& globals
112         ) const;
114         //- Collect cell neighbours of faces in global numbering
115         labelList calcFaceCells
116         (
117             const boolList& nonEmptyFace,
118             const labelList& faceLabels,
119             labelHashSet& globals
120         ) const;
123         //- Collect cell neighbours into extended stencil
124         void calcFaceStencil
125         (
126             const labelListList& globalCellCells,
127             labelListList& faceStencil
128         ) const;
131 public:
133     // Constructors
135         //- Construct from mesh
136         explicit cellToFaceStencil(const polyMesh&);
139     // Member Functions
141         const polyMesh& mesh() const
142         {
143             return mesh_;
144         }
146         //- Global numbering for cells and boundary faces
147         const globalIndex& globalNumbering() const
148         {
149             return globalNumbering_;
150         }
155 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
157 } // End namespace Foam
159 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
161 #endif
163 // ************************************************************************* //