BUGFIX: Illegal use of uninitialised value (backport)
[foam-extend-3.2.git] / src / dynamicMesh / dynamicFvMesh / dynamicTopoFvMesh / fieldMapping / topoMapper.H
blob00b508e6acde0cb153d90b2992d34eca6333fa89
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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     topoMapper
28 Description
29     Class holds all necessary information for mapping fields associated with
30     dynamicTopoFvMesh and fvMesh.
32 Author
33     Sandeep Menon
34     University of Massachusetts Amherst
35     All rights reserved
37 SourceFiles
38     topoMapper.C
40 \*---------------------------------------------------------------------------*/
42 #ifndef topoMapper_H
43 #define topoMapper_H
45 #include "autoPtr.H"
46 #include "IOmanip.H"
47 #include "volFields.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 // Class forward declarations
55 class fluxCorrector;
56 class topoCellMapper;
57 class topoSurfaceMapper;
58 class topoBoundaryMeshMapper;
60 /*---------------------------------------------------------------------------*\
61                          Class topoMapper Declaration
62 \*---------------------------------------------------------------------------*/
64 class topoMapper
66     // Private data
68         //- Reference to fvMesh
69         const fvMesh& mesh_;
71         //- Reference to the options dictionary
72         const dictionary& dict_;
74     // Demand-driven private data
76         //- Cell mapper
77         mutable autoPtr<topoCellMapper> cellMap_;
79         //- Surface mapper
80         mutable autoPtr<topoSurfaceMapper> surfaceMap_;
82         //- Boundary mapper
83         mutable autoPtr<topoBoundaryMeshMapper> boundaryMap_;
85         //- Flux corrector
86         mutable autoPtr<fluxCorrector> fluxCorrector_;
88         // Stored gradients for mapping
89         mutable HashTable<autoPtr<volVectorField> > sGrads_;
90         mutable HashTable<autoPtr<volTensorField> > vGrads_;
92         //- Geometric information on the old mesh
93         mutable volVectorField* cellCentresPtr_;
95         //- Intersection weights
96         mutable List<scalarField> faceWeights_;
97         mutable List<scalarField> cellWeights_;
99         //- Intersection centres
100         mutable List<vectorField> faceCentres_;
101         mutable List<vectorField> cellCentres_;
103         //- Sizes / starts for mapping
104         mutable labelList cellSizes_;
105         mutable labelList cellStarts_;
106         mutable labelList faceSizes_;
107         mutable labelList faceStarts_;
108         mutable labelListList patchSizes_;
109         mutable labelListList patchStarts_;
111     // Private Member Functions
113         //- Disallow default bitwise copy construct
114         topoMapper(const topoMapper&);
116         //- Disallow default bitwise assignment
117         void operator=(const topoMapper&);
119         // Store gradients of volFields on the mesh
120         // prior to topology changes
121         template <class Type, class gradType>
122         void storeGradients
123         (
124             HashTable<autoPtr<gradType> >& gradTable
125         ) const;
127         //- Store gradients prior to mesh reset
128         void storeGradients() const;
130         //- Set geometric information
131         void storeGeometry() const;
133 public:
135     // Constructors
137         //- Construct from mesh and dictionary
138         topoMapper(const fvMesh& mesh, const dictionary& dict);
140     // Destructor
142         ~topoMapper();
144     // Member Functions
146         //- Return reference to the mesh
147         const fvMesh& mesh() const;
149         //- Return reference to objectRegistry storing fields.
150         const objectRegistry& thisDb() const;
152         //- Set mapping information
153         void setMapper(const mapPolyMesh& mpm) const;
155         //- Set face weighting information
156         void setFaceWeights
157         (
158             const Xfer<List<scalarField> >& weights,
159             const Xfer<List<vectorField> >& centres
160         ) const;
162         //- Set cell weighting information
163         void setCellWeights
164         (
165             const Xfer<List<scalarField> >& weights,
166             const Xfer<List<vectorField> >& centres
167         ) const;
169         //- Set cell / patch offset information
170         void setOffsets
171         (
172             const labelList& cellSizes,
173             const labelList& cellStarts,
174             const labelList& faceSizes,
175             const labelList& faceStarts,
176             const labelListList& patchSizes,
177             const labelListList& patchStarts
178         ) const;
180         //- Fetch face weights
181         const List<scalarField>& faceWeights() const;
183         //- Fetch cell weights
184         const List<scalarField>& cellWeights() const;
186         //- Fetch face centres
187         const List<vectorField>& faceCentres() const;
189         //- Fetch cell centres
190         const List<vectorField>& cellCentres() const;
192         //- Fetch cell sizes
193         const labelList& cellSizes() const;
195         //- Fetch face sizes
196         const labelList& faceSizes() const;
198         //- Fetch patch sizes
199         const labelListList& patchSizes() const;
201         //- Fetch cell starts
202         const labelList& cellStarts() const;
204         //- Fetch face starts
205         const labelList& faceStarts() const;
207         //- Fetch patch starts
208         const labelListList& patchStarts() const;
210         //- Store mesh information for the mapping stage
211         void storeMeshInformation() const;
213         //- Return non-const access to cell centres
214         volVectorField& volCentres() const;
216         //- Return stored cell centre information
217         const vectorField& internalCentres() const;
219         //- Return stored patch centre information
220         const vectorField& patchCentres(const label i) const;
222         //- Return names of stored scalar gradients
223         const wordList scalarGrads() const;
225         //- Return names of stored vector gradients
226         const wordList vectorGrads() const;
228         //- Fetch the gradient field
229         template <class Type>
230         Type& gradient(const word& name) const;
232         //- Correct fluxes after topology change
233         void correctFluxes() const;
235         //- Return volume mapper
236         const topoCellMapper& volMap() const;
238         //- Return surface mapper
239         const topoSurfaceMapper& surfaceMap() const;
241         //- Return boundary mapper
242         const topoBoundaryMeshMapper& boundaryMap() const;
244         //- Return flux-corrector
245         const fluxCorrector& surfaceFluxCorrector() const;
247         //- Clear out member data
248         void clear() const;
252 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
254 } // End namespace Foam
256 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
258 #ifdef NoRepository
259 #   include "topoMapperTemplates.C"
260 #endif
262 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
264 #endif
266 // ************************************************************************* //