GeometricField.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 | Copyright (C) 2011-2015 OpenFOAM Foundation
6  \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::GeometricField
26 
27 Description
28  Generic GeometricField class.
29 
30 SourceFiles
31  GeometricFieldI.H
32  GeometricField.C
33  GeometricBoundaryField.C
34  GeometricFieldFunctions.H
35  GeometricFieldFunctions.C
36 
37 \*---------------------------------------------------------------------------*/
38 
39 #ifndef GeometricField_H
40 #define GeometricField_H
41 
42 #include "regIOobject.H"
43 #include "dimensionedTypes.H"
44 #include "DimensionedField.H"
45 #include "FieldField.H"
48 
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
50 
51 namespace Foam
52 {
53 
54 class dictionary;
55 
56 // Forward declaration of friend functions and operators
57 
58 template<class Type, template<class> class PatchField, class GeoMesh>
59 class GeometricField;
60 
61 template<class Type, template<class> class PatchField, class GeoMesh>
62 Ostream& operator<<
63 (
64  Ostream&,
65  const GeometricField<Type, PatchField, GeoMesh>&
66 );
67 
68 template<class Type, template<class> class PatchField, class GeoMesh>
69 Ostream& operator<<
70 (
71  Ostream&,
72  const tmp<GeometricField<Type, PatchField, GeoMesh> >&
73 );
74 
75 
76 /*---------------------------------------------------------------------------*\
77  Class GeometricField Declaration
78 \*---------------------------------------------------------------------------*/
79 
80 template<class Type, template<class> class PatchField, class GeoMesh>
81 class GeometricField
82 :
83  public DimensionedField<Type, GeoMesh>
84 {
85  // Private Member Functions
86 
87  //- Read from file if it is present
88  bool readIfPresent();
89 
90  //- Read old time field from file if it is present
91  bool readOldTimeIfPresent();
92 
93 
94 public:
95 
96  // Public typedefs
97 
98  typedef typename GeoMesh::Mesh Mesh;
99  typedef typename GeoMesh::BoundaryMesh BoundaryMesh;
100 
103  typedef PatchField<Type> PatchFieldType;
104 
105 
107  :
108  public FieldField<PatchField, Type>
109  {
110  // Private data
111 
112  //- Reference to BoundaryMesh for which this field is defined
113  const BoundaryMesh& bmesh_;
114 
115 
116  public:
117 
118  // Constructors
119 
120  //- Construct from a BoundaryMesh
122 
123  //- Construct from a BoundaryMesh,
124  // reference to the internal field
125  // and a patch type
127  (
128  const BoundaryMesh&,
130  const word&
131  );
132 
133  //- Construct from a BoundaryMesh,
134  // reference to the internal field
135  // and a wordList of patch types and optional the actual patch
136  // types (to override constraint patches)
138  (
139  const BoundaryMesh&,
141  const wordList& wantedPatchTypes,
142  const wordList& actualPatchTypes = wordList()
143  );
144 
145  //- Construct from a BoundaryMesh,
146  // reference to the internal field
147  // and a PtrList<PatchField<Type> >
149  (
150  const BoundaryMesh&,
152  const PtrList<PatchField<Type> >&
153  );
154 
155  //- Construct as copy setting the reference to the internal field
157  (
160  );
161 
162  //- Construct as copy
163  // Dangerous because Field may be set to a field which gets deleted
164  // Need new type of BoundaryField, one which is part of a geometric
165  // field for which snGrad etc. may be called and a free standing
166  // BoundaryField for which such operations are unavailable.
168  (
170  );
171 
172  //- Construct from dictionary
174  (
175  const BoundaryMesh&,
177  const dictionary&
178  );
179 
180 
181  // Member functions
182 
183  //- Read the boundary field
184  void readField
185  (
186  const DimensionedField<Type, GeoMesh>& field,
187  const dictionary& dict
188  );
189 
190  //- Update the boundary condition coefficients
191  void updateCoeffs();
192 
193  //- Evaluate boundary conditions
194  void evaluate();
195 
196  //- Return a list of the patch types
197  wordList types() const;
198 
199  //- Return BoundaryField of the cell values neighbouring
200  // the boundary
202 
203  //- Return a list of pointers for each patch field with only those
204  // pointing to interfaces being set
206 
207  //- Return a list of pointers for each patch field with only those
208  // pointing to interfaces being set
210 
211  //- Write boundary field as dictionary entry
212  void writeEntry(const word& keyword, Ostream& os) const;
213 
214 
215  // Member operators
216 
217  //- Assignment to BoundaryField<Type, PatchField, BoundaryMesh>
218  void operator=(const GeometricBoundaryField&);
219 
220  //- Assignment to FieldField<PatchField, Type>
222 
223  //- Assignment to Type
224  void operator=(const Type&);
225 
226 
227  //- Forced assignment to
228  // BoundaryField<Type, PatchField, BoundaryMesh>
229  void operator==(const GeometricBoundaryField&);
230 
231  //- Forced assignment to FieldField<PatchField, Type>
233 
234  //- Forced assignment to Type
235  void operator==(const Type&);
236  };
237 
238 
239 private:
240 
241  // Private data
242 
243  //- Current time index.
244  // Used to trigger the storing of the old-time value
245  mutable label timeIndex_;
246 
247  //- Pointer to old time field
249 
250  //- Pointer to previous iteration (used for under-relaxation)
252 
253  //- Boundary Type field containing boundary field values
254  GeometricBoundaryField boundaryField_;
255 
256 
257  // Private Member Functions
258 
259  //- Read the field from the dictionary
260  void readFields(const dictionary&);
261 
262  //- Read the field - create the field dictionary on-the-fly
263  void readFields();
264 
265 
266 public:
267 
268  //- Runtime type information
269  TypeName("GeometricField");
270 
271 
272  // Public typedefs
273 
274  typedef typename Field<Type>::cmptType cmptType;
275 
276  // Static Member Functions
277 
278  //- Return a null geometric field
279  inline static const GeometricField<Type, PatchField, GeoMesh>& null();
280 
281 
282  // Constructors
283 
284  //- Constructor given IOobject, mesh, dimensions and patch type.
285  // This allocates storage for the field but not values.
286  // Used only within this class to create TEMPORARY variables
288  (
289  const IOobject&,
290  const Mesh&,
291  const dimensionSet&,
292  const word& patchFieldType=PatchField<Type>::calculatedType()
293  );
294 
295  //- Constructor given IOobject, mesh, dimensions and patch types.
296  // This allocates storage for the field but not values.
297  // Used only within this class to create TEMPORARY variables
299  (
300  const IOobject&,
301  const Mesh&,
302  const dimensionSet&,
303  const wordList& wantedPatchTypes,
304  const wordList& actualPatchTypes = wordList()
305  );
306 
307  //- Constructor given IOobject, mesh, dimensioned<Type> and patch type.
309  (
310  const IOobject&,
311  const Mesh&,
312  const dimensioned<Type>&,
313  const word& patchFieldType=PatchField<Type>::calculatedType()
314  );
315 
316  //- Constructor given IOobject, mesh, dimensioned<Type> and patch types.
318  (
319  const IOobject&,
320  const Mesh&,
321  const dimensioned<Type>&,
322  const wordList& wantedPatchTypes,
323  const wordList& actualPatchTypes = wordList()
324  );
325 
326  //- Constructor from components
328  (
329  const IOobject&,
330  const Mesh&,
331  const dimensionSet&,
332  const Field<Type>&,
333  const PtrList<PatchField<Type> >&
334  );
335 
336  //- Construct and read given IOobject
338  (
339  const IOobject&,
340  const Mesh&,
341  const bool readOldTime = true
342  );
343 
344  //- Construct from dictionary
346  (
347  const IOobject&,
348  const Mesh&,
349  const dictionary&
350  );
351 
352  //- Construct as copy
354  (
356  );
357 
358  //- Construct as copy of tmp<GeometricField> deleting argument
359  #ifndef NoConstructFromTmp
361  (
363  );
364  #endif
365 
366  //- Construct as copy resetting IO parameters
368  (
369  const IOobject&,
371  );
372 
373  //- Construct as copy of tmp<GeometricField> resetting IO parameters
374  #ifndef NoConstructFromTmp
376  (
377  const IOobject&,
379  );
380  #endif
381 
382  //- Construct as copy resetting name
384  (
385  const word& newName,
387  );
388 
389  //- Construct as copy resetting name
390  #ifndef NoConstructFromTmp
392  (
393  const word& newName,
395  );
396  #endif
397 
398  //- Construct as copy resetting IO parameters and patch type
400  (
401  const IOobject&,
403  const word& patchFieldType
404  );
405 
406  //- Construct as copy resetting IO parameters and boundary types
408  (
409  const IOobject&,
411  const wordList& patchFieldTypes,
412  const wordList& actualPatchTypes = wordList()
413  );
414 
415 
416  //- Destructor
417  virtual ~GeometricField();
418 
419 
420  // Member Functions
421 
422  //- Return dimensioned internal field
424 
425  //- Return dimensioned internal field
427 
428  //- Return internal field
430 
431  //- Return internal field
432  inline const InternalField& internalField() const;
433 
434  //- Return reference to GeometricBoundaryField
435  GeometricBoundaryField& boundaryField();
436 
437  //- Return reference to GeometricBoundaryField for const field
438  inline const GeometricBoundaryField& boundaryField() const;
439 
440  //- Return the time index of the field
441  inline label timeIndex() const;
442 
443  //- Return the time index of the field
444  inline label& timeIndex();
445 
446  //- Store the old-time fields
447  void storeOldTimes() const;
448 
449  //- Store the old-time field
450  void storeOldTime() const;
451 
452  //- Return the number of old time fields stored
453  label nOldTimes() const;
454 
455  //- Return old time field
457 
458  //- Return non-const old time field
459  // (Not a good idea but it is used for sub-cycling)
461 
462  //- Store the field as the previous iteration value
463  void storePrevIter() const;
464 
465  //- Return previous iteration field
467 
468  //- Correct boundary field
470 
471  //- Does the field need a reference level for solution
472  bool needReference() const;
473 
474  //- Return a component of the field
476  (
477  const direction
478  ) const;
479 
480  //- WriteData member function required by regIOobject
481  bool writeData(Ostream&) const;
482 
483  //- Return transpose (only if it is a tensor field)
485 
486  //- Relax field (for steady-state solution).
487  // alpha = 1 : no relaxation
488  // alpha < 1 : relaxation
489  // alpha = 0 : do nothing
490  void relax(const scalar alpha);
491 
492  //- Relax field (for steady-state solution).
493  // alpha is read from controlDict
494  void relax();
495 
496  //- Select the final iteration parameters if `final' is true
497  // by returning the field name + "Final"
498  // otherwise the standard parameters by returning the field name
499  word select(bool final) const;
500 
501  //- Helper function to write the min and max to an Ostream
502  void writeMinMax(Ostream& os) const;
503 
504 
505  // Member function *this operators
506 
507  void negate();
508 
509  void replace
510  (
511  const direction,
513  );
514 
515  void replace
516  (
517  const direction,
518  const dimensioned<cmptType>&
519  );
520 
521  void max(const dimensioned<Type>&);
522  void min(const dimensioned<Type>&);
523 
524  void max
525  (
527  const dimensioned<Type>&
528  );
529 
530  void min
531  (
533  const dimensioned<Type>&
534  );
535 
536  void scale
537  (
540  );
541 
542  void scale
543  (
545  const dimensioned<Type>&
546  );
547 
548 
549  // Member operators
550 
553  void operator=(const dimensioned<Type>&);
554 
556  void operator==(const dimensioned<Type>&);
557 
560 
563 
566 
569 
570  void operator+=(const dimensioned<Type>&);
571  void operator-=(const dimensioned<Type>&);
572 
573  void operator*=(const dimensioned<scalar>&);
574  void operator/=(const dimensioned<scalar>&);
575 
576 
577  // Ostream operators
578 
579  friend Ostream& operator<< <Type, PatchField, GeoMesh>
580  (
581  Ostream&,
583  );
584 
585  friend Ostream& operator<< <Type, PatchField, GeoMesh>
586  (
587  Ostream&,
589  );
590 };
591 
592 
593 template<class Type, template<class> class PatchField, class GeoMesh>
594 Ostream& operator<<
595 (
596  Ostream&,
598  GeometricBoundaryField&
599 );
600 
601 
602 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
603 
604 } // End namespace Foam
605 
606 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
607 
608 #include "GeometricFieldI.H"
609 
610 #ifdef NoRepository
611 # include "GeometricField.C"
612 #endif
613 
614 #include "GeometricFieldFunctions.H"
615 
616 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
617 
618 #endif
619 
620 // ************************************************************************* //
Foam::GeometricField::scale
void scale(const GeometricField< Type, PatchField, GeoMesh > &, const GeometricField< Type, PatchField, GeoMesh > &)
regIOobject.H
Foam::GeometricField::GeometricBoundaryField::interfaces
LduInterfaceFieldPtrsList< Type > interfaces() const
Return a list of pointers for each patch field with only those.
Definition: GeometricBoundaryField.C:570
Foam::GeometricField::GeometricBoundaryField::evaluate
void evaluate()
Evaluate boundary conditions.
Definition: GeometricBoundaryField.C:465
GeometricFieldFunctions.H
Foam::IOobject
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:91
Foam::GeometricField::component
tmp< GeometricField< cmptType, PatchField, GeoMesh > > component(const direction) const
Return a component of the field.
Foam::GeometricField::fieldPrevIterPtr_
GeometricField< Type, PatchField, GeoMesh > * fieldPrevIterPtr_
Pointer to previous iteration (used for under-relaxation)
Definition: GeometricField.H:250
Foam::GeometricField::GeometricBoundaryField::operator==
void operator==(const GeometricBoundaryField &)
Forced assignment to.
Foam::GeometricField::GeometricBoundaryField::updateCoeffs
void updateCoeffs()
Update the boundary condition coefficients.
Definition: GeometricBoundaryField.C:447
Foam::GeometricField::dimensionedInternalField
DimensionedInternalField & dimensionedInternalField()
Return dimensioned internal field.
Definition: GeometricField.C:713
Foam::word
A class for handling words, derived from string.
Definition: word.H:59
Foam::FieldField
Generic field type.
Definition: FieldField.H:51
Foam::GeometricField::writeData
bool writeData(Ostream &) const
WriteData member function required by regIOobject.
Definition: GeometricField.C:985
FieldField.H
Foam::GeometricField::boundaryField_
GeometricBoundaryField boundaryField_
Boundary Type field containing boundary field values.
Definition: GeometricField.H:253
Foam::tmp
A class for managing temporary objects.
Definition: PtrList.H:118
DimensionedField.H
Foam::GeometricField::operator/=
void operator/=(const GeometricField< scalar, PatchField, GeoMesh > &)
Foam::constant::atomic::alpha
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
Definition: readThermalProperties.H:216
Foam::GeometricField::TypeName
TypeName("GeometricField")
Runtime type information.
Foam::GeometricField::oldTime
const GeometricField< Type, PatchField, GeoMesh > & oldTime() const
Return old time field.
Definition: GeometricField.C:804
Foam::GeometricField::readFields
void readFields()
Read the field - create the field dictionary on-the-fly.
Definition: GeometricField.C:72
Foam::GeometricField::boundaryField
GeometricBoundaryField & boundaryField()
Return reference to GeometricBoundaryField.
Definition: GeometricField.C:735
Foam::GeometricField::GeometricBoundaryField::readField
void readField(const DimensionedField< Type, GeoMesh > &field, const dictionary &dict)
Read the boundary field.
Definition: GeometricBoundaryField.C:34
Foam::GeometricField::BoundaryMesh
GeoMesh::BoundaryMesh BoundaryMesh
Definition: GeometricField.H:98
Foam::dimensionSet
Dimension set for the base types.
Definition: dimensionSet.H:116
Foam::GeometricField::select
word select(bool final) const
Select the final iteration parameters if `final' is true.
Definition: GeometricField.C:955
lduInterfaceFieldPtrsList.H
Foam::GeometricField::operator=
void operator=(const GeometricField< Type, PatchField, GeoMesh > &)
Foam::GeometricField::GeometricBoundaryField::bmesh_
const BoundaryMesh & bmesh_
Reference to BoundaryMesh for which this field is defined.
Definition: GeometricField.H:112
Foam::GeometricField::cmptType
Field< Type >::cmptType cmptType
Definition: GeometricField.H:273
Foam::GeometricField::timeIndex_
label timeIndex_
Current time index.
Definition: GeometricField.H:244
Foam::GeometricField::needReference
bool needReference() const
Does the field need a reference level for solution.
Definition: GeometricField.C:894
Foam::GeometricField::nOldTimes
label nOldTimes() const
Return the number of old time fields stored.
Definition: GeometricField.C:789
Foam::GeometricField::readIfPresent
bool readIfPresent()
Read from file if it is present.
Definition: GeometricField.C:95
Foam::GeometricField::GeometricBoundaryField::operator=
void operator=(const GeometricBoundaryField &)
Assignment to BoundaryField<Type, PatchField, BoundaryMesh>
Foam::GeometricField::GeometricBoundaryField::scalarInterfaces
lduInterfaceFieldPtrsList scalarInterfaces() const
Return a list of pointers for each patch field with only those.
Definition: GeometricBoundaryField.C:596
Foam::wordList
List< word > wordList
A List of words.
Definition: fileName.H:54
Foam::GeometricField::min
void min(const dimensioned< Type > &)
Foam::GeometricField::storeOldTimes
void storeOldTimes() const
Store the old-time fields.
Definition: GeometricField.C:744
Foam::GeometricField::PatchFieldType
PatchField< Type > PatchFieldType
Definition: GeometricField.H:102
Foam::GeometricField::Mesh
GeoMesh::Mesh Mesh
Definition: GeometricField.H:97
Foam::GeometricField::negate
void negate()
Definition: GeometricField.C:1109
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:59
Foam::Field< Type >
Foam::GeometricField::operator+=
void operator+=(const GeometricField< Type, PatchField, GeoMesh > &)
Foam::GeometricField::writeMinMax
void writeMinMax(Ostream &os) const
Helper function to write the min and max to an Ostream.
Definition: GeometricField.C:972
Foam::GeometricField::readOldTimeIfPresent
bool readOldTimeIfPresent()
Read old time field from file if it is present.
Definition: GeometricField.C:132
LduInterfaceFieldPtrsList.H
List of coupled interface fields to be used in coupling.
Foam::GeometricField::GeometricBoundaryField::GeometricBoundaryField
GeometricBoundaryField(const BoundaryMesh &)
Construct from a BoundaryMesh.
Foam::GeometricField::prevIter
const GeometricField< Type, PatchField, GeoMesh > & prevIter() const
Return previous iteration field.
Definition: GeometricField.C:868
Foam::GeometricField::internalField
InternalField & internalField()
Return internal field.
Definition: GeometricField.C:724
Foam::UPtrList
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: UPtrList.H:53
Foam::PtrList
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: List.H:61
Foam::GeoMesh::BoundaryMesh
MESH::BoundaryMesh BoundaryMesh
Definition: GeoMesh.H:62
Foam::GeometricField::storeOldTime
void storeOldTime() const
Store the old-time field.
Definition: GeometricField.C:765
Foam::GeometricField::operator*=
void operator*=(const GeometricField< scalar, PatchField, GeoMesh > &)
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
Foam::GeometricField::operator-=
void operator-=(const GeometricField< Type, PatchField, GeoMesh > &)
GeometricField.C
Foam::dimensioned< Type >
Foam::GeoMesh
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
Definition: GeoMesh.H:46
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::GeometricField::timeIndex
label timeIndex() const
Return the time index of the field.
Definition: GeometricFieldI.H:68
Foam::GeometricField::correctBoundaryConditions
void correctBoundaryConditions()
Correct boundary field.
Definition: GeometricField.C:885
Foam::GeometricField::T
tmp< GeometricField< Type, PatchField, GeoMesh > > T() const
Return transpose (only if it is a tensor field)
Definition: GeometricField.C:996
Foam::GeometricField::GeometricBoundaryField::types
wordList types() const
Return a list of the patch types.
Definition: GeometricBoundaryField.C:534
Foam::GeometricField::max
void max(const dimensioned< Type > &)
Foam::GeometricField::storePrevIter
void storePrevIter() const
Store the field as the previous iteration value.
Definition: GeometricField.C:843
Foam::GeometricField::GeometricField
GeometricField(const IOobject &, const Mesh &, const dimensionSet &, const word &patchFieldType=PatchField< Type >::calculatedType())
Constructor given IOobject, mesh, dimensions and patch type.
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Foam::GeometricField::operator==
void operator==(const tmp< GeometricField< Type, PatchField, GeoMesh > > &)
Foam::GeometricField::relax
void relax()
Relax field (for steady-state solution).
Definition: GeometricField.C:930
dimensionedTypes.H
Foam::direction
unsigned char direction
Definition: direction.H:43
Foam::GeometricField::~GeometricField
virtual ~GeometricField()
Destructor.
Definition: GeometricField.C:701
Foam::GeometricField::replace
void replace(const direction, const GeometricField< cmptType, PatchField, GeoMesh > &)
Foam::GeometricField::DimensionedInternalField
DimensionedField< Type, GeoMesh > DimensionedInternalField
Definition: GeometricField.H:100
Foam::GeometricField::InternalField
Field< Type > InternalField
Definition: GeometricField.H:101
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:53
Foam::LduInterfaceFieldPtrsList
Definition: LduInterfaceFieldPtrsList.H:48
Foam::GeometricField::GeometricBoundaryField::boundaryInternalField
GeometricBoundaryField boundaryInternalField() const
Return BoundaryField of the cell values neighbouring.
Definition: GeometricBoundaryField.C:552
Foam::GeometricField
Generic GeometricField class.
Definition: surfaceFieldsFwd.H:52
Foam::GeoMesh::Mesh
MESH Mesh
Definition: GeoMesh.H:61
Foam::GeometricField::GeometricBoundaryField
Definition: GeometricField.H:105
Foam::GeometricField::GeometricBoundaryField::writeEntry
void writeEntry(const word &keyword, Ostream &os) const
Write boundary field as dictionary entry.
Definition: GeometricBoundaryField.C:621
Foam::DimensionedField
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: DimensionedField.H:51
GeometricFieldI.H
Foam::GeometricField::field0Ptr_
GeometricField< Type, PatchField, GeoMesh > * field0Ptr_
Pointer to old time field.
Definition: GeometricField.H:247