Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / sampling / sampledSurface / sampledPatch / sampledPatch.H
blob61409188f09eb062c9e93d5022e2bf5cfb34ef9d
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     |
5     \\  /    A nd           | For copyright notice see file Copyright
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::sampledPatch
27 Description
28     A sampledSurface on a patch. Non-triangulated by default.
30 SourceFiles
31     sampledPatch.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef sampledPatch_H
36 #define sampledPatch_H
38 #include "sampledSurface.H"
39 #include "MeshedSurface.H"
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 namespace Foam
46 /*---------------------------------------------------------------------------*\
47                        Class sampledPatch Declaration
48 \*---------------------------------------------------------------------------*/
50 class sampledPatch
52     public MeshedSurface<face>,
53     public sampledSurface
55     //- Private typedefs for convenience
56         typedef MeshedSurface<face> MeshStorage;
58     // Private data
60         //- Name of patch
61         const word patchName_;
63         //- Triangulated faces or keep faces as is
64         bool triangulate_;
66         //- Track if the surface needs an update
67         mutable bool needsUpdate_;
69         //- Local patch face labels
70         labelList patchFaceLabels_;
72     // Private Member Functions
75         //- sample field on faces
76         template <class Type>
77         tmp<Field<Type> > sampleField
78         (
79             const GeometricField<Type, fvPatchField, volMesh>& vField
80         ) const;
83         template <class Type>
84         tmp<Field<Type> >
85         interpolateField(const interpolation<Type>&) const;
88         //- remap action on triangulation or cleanup
89         virtual void remapFaces(const UList<label>& faceMap);
91 public:
93     //- Runtime type information
94     TypeName("sampledPatch");
97     // Constructors
99         //- Construct from components
100         sampledPatch
101         (
102             const word& name,
103             const polyMesh& mesh,
104             const word& patchName,
105             const bool triangulate = false
106         );
108         //- Construct from dictionary
109         sampledPatch
110         (
111             const word& name,
112             const polyMesh& mesh,
113             const dictionary& dict
114         );
117     // Destructor
119         virtual ~sampledPatch();
122     // Member Functions
124         //- Does the surface need an update?
125         virtual bool needsUpdate() const;
127         //- Mark the surface as needing an update.
128         //  May also free up unneeded data.
129         //  Return false if surface was already marked as expired.
130         virtual bool expire();
132         //- Update the surface as required.
133         //  Do nothing (and return false) if no update was needed
134         virtual bool update();
137         const word patchName() const
138         {
139             return patchName_;
140         }
142         label patchIndex() const
143         {
144             return mesh().boundaryMesh().findPatchID(patchName_);
145         }
147         const labelList& patchFaceLabels() const
148         {
149             return patchFaceLabels_;
150         }
152         //- Points of surface
153         virtual const pointField& points() const
154         {
155             return MeshStorage::points();
156         }
158         //- Faces of surface
159         virtual const faceList& faces() const
160         {
161             return MeshStorage::faces();
162         }
165         //- sample field on surface
166         virtual tmp<scalarField> sample
167         (
168             const volScalarField&
169         ) const;
171         //- sample field on surface
172         virtual tmp<vectorField> sample
173         (
174             const volVectorField&
175         ) const;
177         //- sample field on surface
178         virtual tmp<sphericalTensorField> sample
179         (
180             const volSphericalTensorField&
181         ) const;
183         //- sample field on surface
184         virtual tmp<symmTensorField> sample
185         (
186             const volSymmTensorField&
187         ) const;
189         //- sample field on surface
190         virtual tmp<tensorField> sample
191         (
192             const volTensorField&
193         ) const;
196         //- interpolate field on surface
197         virtual tmp<scalarField> interpolate
198         (
199             const interpolation<scalar>&
200         ) const;
203         //- interpolate field on surface
204         virtual tmp<vectorField> interpolate
205         (
206             const interpolation<vector>&
207         ) const;
209         //- interpolate field on surface
210         virtual tmp<sphericalTensorField> interpolate
211         (
212             const interpolation<sphericalTensor>&
213         ) const;
215         //- interpolate field on surface
216         virtual tmp<symmTensorField> interpolate
217         (
218             const interpolation<symmTensor>&
219         ) const;
221         //- interpolate field on surface
222         virtual tmp<tensorField> interpolate
223         (
224             const interpolation<tensor>&
225         ) const;
227         //- Write
228         virtual void print(Ostream&) const;
232 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
234 } // End namespace Foam
236 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
238 #ifdef NoRepository
239 #   include "sampledPatchTemplates.C"
240 #endif
242 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
244 #endif
246 // ************************************************************************* //