volFieldValue.H
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2011-2017 OpenFOAM Foundation
9 Copyright (C) 2016-2021 OpenCFD Ltd.
10-------------------------------------------------------------------------------
11License
12 This file is part of OpenFOAM.
13
14 OpenFOAM is free software: you can redistribute it and/or modify it
15 under the terms of the GNU General Public License as published by
16 the Free Software Foundation, either version 3 of the License, or
17 (at your option) any later version.
18
19 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 for more details.
23
24 You should have received a copy of the GNU General Public License
25 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26
27Class
28 Foam::functionObjects::fieldValues::volFieldValue
29
30Group
31 grpFieldFunctionObjects
32
33Description
34 Provides a 'volRegion' specialization of the \c fieldValue function object.
35
36 Given a list of user-specified fields and a 'volRegion', a number of
37 operations can be performed, such as sums, averages and integrations.
38
39Usage
40 Minimal example by using \c system/controlDict.functions:
41 \verbatim
42 volFieldValue1
43 {
44 // Mandatory entries (unmodifiable)
45 type volFieldValue;
46 libs (fieldFunctionObjects);
47
48 // Mandatory entries (runtime modifiable)
49 fields (<field1> <field2> ... <fieldN>);
50 operation <operationType>;
51 regionType <volRegion>;
52
53 // Optional entries (runtime modifiable)
54 postOperation none;
55 weightField alpha1;
56
57 // Optional (inherited) entries
58 ...
59 }
60 \endverbatim
61
62 where the entries mean:
63 \table
64 Property | Description | Type | Req'd | Dflt
65 type | Type name: volFieldValue | word | yes | -
66 libs | Library name: fieldFunctionObjects | word | yes | -
67 fields | Names of operand fields | wordList | yes | -
68 regionType | Face regionType: see below | word | yes | -
69 name | Name for regionType | word | yes | -
70 operation | Operation type: see below | word | yes | -
71 postOperation | Post-operation type: see below | word | no | none
72 weightField | Name of field to apply weighting | word | maybe |
73 weightFields | Names of fields to apply weighting | wordList | maybe |
74 \endtable
75
76 The inherited entries are elaborated in:
77 - \link fieldValue.H \endlink
78 - \link volRegion.H \endlink
79
80 Options for the \c regionType entry:
81 \plaintable
82 cellZone | requires a 'name' entry to specify the cellZone
83 all | all cells
84 \endplaintable
85
86 Options for the \c operation entry:
87 \plaintable
88 none | No operation
89 min | Minimum
90 max | Maximum
91 sum | Sum
92 sumMag | Sum of component magnitudes
93 average | Ensemble average
94 volAverage | Volume weighted average
95 volIntegrate | Volume integral
96 CoV | Coefficient of variation: standard deviation/mean
97 weightedSum | Weighted sum
98 weightedAverage | Weighted average
99 weightedVolAverage | Weighted volume average
100 weightedVolIntegrate | Weighted volume integral
101 \endplaintable
102
103 Options for the \c postOperation entry:
104 \plaintable
105 none | No additional operation after calculation
106 mag | Component-wise \c mag() after normal operation
107 sqrt | Component-wise \c sqrt() after normal operation
108 \endplaintable
109
110 Usage by the \c postProcess utility is not available.
111
112See also
113 - Foam::functionObject
114 - Foam::functionObjects::fieldValues::fieldValue
115 - Foam::functionObjects::volRegion
116
117SourceFiles
118 volFieldValue.C
119 volFieldValueTemplates.C
120
121\*---------------------------------------------------------------------------*/
122
123#ifndef functionObjects_volFieldValue_H
124#define functionObjects_volFieldValue_H
125
126#include "fieldValue.H"
127#include "volRegion.H"
128
129// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
130
131namespace Foam
132{
133namespace functionObjects
134{
135namespace fieldValues
136{
137
138/*---------------------------------------------------------------------------*\
139 Class volFieldValue Declaration
140\*---------------------------------------------------------------------------*/
141
142class volFieldValue
143:
144 public fieldValue,
145 public volRegion
146{
147public:
148
149 // Public Data Types
150
151 //- Bitmask values for operation variants
153 {
154 typeBase = 0,
155 typeScalar = 0x100,
156 typeWeighted = 0x200,
157 typeAbsolute = 0x400,
158 };
159
160 //- Operation type enumeration
161 enum operationType
162 {
163 // Normal operations
164
165 opNone = 0,
166 opMin,
167 opMax,
168 opSum,
169 opSumMag,
170 opAverage,
173 opCoV,
174
175 // Weighted variants
176
179
182
185
188
189 // Variants using absolute weighting
190 };
191
192 //- Operation type names
193 static const Enum<operationType> operationTypeNames_;
194
195
196 //- Post-operation type enumeration
198 {
199 postOpNone,
200 postOpMag,
202 };
203
204 //- Operation type names
205 static const Enum<postOperationType> postOperationTypeNames_;
206
207
208protected:
209
210 // Protected Data
211
212 //- Operation to apply to values
214
215 //- Optional post-evaluation operation
217
218 //- Weight field name(s) - optional
220
221
222 // Protected Member Functions
223
224 //- True if the operation needs the cell-volume
225 bool usesVol() const noexcept;
226
227 //- True if the operation variant uses mag
228 inline bool is_magOp() const noexcept;
229
230 //- True if the operation variant uses a weight-field
231 inline bool is_weightedOp() const noexcept;
232
233 //- True if field is non-empty on any processor.
234 inline bool canWeight(const scalarField& fld) const;
235
236 //- Return true if the field name is valid
237 template<class Type>
238 bool validField(const word& fieldName) const;
239
240 //- Insert field values into values list
241 template<class Type>
242 tmp<Field<Type>> getFieldValues
243 (
244 const word& fieldName,
245 const bool mandatory = false
246 ) const;
247
248 //- Apply the 'operation' to the values
249 template<class Type>
250 Type processValues
251 (
252 const Field<Type>& values,
253 const scalarField& V,
254 const scalarField& weightField
255 ) const;
256
257 //- Helper function to output field values
258 label writeAll
259 (
260 const scalarField& V,
261 const scalarField& weightField
262 );
263
264 //- Templated helper function to output field values
265 template<class Type>
266 bool writeValues
267 (
268 const word& fieldName,
269 const scalarField& V,
270 const scalarField& weightField
271 );
272
273 //- Filter a field according to cellIds
274 template<class Type>
275 tmp<Field<Type>> filterField(const Field<Type>& field) const;
276
277 //- Output file header information
278 virtual void writeFileHeader(Ostream& os) const;
279
280
281public:
282
283 //- Declare type-name, virtual type (with debug switch)
287 // Constructors
289 //- Construct from name, Time and dictionary
291 (
292 const word& name,
293 const Time& runTime,
294 const dictionary& dict
295 );
297 //- Construct from name, objectRegistry and dictionary
300 const word& name,
303 );
305 //- No copy construct
306 volFieldValue(const volFieldValue&) = delete;
307
308 //- No copy assignment
309 void operator=(const volFieldValue&) = delete;
310
311
312 //- Destructor
313 virtual ~volFieldValue() = default;
314
316 // Member Functions
317
318 //- Read from dictionary
319 virtual bool read(const dictionary& dict);
320
321 //- Calculate and write
322 virtual bool write();
323};
325
326// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
327
328} // End namespace fieldValues
329} // End namespace functionObjects
330} // End namespace Foam
332// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
334#include "volFieldValueI.H"
335
336// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
337
338#ifdef NoRepository
339 #include "volFieldValueTemplates.C"
340#endif
341
342// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
343
344#endif
345
346// ************************************************************************* //
Info<< nl<< "Wrote faMesh in vtk format: "<< writer.output().name()<< nl;}{ vtk::lineWriter writer(aMesh.points(), aMesh.edges(), fileName(aMesh.mesh().time().globalPath()/"finiteArea-edges"));writer.writeGeometry();writer.beginCellData(4);writer.writeProcIDs();{ Field< scalar > fld(faMeshTools::flattenEdgeField(aMesh.magLe(), true))
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
Definition: Enum.H:61
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:80
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
const word & name() const noexcept
Return the name of this functionObject.
Intermediate class for handling field value-based function objects.
Definition: fieldValue.H:123
const dictionary & dict() const noexcept
Return the reference to the construction dictionary.
Definition: fieldValueI.H:31
Provides a 'volRegion' specialization of the fieldValue function object.
bool writeValues(const word &fieldName, const scalarField &V, const scalarField &weightField)
Templated helper function to output field values.
operationVariant
Bitmask values for operation variants.
@ typeAbsolute
Operation using mag (eg, for weighting)
tmp< Field< Type > > getFieldValues(const word &fieldName, const bool mandatory=false) const
Insert field values into values list.
postOperationType postOperation_
Optional post-evaluation operation.
Type processValues(const Field< Type > &values, const scalarField &V, const scalarField &weightField) const
Apply the 'operation' to the values.
bool usesVol() const noexcept
True if the operation needs the cell-volume.
Definition: volFieldValue.C:87
bool canWeight(const scalarField &fld) const
True if field is non-empty on any processor.
postOperationType
Post-operation type enumeration.
@ postOpNone
No additional operation after calculation.
@ postOpSqrt
Component-wise sqrt after normal operation.
@ postOpMag
Component-wise mag after normal operation.
virtual bool read(const dictionary &dict)
Read from dictionary.
bool is_magOp() const noexcept
True if the operation variant uses mag.
operationType operation_
Operation to apply to values.
label writeAll(const scalarField &V, const scalarField &weightField)
Helper function to output field values.
static const Enum< operationType > operationTypeNames_
Operation type names.
wordList weightFieldNames_
Weight field name(s) - optional.
virtual void writeFileHeader(Ostream &os) const
Output file header information.
bool validField(const word &fieldName) const
Return true if the field name is valid.
tmp< Field< Type > > filterField(const Field< Type > &field) const
Filter a field according to cellIds.
bool is_weightedOp() const noexcept
True if the operation variant uses a weight-field.
static const Enum< postOperationType > postOperationTypeNames_
Operation type names.
virtual bool write()
Calculate and write.
virtual const objectRegistry & obr() const
The region or sub-region registry being used.
Volume (cell) region selection class.
Definition: volRegion.H:116
scalar V() const
Return total volume of the selected region.
Definition: volRegionI.H:59
Registry of regIOobjects.
A class for managing temporary objects.
Definition: tmp.H:65
A class for handling words, derived from Foam::string.
Definition: word.H:68
rDeltaTY field()
engineTime & runTime
OBJstream os(runTime.globalPath()/outputName)
Namespace for OpenFOAM.
List< word > wordList
A List of words.
Definition: fileName.H:63
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
const direction noexcept
Definition: Scalar.H:223
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73