Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / applications / utilities / postProcessing / miscellaneous / postChannel / channelIndex.H
blob864e5be3cba518c2fc1d124cbdba1e57607e0e61
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     Foam::channelIndex
27 Description
28     Does averaging of fields over layers of cells. Assumes layered mesh.
30 SourceFiles
31     channelIndex.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef channelIndex_H
36 #define channelIndex_H
38 #include "regionSplit.H"
39 #include "direction.H"
40 #include "scalarField.H"
41 #include "polyMesh.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
49 /*---------------------------------------------------------------------------*\
50                            Class channelIndex Declaration
51 \*---------------------------------------------------------------------------*/
53 class channelIndex
56     // Private data
58         static const NamedEnum<vector::components, 3> vectorComponentsNames_;
60         //- Is mesh symmetric
61         const bool symmetric_;
63         //- direction to sort
64         const direction dir_;
66         //- Per cell the global region
67         autoPtr<regionSplit> cellRegion_;
69         //- Per global region the number of cells (scalarField so we can use
70         //  field algebra)
71         scalarField regionCount_;
73         //- From sorted region back to unsorted global region
74         labelList sortMap_;
76         //- Sorted component of cell centres
77         scalarField y_;
81     // Private Member Functions
83         void walkOppositeFaces
84         (
85             const polyMesh& mesh,
86             const labelList& startFaces,
87             boolList& blockedFace
88         );
90         void calcLayeredRegions
91         (
92             const polyMesh& mesh,
93             const labelList& startFaces
94         );
96         //- Disallow default bitwise copy construct and assignment
97         channelIndex(const channelIndex&);
98         void operator=(const channelIndex&);
101 public:
103     // Constructors
105         //- Construct from dictionary
106         channelIndex(const polyMesh&, const dictionary&);
108         //- Construct from supplied starting faces
109         channelIndex
110         (
111             const polyMesh& mesh,
112             const labelList& startFaces,
113             const bool symmetric,
114             const direction dir
115         );
118     // Member Functions
120         // Access
122             //- Sum field per region
123             template<class T>
124             Field<T> regionSum(const Field<T>& cellField) const;
126             //- collapse a field to a line
127             template<class T>
128             Field<T> collapse
129             (
130                 const Field<T>& vsf,
131                 const bool asymmetric=false
132             ) const;
134             //- return the field of Y locations from the cell centres
135             const scalarField& y() const
136             {
137                 return y_;
138             }
143 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
145 } // End namespace Foam
147 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
149 #ifdef NoRepository
150 #   include "channelIndexTemplates.C"
151 #endif
153 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
155 #endif
157 // ************************************************************************* //