Merge remote-tracking branch 'origin/nr/multiSolverFix' into nextRelease
[foam-extend-3.2.git] / src / sampling / sampledSurface / sampledPatch / sampledPatch.H
blob36519e2c2597a029d905c56d8e48fcacb912974a
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     Foam::sampledPatch
28 Description
29     A sampledSurface on a patch. Non-triangulated by default.
31 SourceFiles
32     sampledPatch.C
34 \*---------------------------------------------------------------------------*/
36 #ifndef sampledPatch_H
37 #define sampledPatch_H
39 #include "sampledSurface.H"
40 #include "MeshedSurface.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                        Class sampledPatch Declaration
49 \*---------------------------------------------------------------------------*/
51 class sampledPatch
53     public MeshedSurface<face>,
54     public sampledSurface
56     //- Private typedefs for convenience
57         typedef MeshedSurface<face> MeshStorage;
59     // Private data
61         //- Name of patch
62         const word patchName_;
64         //- Triangulated faces or keep faces as is
65         bool triangulate_;
67         //- Track if the surface needs an update
68         mutable bool needsUpdate_;
70         //- Local patch face labels
71         labelList patchFaceLabels_;
73     // Private Member Functions
76         //- sample field on faces
77         template <class Type>
78         tmp<Field<Type> > sampleField
79         (
80             const GeometricField<Type, fvPatchField, volMesh>& vField
81         ) const;
84         template <class Type>
85         tmp<Field<Type> >
86         interpolateField(const interpolation<Type>&) const;
89         //- remap action on triangulation or cleanup
90         virtual void remapFaces(const UList<label>& faceMap);
92 public:
94     //- Runtime type information
95     TypeName("sampledPatch");
98     // Constructors
100         //- Construct from components
101         sampledPatch
102         (
103             const word& name,
104             const polyMesh& mesh,
105             const word& patchName,
106             const bool triangulate = false
107         );
109         //- Construct from dictionary
110         sampledPatch
111         (
112             const word& name,
113             const polyMesh& mesh,
114             const dictionary& dict
115         );
118     // Destructor
120         virtual ~sampledPatch();
123     // Member Functions
125         //- Does the surface need an update?
126         virtual bool needsUpdate() const;
128         //- Mark the surface as needing an update.
129         //  May also free up unneeded data.
130         //  Return false if surface was already marked as expired.
131         virtual bool expire();
133         //- Update the surface as required.
134         //  Do nothing (and return false) if no update was needed
135         virtual bool update();
138         const word patchName() const
139         {
140             return patchName_;
141         }
143         label patchIndex() const
144         {
145             return mesh().boundaryMesh().findPatchID(patchName_);
146         }
148         const labelList& patchFaceLabels() const
149         {
150             return patchFaceLabels_;
151         }
153         //- Points of surface
154         virtual const pointField& points() const
155         {
156             return MeshStorage::points();
157         }
159         //- Faces of surface
160         virtual const faceList& faces() const
161         {
162             return MeshStorage::faces();
163         }
166         //- sample field on surface
167         virtual tmp<scalarField> sample
168         (
169             const volScalarField&
170         ) const;
172         //- sample field on surface
173         virtual tmp<vectorField> sample
174         (
175             const volVectorField&
176         ) const;
178         //- sample field on surface
179         virtual tmp<sphericalTensorField> sample
180         (
181             const volSphericalTensorField&
182         ) const;
184         //- sample field on surface
185         virtual tmp<symmTensorField> sample
186         (
187             const volSymmTensorField&
188         ) const;
190         //- sample field on surface
191         virtual tmp<tensorField> sample
192         (
193             const volTensorField&
194         ) const;
197         //- interpolate field on surface
198         virtual tmp<scalarField> interpolate
199         (
200             const interpolation<scalar>&
201         ) const;
204         //- interpolate field on surface
205         virtual tmp<vectorField> interpolate
206         (
207             const interpolation<vector>&
208         ) const;
210         //- interpolate field on surface
211         virtual tmp<sphericalTensorField> interpolate
212         (
213             const interpolation<sphericalTensor>&
214         ) const;
216         //- interpolate field on surface
217         virtual tmp<symmTensorField> interpolate
218         (
219             const interpolation<symmTensor>&
220         ) const;
222         //- interpolate field on surface
223         virtual tmp<tensorField> interpolate
224         (
225             const interpolation<tensor>&
226         ) const;
228         //- Write
229         virtual void print(Ostream&) const;
233 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
235 } // End namespace Foam
237 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
239 #ifdef NoRepository
240 #   include "sampledPatchTemplates.C"
241 #endif
243 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
245 #endif
247 // ************************************************************************* //