ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / sampling / sampledSurface / thresholdCellFaces / sampledThresholdCellFaces.H
blob5cfd076d1edb35782ef39de0ad77ee335d1eed2d
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::sampledThresholdCellFaces
27 Description
28     A sampledSurface defined by the cell faces corresponding to a threshold
29     value.
31 SourceFiles
32     sampledThresholdCellFaces.C
34 \*---------------------------------------------------------------------------*/
36 #ifndef sampledThresholdCellFaces_H
37 #define sampledThresholdCellFaces_H
39 #include "sampledSurface.H"
40 #include "MeshedSurface.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                     Class sampledThresholdCellFaces Declaration
49 \*---------------------------------------------------------------------------*/
51 class sampledThresholdCellFaces
53     public sampledSurface,
54     public MeshedSurface<face>
56     //- Private typedefs for convenience
57         typedef MeshedSurface<face> MeshStorage;
59     // Private data
61         //- Field to get isoSurface of
62         const word fieldName_;
64         //- Threshold value
65         const scalar lowerThreshold_;
67         //- Threshold value
68         const scalar upperThreshold_;
70         //- If restricted to zones, name of this zone or a regular expression
71         keyType zoneKey_;
73         //- Triangulated faces or keep faces as is
74         bool triangulate_;
76         // Recreated for every time-step
78         //- Time at last call, also track it surface needs an update
79         mutable label prevTimeIndex_;
81         //- For every face the original cell in mesh
82         mutable labelList meshCells_;
85     // Private Member Functions
87         //- Create surface (if time has changed)
88         //  Do nothing (and return false) if no update was needed
89         bool updateGeometry() const;
91         //- sample field on faces
92         template <class Type>
93         tmp<Field<Type> > sampleField
94         (
95             const GeometricField<Type, fvPatchField, volMesh>& vField
96         ) const;
99         template <class Type>
100         tmp<Field<Type> >
101         interpolateField(const interpolation<Type>&) const;
104 public:
106     //- Runtime type information
107     TypeName("sampledThresholdCellFaces");
110     // Constructors
112         //- Construct from dictionary
113         sampledThresholdCellFaces
114         (
115             const word& name,
116             const polyMesh&,
117             const dictionary&
118         );
121     //- Destructor
122     virtual ~sampledThresholdCellFaces();
125     // Member Functions
127         //- Does the surface need an update?
128         virtual bool needsUpdate() const;
130         //- Mark the surface as needing an update.
131         //  May also free up unneeded data.
132         //  Return false if surface was already marked as expired.
133         virtual bool expire();
135         //- Update the surface as required.
136         //  Do nothing (and return false) if no update was needed
137         virtual bool update();
139         //- Points of surface
140         virtual const pointField& points() const
141         {
142             return MeshStorage::points();
143         }
145         //- Faces of surface
146         virtual const faceList& faces() const
147         {
148             return MeshStorage::faces();
149         }
151         //- sample field on surface
152         virtual tmp<scalarField> sample(const volScalarField&) const;
154         //- sample field on surface
155         virtual tmp<vectorField> sample( const volVectorField&) 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(const volSymmTensorField&) const;
166         //- sample field on surface
167         virtual tmp<tensorField> sample
168         (
169             const volTensorField&
170         ) const;
172         //- interpolate field on surface
173         virtual tmp<scalarField> interpolate
174         (
175             const interpolation<scalar>&
176         ) const;
178         //- interpolate field on surface
179         virtual tmp<vectorField> interpolate
180         (
181             const interpolation<vector>&
182         ) const;
184         //- interpolate field on surface
185         virtual tmp<sphericalTensorField> interpolate
186         (
187             const interpolation<sphericalTensor>&
188         ) const;
190         //- interpolate field on surface
191         virtual tmp<symmTensorField> interpolate
192         (
193             const interpolation<symmTensor>&
194         ) const;
196         //- interpolate field on surface
197         virtual tmp<tensorField> interpolate
198         (
199             const interpolation<tensor>&
200         ) const;
202         //- Write
203         virtual void print(Ostream&) const;
207 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
209 } // End namespace Foam
211 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
213 #ifdef NoRepository
214 #   include "sampledThresholdCellFacesTemplates.C"
215 #endif
217 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
219 #endif
221 // ************************************************************************* //