BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / sampling / sampledSurface / sampledSurfaces / sampledSurfaces.H
blob0904c92ef0d835bce30ead29c2a9beeff08abd6d
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::sampledSurfaces
27 Description
28     Set of surfaces to sample.
30     The write() method is used to sample and write files.
32 SourceFiles
33     sampledSurfaces.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef sampledSurfaces_H
38 #define sampledSurfaces_H
40 #include "sampledSurface.H"
41 #include "surfaceWriter.H"
42 #include "volFieldsFwd.H"
43 #include "wordReList.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 class fvMesh;
51 class dictionary;
53 /*---------------------------------------------------------------------------*\
54                        Class sampledSurfaces Declaration
55 \*---------------------------------------------------------------------------*/
57 class sampledSurfaces
59     public PtrList<sampledSurface>
61     // Private classes
63         //- Class used for grouping field types
64         template<class Type>
65         class fieldGroup
66         :
67             public DynamicList<word>
68         {
69         public:
71             //- Construct null
72             fieldGroup()
73             :
74                 DynamicList<word>(0)
75             {}
76         };
79         //- Class used for surface merging information
80         class mergeInfo
81         {
82         public:
83             pointField points;
84             faceList   faces;
85             labelList  pointsMap;
87             //- Clear all storage
88             void clear()
89             {
90                 points.clear();
91                 faces.clear();
92                 pointsMap.clear();
93             }
94         };
97     // Static data members
99         //- output verbosity
100         static bool verbose_;
102         //- Tolerance for merging points (fraction of mesh bounding box)
103         static scalar mergeTol_;
105     // Private data
107         //- Name of this set of surfaces,
108         //  Also used as the name of the sampledSurfaces directory.
109         const word name_;
111         //- Const reference to fvMesh
112         const fvMesh& mesh_;
114         //- Load fields from files (not from objectRegistry)
115         const bool loadFromFiles_;
117         //- output path
118         fileName outputPath_;
121         // Read from dictonary
123             //- Names of fields to sample
124             wordReList fieldSelection_;
126             //- Interpolation scheme to use
127             word interpolationScheme_;
129         // surfaces
131             //- Information for merging surfaces
132             List<mergeInfo> mergeList_;
135         // Calculated
137             //- Surface formatter
138             autoPtr<surfaceWriter> formatter_;
140             //- Categorized scalar/vector/tensor fields
141             fieldGroup<scalar> scalarFields_;
142             fieldGroup<vector> vectorFields_;
143             fieldGroup<sphericalTensor> sphericalTensorFields_;
144             fieldGroup<symmTensor> symmTensorFields_;
145             fieldGroup<tensor> tensorFields_;
148     // Private Member Functions
150         //- Clear old field groups
151         void clearFieldGroups();
153         //- Append fieldName to the appropriate group
154         label appendFieldGroup(const word& fieldName, const word& fieldType);
156         //- Classify field types, returns the number of fields
157         label classifyFields();
159         //- Write geometry only
160         void writeGeometry() const;
162         //- Sample and write a particular volume field
163         template<class Type>
164         void sampleAndWrite(const GeometricField<Type, fvPatchField, volMesh>&);
166         //- Sample and write all the fields of the given type
167         template<class Type>
168         void sampleAndWrite(fieldGroup<Type>&);
170         //- Disallow default bitwise copy construct and assignment
171         sampledSurfaces(const sampledSurfaces&);
172         void operator=(const sampledSurfaces&);
175 public:
177     //- Runtime type information
178     TypeName("surfaces");
181     // Constructors
183         //- Construct for given objectRegistry and dictionary
184         //  allow the possibility to load fields from files
185         sampledSurfaces
186         (
187             const word& name,
188             const objectRegistry&,
189             const dictionary&,
190             const bool loadFromFiles = false
191         );
194     //- Destructor
195     virtual ~sampledSurfaces();
198     // Member Functions
200         //- Does any of the surfaces need an update?
201         virtual bool needsUpdate() const;
203         //- Mark the surfaces as needing an update.
204         //  May also free up unneeded data.
205         //  Return false if all surfaces were already marked as expired.
206         virtual bool expire();
208         //- Update the surfaces as required and merge surface points (parallel).
209         //  Return false if no surfaces required an update.
210         virtual bool update();
213         //- Return name of the set of surfaces
214         virtual const word& name() const
215         {
216             return name_;
217         }
219         //- set verbosity level
220         void verbose(const bool verbosity = true);
222         //- Execute, currently does nothing
223         virtual void execute();
225         //- Execute at the final time-loop, currently does nothing
226         virtual void end();
228         //- Sample and write
229         virtual void write();
231         //- Read the sampledSurfaces dictionary
232         virtual void read(const dictionary&);
234         //- Update for changes of mesh - expires the surfaces
235         virtual void updateMesh(const mapPolyMesh&);
237         //- Update for mesh point-motion - expires the surfaces
238         virtual void movePoints(const pointField&);
240         //- Update for changes of mesh due to readUpdate - expires the surfaces
241         virtual void readUpdate(const polyMesh::readUpdateState state);
246 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
248 } // End namespace Foam
250 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
252 #ifdef NoRepository
253 #   include "sampledSurfacesTemplates.C"
254 #endif
256 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
258 #endif
260 // ************************************************************************* //