Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / sampling / probes / probes.H
blob8a84ec892dcb07eb5335b417567ffb79706c4abf
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
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::probes
27 Description
28     Set of locations to sample.
30     Call write() to sample and write files.
32 SourceFiles
33     probes.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef probes_H
38 #define probes_H
40 #include "HashPtrTable.H"
41 #include "OFstream.H"
42 #include "polyMesh.H"
43 #include "pointField.H"
44 #include "volFieldsFwd.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 // Forward declaration of classes
52 class objectRegistry;
53 class dictionary;
54 class fvMesh;
55 class mapPolyMesh;
57 /*---------------------------------------------------------------------------*\
58                           Class probes Declaration
59 \*---------------------------------------------------------------------------*/
61 class probes
63     // Private classes
65         //- Class used for grouping field types
66         template<class Type>
67         class fieldGroup
68         :
69             public wordList
70         {
71         public:
72             //- Construct null
73             fieldGroup()
74             :
75                 wordList()
76             {}
78             //- Construct for a list of field names
79             fieldGroup(const wordList& fieldNames)
80             :
81                 wordList(fieldNames)
82             {}
83         };
86     // Private data
88         //- Name of this set of probes,
89         //  Also used as the name of the probes directory.
90         word name_;
92         //- Const reference to objectRegistry
93         const objectRegistry& obr_;
95         //- Load fields from files (not from objectRegistry)
96         bool loadFromFiles_;
99         // Read from dictonary
101             //- Names of fields to probe
102             wordList fieldNames_;
104             //- Locations to probe
105             vectorField probeLocations_;
108         // Calculated
110             //- Categorized scalar/vector/tensor fields
111             fieldGroup<scalar> scalarFields_;
112             fieldGroup<vector> vectorFields_;
113             fieldGroup<sphericalTensor> sphericalTensorFields_;
114             fieldGroup<symmTensor> symmTensorFields_;
115             fieldGroup<tensor> tensorFields_;
117             // Cells to be probed (obtained from the locations)
118             labelList cellList_;
120             //- Current open files
121             HashPtrTable<OFstream> probeFilePtrs_;
124     // Private Member Functions
126         //- Find cells containing probes
127         void findCells(const fvMesh&);
129         //- classify field types, return true if nFields > 0
130         bool checkFieldTypes();
132         //- Find the fields in the list of the given type, return count
133         template<class Type>
134         label countFields
135         (
136             fieldGroup<Type>& fieldList,
137             const wordList& fieldTypes
138         ) const;
140         //- Sample and write a particular volume field
141         template<class Type>
142         void sampleAndWrite
143         (
144             const GeometricField<Type, fvPatchField, volMesh>&
145         );
147         //- Sample and write all the fields of the given type
148         template <class Type>
149         void sampleAndWrite(const fieldGroup<Type>&);
151         //- Disallow default bitwise copy construct
152         probes(const probes&);
154         //- Disallow default bitwise assignment
155         void operator=(const probes&);
158 public:
160     //- Runtime type information
161     TypeName("probes");
164     // Constructors
166         //- Construct for given objectRegistry and dictionary.
167         //  Allow the possibility to load fields from files
168         probes
169         (
170             const word& name,
171             const objectRegistry&,
172             const dictionary&,
173             const bool loadFromFiles = false
174         );
177     // Destructor
179         virtual ~probes();
182     // Member Functions
184         //- Return name of the set of probes
185         virtual const word& name() const
186         {
187             return name_;
188         }
190         //- Return names of fields to probe
191         virtual const wordList& fieldNames() const
192         {
193             return fieldNames_;
194         }
196         //- Return locations to probe
197         virtual const vectorField& probeLocations() const
198         {
199             return probeLocations_;
200         }
202         //- Cells to be probed (obtained from the locations)
203         const labelList& cells() const
204         {
205             return cellList_;
206         }
208         //- Execute, currently does nothing
209         virtual void execute();
211         //- Execute at the final time-loop, currently does nothing
212         virtual void end();
214         //- Sample and write
215         virtual void write();
217         //- Read the probes
218         virtual void read(const dictionary&);
220         //- Update for changes of mesh
221         virtual void updateMesh(const mapPolyMesh&)
222         {}
224         //- Update for changes of mesh
225         virtual void movePoints(const pointField&)
226         {}
228         //- Update for changes of mesh due to readUpdate
229         virtual void readUpdate(const polyMesh::readUpdateState state)
230         {}
232         //- Sample a volume field at all locations
233         template<class Type>
234         tmp<Field<Type> > sample
235         (
236             const GeometricField<Type, fvPatchField, volMesh>&
237         ) const;
239         //- Sample a single field on all sample locations
240         template <class Type>
241         tmp<Field<Type> > sample(const word& fieldName) const;
245 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
247 } // End namespace Foam
249 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
251 #ifdef NoRepository
252 #   include "probesTemplates.C"
253 #endif
255 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
257 #endif
259 // ************************************************************************* //