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-2020 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
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 
27 Class
28  Foam::functionObjects::fieldValues::volFieldValue
29 
30 Group
31  grpFieldFunctionObjects
32 
33 Description
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 
39 Usage
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 | no | none
73  \endtable
74 
75  The inherited entries are elaborated in:
76  - \link fieldValue.H \endlink
77  - \link volRegion.H \endlink
78 
79  Options for the \c regionType entry:
80  \plaintable
81  cellZone | requires a 'name' entry to specify the cellZone
82  all | all cells
83  \endplaintable
84 
85  Options for the \c operation entry:
86  \plaintable
87  none | No operation
88  min | Minimum
89  max | Maximum
90  sum | Sum
91  sumMag | Sum of component magnitudes
92  average | Ensemble average
93  volAverage | Volume weighted average
94  volIntegrate | Volume integral
95  CoV | Coefficient of variation: standard deviation/mean
96  weightedSum | Weighted sum
97  weightedAverage | Weighted average
98  weightedVolAverage | Weighted volume average
99  weightedVolIntegrate | Weighted volume integral
100  \endplaintable
101 
102  Options for the \c postOperation entry:
103  \plaintable
104  none | No additional operation after calculation
105  mag | Component-wise \c mag() after normal operation
106  sqrt | Component-wise \c sqrt() after normal operation
107  \endplaintable
108 
109  Usage by the \c postProcess utility is not available.
110 
111 See also
112  - Foam::functionObject
113  - Foam::functionObjects::fieldValues::fieldValue
114  - Foam::functionObjects::volRegion
115 
116 SourceFiles
117  volFieldValue.C
118  volFieldValueTemplates.C
119 
120 \*---------------------------------------------------------------------------*/
121 
122 #ifndef functionObjects_volFieldValue_H
123 #define functionObjects_volFieldValue_H
124 
125 #include "fieldValue.H"
126 #include "volRegion.H"
127 
128 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129 
130 namespace Foam
131 {
132 namespace functionObjects
133 {
134 namespace fieldValues
135 {
136 
137 /*---------------------------------------------------------------------------*\
138  Class volFieldValue Declaration
139 \*---------------------------------------------------------------------------*/
140 
141 class volFieldValue
142 :
143  public fieldValue,
144  public volRegion
145 {
146 public:
147 
148  // Public Data Types
149 
150  //- Bitmask values for operation variants
151  enum operationVariant
152  {
153  typeBase = 0,
154  typeScalar = 0x100,
155  typeWeighted = 0x200,
156  typeAbsolute = 0x400,
157  };
158 
159  //- Operation type enumeration
160  enum operationType
161  {
162  // Normal operations
163 
164  opNone = 0,
165  opMin,
166  opMax,
167  opSum,
168  opSumMag,
169  opAverage,
170  opVolAverage,
172  opCoV,
173 
174  // Weighted variants
175 
178 
181 
184 
187 
188  // Variants using absolute weighting
189  };
190 
191  //- Operation type names
192  static const Enum<operationType> operationTypeNames_;
193 
194 
195  //- Post-operation type enumeration
196  enum postOperationType
197  {
198  postOpNone,
199  postOpMag,
200  postOpSqrt
201  };
202 
203  //- Operation type names
204  static const Enum<postOperationType> postOperationTypeNames_;
205 
206 
207 protected:
208 
209  // Protected Data
210 
211  //- Operation to apply to values
213 
214  //- Optional post-evaluation operation
216 
217  //- Weight field name - only used for weighted modes
218  word weightFieldName_;
219 
220 
221  // Protected Member Functions
222 
223  //- True if the operation needs the cell-volume
224  bool usesVol() const;
225 
226  //- True if the operation variant uses mag
227  bool usesMag() const;
228 
229  //- True if the operation variant uses a weight-field
230  bool usesWeight() const;
231 
232  //- True if operation variant uses a weight-field that is available.
233  // Checks for availability on any processor.
234  inline bool canWeight(const scalarField& weightField) 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 mustGet = 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>
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>
276 
277  //- Output file header information
278  virtual void writeFileHeader(Ostream& os) const;
279 
280 
281 public:
282 
283  //- Declare type-name, virtual type (with debug switch)
284  TypeName("volFieldValue");
285 
286 
287  // Constructors
288 
289  //- Construct from name, Time and dictionary
291  (
292  const word& name,
293  const Time& runTime,
295  );
296 
297  //- Construct from name, objectRegistry and dictionary
299  (
300  const word& name,
301  const objectRegistry& obr,
303  );
304 
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 
315 
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 };
324 
325 
326 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
327 
328 } // End namespace fieldValues
329 } // End namespace functionObjects
330 } // End namespace Foam
331 
332 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
333 
334 #ifdef NoRepository
335  #include "volFieldValueTemplates.C"
336 #endif
337 
338 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
339 
340 #endif
341 
342 // ************************************************************************* //
runTime
engineTime & runTime
Definition: createEngineTime.H:13
Foam::scalarField
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Definition: primitiveFieldsFwd.H:52
Foam::functionObjects::fieldValues::volFieldValue::opWeightedSum
Weighted sum.
Definition: volFieldValue.H:302
Foam::functionObjects::fieldValues::volFieldValue::~volFieldValue
virtual ~volFieldValue()=default
Destructor.
Foam::Enum< operationType >
Foam::Time
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
Definition: Time.H:73
Foam::functionObjects::fieldValues::volFieldValue::opNone
No operation.
Definition: volFieldValue.H:289
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::functionObjects::fieldValues::volFieldValue::usesWeight
bool usesWeight() const
True if the operation variant uses a weight-field.
Definition: volFieldValue.C:112
Foam::functionObjects::volRegion
Volume (cell) region selection class.
Definition: volRegion.H:115
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:59
Foam::functionObjects::fieldValues::volFieldValue::postOperationType
postOperationType
Post-operation type enumeration.
Definition: volFieldValue.H:321
Foam::HashTableOps::values
List< T > values(const HashTable< T, Key, Hash > &tbl, const bool doSort=false)
List of values from HashTable, optionally sorted.
Definition: HashOps.H:149
Foam::functionObjects::fieldValues::volFieldValue::typeScalar
Operation returns a scalar.
Definition: volFieldValue.H:279
Foam::functionObjects::fieldValues::volFieldValue::opMax
Maximum value.
Definition: volFieldValue.H:291
Foam::functionObjects::fieldValues::volFieldValue::volFieldValue
volFieldValue(const word &name, const Time &runTime, const dictionary &dict)
Construct from name, Time and dictionary.
Definition: volFieldValue.C:194
Foam::functionObjects::fieldValues::volFieldValue::opWeightedVolIntegrate
Weighted volume integral.
Definition: volFieldValue.H:311
Foam::functionObjects::fieldValues::volFieldValue::typeBase
Base operation.
Definition: volFieldValue.H:278
Foam::functionObjects::fieldValue::dict
const dictionary & dict() const
Return the reference to the construction dictionary.
Definition: fieldValueI.H:31
Foam::functionObjects::fieldValues::volFieldValue::processValues
Type processValues(const Field< Type > &values, const scalarField &V, const scalarField &weightField) const
Apply the 'operation' to the values.
Definition: volFieldValueTemplates.C:89
Foam::functionObjects::fieldValues::volFieldValue::typeWeighted
Operation using weighting.
Definition: volFieldValue.H:280
Foam::functionObjects::fieldValues::volFieldValue::operator=
void operator=(const volFieldValue &)=delete
No copy assignment.
Foam::functionObjects::fieldValues::volFieldValue::read
virtual bool read(const dictionary &dict)
Read from dictionary.
Definition: volFieldValue.C:249
Foam::functionObjects::fieldValues::volFieldValue::getFieldValues
tmp< Field< Type > > getFieldValues(const word &fieldName, const bool mustGet=false) const
Insert field values into values list.
Foam::functionObjects::fieldValues::volFieldValue::opCoV
Coefficient of variation.
Definition: volFieldValue.H:297
Foam::functionObjects::fieldValues::volFieldValue::opMin
Minimum value.
Definition: volFieldValue.H:290
Foam::functionObjects::fieldValues::volFieldValue::typeAbsolute
Operation using mag (eg, for weighting)
Definition: volFieldValue.H:281
Foam::functionObjects::fieldValues::volFieldValue::opSumMag
Sum of component magnitudes.
Definition: volFieldValue.H:293
Foam::functionObjects::fieldValues::volFieldValue::operation_
operationType operation_
Operation to apply to values.
Definition: volFieldValue.H:337
Foam::functionObjects::fieldValues::volFieldValue::write
virtual bool write()
Calculate and write.
Definition: volFieldValue.C:282
Foam::functionObjects::fieldValues::volFieldValue::operationType
operationType
Operation type enumeration.
Definition: volFieldValue.H:285
Foam::functionObjects::fieldValues::volFieldValue::weightFieldName_
word weightFieldName_
Weight field name - only used for weighted modes.
Definition: volFieldValue.H:343
Foam::objectRegistry
Registry of regIOobjects.
Definition: objectRegistry.H:60
Foam::functionObjects::fieldValues::volFieldValue::opAverage
Ensemble average.
Definition: volFieldValue.H:294
Foam::functionObjects::fieldValues::volFieldValue::validField
bool validField(const word &fieldName) const
Return true if the field name is valid.
Definition: volFieldValueTemplates.C:36
Foam::functionObjects::fieldValues::volFieldValue::postOperationTypeNames_
static const Enum< postOperationType > postOperationTypeNames_
Operation type names.
Definition: volFieldValue.H:329
Foam::functionObjects::fieldValues::volFieldValue
Provides a 'volRegion' specialization of the fieldValue function object.
Definition: volFieldValue.H:266
Foam::Field< scalar >
Foam::functionObjects::fieldValues::volFieldValue::opWeightedAverage
Weighted average.
Definition: volFieldValue.H:305
Foam::functionObjects::fieldValues::volFieldValue::operationVariant
operationVariant
Bitmask values for operation variants.
Definition: volFieldValue.H:276
Foam::functionObjects::fieldValues::volFieldValue::writeFileHeader
virtual void writeFileHeader(Ostream &os) const
Output file header information.
Definition: volFieldValue.C:133
field
rDeltaTY field()
Foam::functionObjects::fieldValues::volFieldValue::operationTypeNames_
static const Enum< operationType > operationTypeNames_
Operation type names.
Definition: volFieldValue.H:317
Foam::functionObjects::fieldValues::volFieldValue::postOperation_
postOperationType postOperation_
Optional post-evaluation operation.
Definition: volFieldValue.H:340
Foam::functionObjects::fieldValues::volFieldValue::writeValues
bool writeValues(const word &fieldName, const scalarField &V, const scalarField &weightField)
Templated helper function to output field values.
Definition: volFieldValueTemplates.C:203
Foam::functionObjects::fieldValues::volFieldValue::usesMag
bool usesMag() const
True if the operation variant uses mag.
Definition: volFieldValue.C:105
Foam::functionObjects::fieldValues::volFieldValue::filterField
tmp< Field< Type > > filterField(const Field< Type > &field) const
Filter a field according to cellIds.
volFieldValueTemplates.C
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
Foam::functionObjects::fieldValues::volFieldValue::TypeName
TypeName("volFieldValue")
Declare type-name, virtual type (with debug switch)
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
volRegion.H
Foam::functionObjects::fieldValues::volFieldValue::postOpSqrt
Component-wise sqrt after normal operation.
Definition: volFieldValue.H:325
Foam::functionObject::name
const word & name() const
Return the name of this functionObject.
Definition: functionObject.C:131
fieldValue.H
Foam::functionObjects::fieldValue
Intermediate class for handling field value-based function objects.
Definition: fieldValue.H:119
Foam::functionObjects::regionFunctionObject::obr
virtual const objectRegistry & obr() const
The region or sub-region registry being used.
Definition: regionFunctionObject.C:47
Foam::functionObjects::fieldValues::volFieldValue::opSum
Sum of values.
Definition: volFieldValue.H:292
Foam::functionObjects::fieldValues::volFieldValue::opWeightedVolAverage
Weighted volume average.
Definition: volFieldValue.H:308
Foam::functionObjects::fieldValues::volFieldValue::opVolAverage
Volume average.
Definition: volFieldValue.H:295
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
Foam::functionObjects::fieldValues::volFieldValue::canWeight
bool canWeight(const scalarField &weightField) const
True if operation variant uses a weight-field that is available.
Definition: volFieldValue.C:120
Foam::functionObjects::volRegion::V
scalar V() const
Return total volume of the selected region.
Definition: volRegionI.H:62
Foam::functionObjects::fieldValues::volFieldValue::postOpNone
No additional operation after calculation.
Definition: volFieldValue.H:323
Foam::functionObjects::fieldValues::volFieldValue::writeAll
label writeAll(const scalarField &V, const scalarField &weightField)
Helper function to output field values.
Definition: volFieldValue.C:158
Foam::functionObjects::fieldValues::volFieldValue::opVolIntegrate
Volume integral.
Definition: volFieldValue.H:296
Foam::functionObjects::fieldValues::volFieldValue::usesVol
bool usesVol() const
True if the operation needs the cell-volume.
Definition: volFieldValue.C:87
Foam::functionObjects::fieldValues::volFieldValue::postOpMag
Component-wise mag after normal operation.
Definition: volFieldValue.H:324