BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / sampling / sampledSurface / sampledPlane / sampledPlane.H
blobb555ffdd189cf2f80d0190dab28087c08f84847a
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::sampledPlane
27 Description
28     A sampledSurface defined by a cuttingPlane. Always triangulated.
30 Note
31     Does not actually cut until update() called.
33 SourceFiles
34     sampledPlane.C
36 \*---------------------------------------------------------------------------*/
38 #ifndef sampledPlane_H
39 #define sampledPlane_H
41 #include "sampledSurface.H"
42 #include "cuttingPlane.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
49 /*---------------------------------------------------------------------------*\
50                         Class sampledPlane Declaration
51 \*---------------------------------------------------------------------------*/
53 class sampledPlane
55     public sampledSurface,
56     public cuttingPlane
58     // Private data
60         //- If restricted to zones, name of this zone or a regular expression
61         keyType zoneKey_;
63         //- Track if the surface needs an update
64         mutable bool needsUpdate_;
66     // Private Member Functions
68         //- sample field on faces
69         template <class Type>
70         tmp<Field<Type> > sampleField
71         (
72             const GeometricField<Type, fvPatchField, volMesh>& vField
73         ) const;
76         template <class Type>
77         tmp<Field<Type> >
78         interpolateField(const interpolation<Type>&) const;
81 public:
83     //- Runtime type information
84     TypeName("sampledPlane");
87     // Constructors
89         //- Construct from components
90         sampledPlane
91         (
92             const word& name,
93             const polyMesh& mesh,
94             const plane& planeDesc,
95             const keyType& zoneKey = word::null
96         );
98         //- Construct from dictionary
99         sampledPlane
100         (
101             const word& name,
102             const polyMesh& mesh,
103             const dictionary& dict
104         );
107     //- Destructor
108     virtual ~sampledPlane();
111     // Member Functions
113         //- Does the surface need an update?
114         virtual bool needsUpdate() const;
116         //- Mark the surface as needing an update.
117         //  May also free up unneeded data.
118         //  Return false if surface was already marked as expired.
119         virtual bool expire();
121         //- Update the surface as required.
122         //  Do nothing (and return false) if no update was needed
123         virtual bool update();
126         //- Points of surface
127         virtual const pointField& points() const
128         {
129             return cuttingPlane::points();
130         }
132         //- Faces of surface
133         virtual const faceList& faces() const
134         {
135             return cuttingPlane::faces();
136         }
138         //- For every face original cell in mesh
139         const labelList& meshCells() const
140         {
141             return cuttingPlane::cutCells();
142         }
144         //- sample field on surface
145         virtual tmp<scalarField> sample
146         (
147             const volScalarField&
148         ) const;
151         //- sample field on surface
152         virtual tmp<vectorField> sample
153         (
154             const volVectorField&
155         ) const;
157         //- sample field on surface
158         virtual tmp<sphericalTensorField> sample
159         (
160             const volSphericalTensorField&
161         ) const;
163         //- sample field on surface
164         virtual tmp<symmTensorField> sample
165         (
166             const volSymmTensorField&
167         ) const;
169         //- sample field on surface
170         virtual tmp<tensorField> sample
171         (
172             const volTensorField&
173         ) const;
176         //- interpolate field on surface
177         virtual tmp<scalarField> interpolate
178         (
179             const interpolation<scalar>&
180         ) const;
183         //- interpolate field on surface
184         virtual tmp<vectorField> interpolate
185         (
186             const interpolation<vector>&
187         ) const;
189         //- interpolate field on surface
190         virtual tmp<sphericalTensorField> interpolate
191         (
192             const interpolation<sphericalTensor>&
193         ) const;
195         //- interpolate field on surface
196         virtual tmp<symmTensorField> interpolate
197         (
198             const interpolation<symmTensor>&
199         ) const;
201         //- interpolate field on surface
202         virtual tmp<tensorField> interpolate
203         (
204             const interpolation<tensor>&
205         ) const;
207         //- Write
208         virtual void print(Ostream&) const;
212 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
214 } // End namespace Foam
216 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
218 #ifdef NoRepository
219 #   include "sampledPlaneTemplates.C"
220 #endif
222 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
224 #endif
226 // ************************************************************************* //