exprResult.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) 2012-2018 Bernhard Gschaider <bgschaid@hfd-research.com>
9  Copyright (C) 2019 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::expressions::exprResult
29 
30 Description
31  A polymorphic field/result from evaluating an expression
32 
33  \heading Dictionary parameters
34  \table
35  Property | Description | Required | Default
36  resultType | The type of result | no | exprResult
37  unsetValue | Create without reading the dictionary | no | false
38  noReset | Suppress reset on time | no | false
39  \endtable
40 
41  When creating with values
42  \table
43  Property | Description | Required | Default
44  valueType | Result value type (scalar, vector,..) | yes |
45  isSingleValue | A single field value | no | false
46  isPointValue | Interpret values as point values | no | false
47  value | The field values | yes |
48  fieldSize | The size of the field (when not single-value) | no |
49  \endtable
50 
51 SourceFiles
52  exprResult.C
53  exprResultI.H
54 
55 \*---------------------------------------------------------------------------*/
56 
57 #ifndef expressions_exprResult_H
58 #define expressions_exprResult_H
59 
60 #include "vector.H"
61 #include "tensor.H"
62 #include "sphericalTensor.H"
63 #include "symmTensor.H"
64 #include "dimensionedType.H"
65 #include "IOField.H"
66 #include "runTimeSelectionTables.H"
67 
68 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
69 
70 namespace Foam
71 {
72 namespace expressions
73 {
74 
75 /*---------------------------------------------------------------------------*\
76  Class exprResult Declaration
77 \*---------------------------------------------------------------------------*/
78 
79 class exprResult
80 :
81  public refCount
82 {
83  // Private Data
84 
85  //- The value type as string,
86  //- normally corresponds to pTraits or typeName
87  word valType_;
88 
89  //- Is single, uniform value (can be a non-field)
90  bool isUniform_;
91 
92  //- Is a point value
93  bool isPointVal_;
94 
95  //- Whether or not the variable will be reset
96  bool noReset_;
97 
98  //- Allow override of noReset_, but only accessible for subclasses
99  bool needsReset_;
100 
101  //- Size of field or object
102  label size_;
103 
104  //- A %union of single values, including standard VectorSpace types
105  union singleValue
106  {
107  bool bool_;
108  label label_;
109  scalar scalar_;
110  vector vector_;
111  tensor tensor_;
112  symmTensor symmTensor_;
113  sphericalTensor sphTensor_;
114 
115  //- Construct null, zero-initialized
116  singleValue();
117 
118  //- Copy construct
119  singleValue(const singleValue& val);
120 
121  //- Copy assignment
122  void operator=(const singleValue& val);
123 
124  //- Return current value for specified type.
125  template<class T>
126  inline const T& get() const
127  {
129  << "Not implemented for type " << pTraits<T>::typeName << nl;
130  return pTraits<T>::zero;
131  }
132 
133  //- Set new value for specified type. Returns updated value.
134  template<class T>
135  inline const T& set(const T& val)
136  {
138  << "Not implemented for type " << pTraits<T>::typeName << nl;
139  return val;
140  }
141  };
142 
143  //- The single value
144  singleValue single_;
145 
146  //- Allocated plain field (eg, scalarField)
147  void *fieldPtr_;
148 
149  //- Alternative storage for non-plain fields (eg, volScalarField)
150  autoPtr<regIOobject> objectPtr_;
151 
152 
153  // Private Member Functions
154 
155  //- Type-checked deletion of the value pointer.
156  // \return True if the type check was satisfied
157  template<class Type>
158  inline bool deleteChecked();
159 
160  //- Dispatch to type-checked pointer deletion
161  void uglyDelete();
162 
163  //- Type-checked creation of field from dictionary
164  // \return True if the type check was satisfied
165  template<class Type>
166  inline bool readChecked
167  (
168  const word& key,
169  const dictionary& dict,
170  const label len,
171  const bool uniform
172  );
173 
174  //- Type-checked retrieval of uniform field from current results
175  // \return True if the type check was satisfied
176  template<class Type>
177  bool getUniformChecked
178  (
179  exprResult& result,
180  const label size,
181  const bool noWarn,
182  const bool parRun
183  ) const;
184 
185  //- Type-checked retrieval of uniform field from current results
186  // \return True if the type check was satisfied
187  bool getUniformCheckedBool
188  (
189  exprResult& result,
190  const label size,
191  const bool noWarn,
192  const bool parRun
193  ) const;
194 
195  //- Type-checked determination of centre value (min/max)
196  // \return True if the type check was satisfied
197  template<class Type>
198  bool setAverageValueChecked(const bool parRun = Pstream::parRun());
199 
200  //- Type-checked determination of average bool value
201  // \return True if the type check was satisfied
202  bool setAverageValueCheckedBool(const bool parRun = Pstream::parRun());
203 
204  //- Type-checked copy of field
205  // \return True if the type check was satisfied
206  template<class Type>
207  bool duplicateFieldChecked(const void* ptr);
208 
209  //- Type-checked writing of the single value (uniform) entry
210  // \return True if the type check was satisfied
211  template<class Type>
212  bool writeSingleValueChecked(Ostream& os) const;
213 
214  //- Type-checked writing of "value" field entry
215  // \return True if the type check was satisfied
216  template<class Type>
217  bool writeValueFieldChecked(Ostream& os) const;
218 
219  //- Type-checked forwarding to Field::writeEntry
220  // \return True if the type check was satisfied
221  template<class Type>
222  bool writeEntryChecked(const word& keyword, Ostream& os) const;
223 
224  //- Type-checked field addition with another expression field
225  // \return True if the type check was satisfied
226  template<class Type>
227  bool plusEqChecked(const exprResult& b);
228 
229  //- Type-checked field multiplication with a scalar
230  // \return True if the type check was satisfied
231  template<class Type>
232  bool multiplyEqChecked(const scalar& b);
233 
234 
235  template<class Type>
236  inline void setResultImpl(Field<Type>*, bool isPointVal=false);
237 
238  template<class Type>
239  inline void setResultImpl(const Field<Type>&, bool isPointVal=false);
240 
241  template<class Type>
242  inline void setResultImpl(Field<Type>&&, bool isPointVal=false);
243 
244  template<class Type>
245  inline void setResultImpl(const Type& val, const label len);
246 
247  template<class Type>
248  inline void setSingleValueImpl(const Type& val);
249 
250  template<class Type>
251  inline void setObjectResultImpl(Type* ptr);
252 
253  template<class Type>
254  inline void setObjectResultImpl(autoPtr<Type>& ap);
255 
256  template<class Type>
257  inline void setObjectResultImpl(autoPtr<Type>&& ap);
258 
259 
260 protected:
261 
262  // Protected Member Functions
263 
264  //- Simulate virtual templated methods
265  inline virtual exprResult& target() { return *this; }
266 
267  //- Reset at new timestep according to the derived class type
268  virtual void resetImpl();
269 
270  //- Reset at new timestep according to type
271  // \return true if it was actually reset
272  bool reset(bool force=false);
273 
274  //- Adjusts the internal needsReset value
275  void needsReset(bool val) { needsReset_ = val; }
276 
277 
278 public:
279 
280  //- An empty result
281  static const exprResult null;
282 
283  //- Friendship with globals
284  friend class exprResultGlobals;
285 
286 
287  //- Runtime type information
288  TypeName("exprResult");
289 
291  (
292  autoPtr,
293  exprResult,
294  dictionary,
295  (
296  const dictionary& dict
297  ),
298  (dict)
299  );
301  (
302  autoPtr,
303  exprResult,
304  empty,
305  (),
306  ()
307  );
308 
309 
310  // Constructors
311 
312  //- Construct null
313  exprResult();
314 
315  //- Copy construct
316  exprResult(const exprResult& expr);
317 
318  //- Move construct
319  exprResult(exprResult&& expr);
320 
321  //- Construct from a dictionary
322  explicit exprResult
323  (
324  const dictionary& dict,
325  const bool uniform = false,
326  const bool needsValue = false
327  );
328 
329  //- Construct by copying a field
330  template<class Type>
331  exprResult(const Field<Type>& f);
332 
333  //- Construct by moving a field
334  template<class Type>
336 
337  //- Construct for an IOobject
338  template<class Type>
340 
341  //- Construct for an IOobject
342  template<class Type>
344 
345  //- Construct from a dimensioned value
346  template<class Type>
348 
349  #undef exprResult_Construct
350  #define exprResult_Construct(Type) \
351  \
352  explicit exprResult(const Type& val) : exprResult() \
353  { \
354  setSingleValue(val); \
355  }
356 
357  exprResult_Construct(bool);
358  exprResult_Construct(scalar);
363 
364  #undef exprResult_Construct
365 
366 
367  // Selectors
368 
369  //- Return a reference to the selected value driver
370  static autoPtr<exprResult> New(const dictionary& dict);
371 
372  //- Clone
373  virtual autoPtr<exprResult> clone() const
374  {
375  return autoPtr<exprResult>::New(*this);
376  }
377 
378 
379  //- Destructor
380  virtual ~exprResult();
381 
382 
383  // Member Functions
384 
385  // Access
386 
387  //- Has a value?
388  inline bool hasValue() const;
389 
390  //- Basic type for the field or single value
391  inline const word& valueType() const;
392 
393  //- True if representing point values, or test if same as isPointVal
394  inline bool isPointValue(const bool isPointVal = true) const;
395 
396  //- True if single, uniform value
397  inline bool isUniform() const;
398 
399  //- True if valueType corresponds to the given Type
400  template<class Type>
401  inline bool isType() const;
402 
403  //- True if valueType is a bool
404  inline bool isBool() const;
405 
406  //- True if the object pointer is being used
407  inline bool isObject() const;
408 
409  //- The field or object size
410  inline label size() const;
411 
412  //- The address of the field data content.
413  // Fatal for unknown types.
414  // Used, for example, for python integration
415  const void* dataAddress() const;
416 
417 
418  // Edit
419 
420  //- Clear (zero) the result
421  void clear();
422 
423  //- Change reset behaviour
424  void noReset() { noReset_ = true; }
425 
426  //- Change reset behaviour
427  void allowReset() { noReset_ = false; }
428 
429  //- Test if field corresponds to a single-value and thus uniform.
430  // Uses field min/max to establish uniformity.
431  // Test afterwards with isUniform()
432  void testIfSingleValue(const bool parRun = Pstream::parRun());
433 
434 
435  // Set results
436 
437  //- Set result field, taking ownership of the pointer
438  template<class Type>
439  inline void setResult(Field<Type>*, bool isPointVal=false);
440 
441  //- Set result field, taking copy of the field contents
442  template<class Type>
443  inline void setResult(const Field<Type>& fld, bool isPointVal=false);
444 
445  //- Set result field, moving field contents
446  template<class Type>
447  inline void setResult(Field<Type>&&, bool isPointVal=false);
448 
449  //- Set uniform result field of given size
450  template<class Type>
451  inline void setResult(const Type& val, const label size);
452 
453  //- Set single-value uniform result
454  template<class Type>
455  inline void setSingleValue(const Type& val);
456 
457  template<class Type>
458  inline void setObjectResult(autoPtr<Type>& o);
459 
460  template<class Type>
461  inline void setObjectResult(autoPtr<Type>&& o);
462 
463 
464  // Access/Get results
465 
466  //- Return const reference to the field
467  template<class Type>
468  inline const Field<Type>& cref() const;
469 
470  //- Return non-const reference to the field
471  template<class Type>
472  inline Field<Type>& ref();
473 
474  //- Return non-const reference to the field, casting away constness
475  template<class Type>
476  inline Field<Type>& getRef() const;
477 
478  //- Return tmp field of the contents,
479  //- optionally keeping a copy in cache
480  template<class Type>
481  inline tmp<Field<Type>> getResult(bool cacheCopy=false);
482 
483  //- Get object result (Caution - potentially fragile)
484  //- optionally keeping a copy in cache
485  template<class Type>
486  inline tmp<Type> getObjectResult(bool cacheCopy=false);
487 
488  //- Construct a uniform field from the current results
489  // Uses the field average. Optionally warning if the min/max
490  // deviation is larger than SMALL.
492  (
493  const label size,
494  const bool noWarn,
495  const bool parRun = Pstream::parRun()
496  ) const;
497 
498  //- Get a reduced result
499  template<template<class> class BinaryOp, class Type>
500  inline Type getReduced
501  (
502  const BinaryOp<Type>& bop,
503  const Type& initial = pTraits<Type>::zero
504  );
505 
506 
507  // Write
508 
509  //- Forwarding to Field::writeEntry
510  void writeEntry(const word& keyword, Ostream& os) const;
511 
512  //- Write entry as dictionary contents
513  void writeDict(Ostream& os, const bool subDict=true) const;
514 
515  //- Write the single value, or the first value from field
516  void writeValue(Ostream& os) const;
517 
518 
519  // Member Operators
520 
521  //- Copy assignment
522  virtual void operator=(const exprResult& rhs);
523 
524  //- Move assignment
525  virtual void operator=(exprResult&& rhs);
526 
527 
528  //- Scalar multiplication
529  exprResult& operator*=(const scalar& b);
530 
531  //- Addition of results
533 };
534 
535 
536 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
537 
538 } // End namespace expressions
539 
540 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
541 
542 // Operators
543 
544 expressions::exprResult operator*
545 (
546  const scalar& a,
548 );
549 expressions::exprResult operator*
550 (
551  const expressions::exprResult& a,
552  const scalar& b
553 );
554 expressions::exprResult operator+
555 (
556  const expressions::exprResult& a,
558 );
559 
560 
561 // IO Operator
564 
565 
566 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
567 
568 } // End namespace Foam
569 
570 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
571 
572 #include "exprResultI.H"
573 
574 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
575 
576 #endif
577 
578 // ************************************************************************* //
Foam::autoPtr::New
static autoPtr< T > New(Args &&... args)
Construct autoPtr of T with forwarding arguments.
Foam::Tensor< scalar >
Foam::val
label ListType::const_reference val
Definition: ListOps.H:407
Foam::sphericalTensor
SphericalTensor< scalar > sphericalTensor
SphericalTensor of scalars.
Definition: sphericalTensor.H:51
Foam::expressions::exprResult::isObject
bool isObject() const
True if the object pointer is being used.
Definition: exprResultI.H:284
Foam::SymmTensor< scalar >
Foam::expressions::exprResult::writeDict
void writeDict(Ostream &os, const bool subDict=true) const
Write entry as dictionary contents.
Definition: exprResult.C:581
Foam::expressions::exprResult::target
virtual exprResult & target()
Simulate virtual templated methods.
Definition: exprResult.H:314
Foam::word
A class for handling words, derived from Foam::string.
Definition: word.H:62
Foam::expressions::exprResult::size
label size() const
The field or object size.
Definition: exprResultI.H:290
Foam::expressions::exprResult::getReduced
Type getReduced(const BinaryOp< Type > &bop, const Type &initial=pTraits< Type >::zero)
Get a reduced result.
Definition: exprResultI.H:794
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:59
Foam::refCount
Reference counter for various OpenFOAM components.
Definition: refCount.H:50
Foam::expressions::exprResult::testIfSingleValue
void testIfSingleValue(const bool parRun=Pstream::parRun())
Test if field corresponds to a single-value and thus uniform.
Definition: exprResult.C:459
Foam::expressions::exprResult::TypeName
TypeName("exprResult")
Runtime type information.
Foam::tensor
Tensor< scalar > tensor
Tensor of scalars.
Definition: tensor.H:53
Foam::expressions::exprResult::valueType
const word & valueType() const
Basic type for the field or single value.
Definition: exprResultI.H:250
Foam::expressions::exprResult::getResult
tmp< Field< Type > > getResult(bool cacheCopy=false)
Foam::UPstream::parRun
static bool & parRun()
Is this a parallel run?
Definition: UPstream.H:414
Foam::expressions::exprResult::setResult
void setResult(Field< Type > *, bool isPointVal=false)
Set result field, taking ownership of the pointer.
Definition: exprResultI.H:410
Foam::operator>>
Istream & operator>>(Istream &, directionInfo &)
Definition: directionInfo.C:228
Foam::expressions::exprResult::isBool
bool isBool() const
True if valueType is a bool.
Definition: exprResultI.H:278
tensor.H
Foam::expressions::exprResult::operator=
virtual void operator=(const exprResult &rhs)
Copy assignment.
Definition: exprResult.C:486
sphericalTensor.H
Foam::expressions::exprResult::reset
bool reset(bool force=false)
Reset at new timestep according to type.
Definition: exprResult.C:371
Foam::expressions::exprResult::operator+=
exprResult & operator+=(const exprResult &b)
Addition of results.
Definition: exprResult.C:714
Foam::uniform
Definition: uniform.H:50
Foam::expressions::exprResult::noReset
void noReset()
Change reset behaviour.
Definition: exprResult.H:473
exprResultI.H
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:62
Foam::expressions::exprResult
A polymorphic field/result from evaluating an expression.
Definition: exprResult.H:128
Foam::constant::physicoChemical::b
const dimensionedScalar b
Wien displacement law constant: default SI units: [m.K].
Definition: createFields.H:27
symmTensor.H
Foam::Field
Generic templated field type.
Definition: Field.H:63
Foam::Istream
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
Definition: Istream.H:61
Foam::expressions::exprResult::New
static autoPtr< exprResult > New(const dictionary &dict)
Return a reference to the selected value driver.
Definition: exprResult.C:304
Foam::expressions::exprResult::ref
Field< Type > & ref()
Return non-const reference to the field.
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:58
Foam::expressions::exprResult::writeValue
void writeValue(Ostream &os) const
Write the single value, or the first value from field.
Definition: exprResult.C:639
Foam::expressions::exprResult::setSingleValue
void setSingleValue(const Type &val)
Set single-value uniform result.
Definition: exprResultI.H:473
Foam::symmTensor
SymmTensor< scalar > symmTensor
SymmTensor of scalars.
Definition: symmTensor.H:50
Foam::expressions::exprResultGlobals
A globally available registry of expression results.
Definition: exprResultGlobals.H:56
fld
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Definition: gmvOutputLagrangian.H:23
Foam::expressions::exprResult::getObjectResult
tmp< Type > getObjectResult(bool cacheCopy=false)
Foam::expressions::exprResult::hasValue
bool hasValue() const
Has a value?
Definition: exprResultI.H:244
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::expressions::exprResult::isUniform
bool isUniform() const
True if single, uniform value.
Definition: exprResultI.H:265
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
Foam::expressions::exprResult::resetImpl
virtual void resetImpl()
Reset at new timestep according to the derived class type.
Definition: exprResult.C:365
Foam::expressions::exprResult::needsReset
void needsReset(bool val)
Adjusts the internal needsReset value.
Definition: exprResult.H:324
Foam::dimensioned
Generic dimensioned Type class.
Definition: dimensionedScalarFwd.H:43
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Foam::expressions::exprResult::exprResultGlobals
friend class exprResultGlobals
Friendship with globals.
Definition: exprResult.H:333
Foam::expressions::exprResult::cref
const Field< Type > & cref() const
Return const reference to the field.
Foam::expressions::exprResult::isType
bool isType() const
True if valueType corresponds to the given Type.
Definition: exprResultI.H:272
Foam::vector
Vector< scalar > vector
A scalar version of the templated Vector.
Definition: vector.H:51
Foam::SphericalTensor< scalar >
Foam::expressions::exprResult::getRef
Field< Type > & getRef() const
Return non-const reference to the field, casting away constness.
Foam::expressions::exprResult::getUniform
exprResult getUniform(const label size, const bool noWarn, const bool parRun=Pstream::parRun()) const
Construct a uniform field from the current results.
Definition: exprResult.C:424
Foam::autoPtr
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: HashPtrTable.H:53
Foam::expressions::exprResult::declareRunTimeSelectionTable
declareRunTimeSelectionTable(autoPtr, exprResult, dictionary,(const dictionary &dict),(dict))
Foam::expressions::exprResult::exprResult
exprResult()
Construct null.
Definition: exprResult.C:205
Foam::nl
constexpr char nl
Definition: Ostream.H:372
Foam::expressions::exprResult::clear
void clear()
Clear (zero) the result.
Definition: exprResult.C:383
f
labelList f(nPoints)
IOField.H
runTimeSelectionTables.H
Macros to ease declaration of run-time selection tables.
Foam::Vector< scalar >
Foam::expressions::exprResult::allowReset
void allowReset()
Change reset behaviour.
Definition: exprResult.H:476
Foam::pTraits
Traits class for primitives.
Definition: pTraits.H:52
Foam::expressions::exprResult::writeEntry
void writeEntry(const word &keyword, Ostream &os) const
Forwarding to Field::writeEntry.
Definition: exprResult.C:557
Foam::expressions::exprResult::~exprResult
virtual ~exprResult()
Destructor.
Definition: exprResult.C:355
Foam::expressions::exprResult::operator*=
exprResult & operator*=(const scalar &b)
Scalar multiplication.
Definition: exprResult.C:673
Foam::expressions::exprResult::isPointValue
bool isPointValue(const bool isPointVal=true) const
True if representing point values, or test if same as isPointVal.
Definition: exprResultI.H:257
vector.H
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:56
exprResult_Construct
#define exprResult_Construct(Type)
Definition: exprResult.H:399
Foam::expressions::exprResult::clone
virtual autoPtr< exprResult > clone() const
Clone.
Definition: exprResult.H:422
WarningInFunction
#define WarningInFunction
Report a warning using Foam::Warning.
Definition: messageStream.H:294
Foam::expressions::exprResult::setObjectResult
void setObjectResult(autoPtr< Type > &o)
Definition: exprResultI.H:367
Foam::data
Database for solution data, solver performance and other reduced data.
Definition: data.H:54
Foam::operator<<
Ostream & operator<<(Ostream &, const boundaryPatch &)
Definition: boundaryPatch.C:102
dimensionedType.H
Foam::expressions::exprResult::dataAddress
const void * dataAddress() const
The address of the field data content.
Definition: exprResult.C:825