Sampling
Sampling refers to collecting the relevant flow quantities for input into the wall model. The main parameter here is the distance to the point where the sampling occurs, \(h\). The library provides means for setting the value of the distance individually for each wall face.
Selecting the Sampler
The library provides two samplers, which are selected using the sampler
keyword in the wall model’s dictionary.
The alternatives are Tree
and Crawling
, the former being the default setting.
The Tree
sampler uses the indexedOctree
class available in OpenFOAM in order to search for the cell
containing any given point.
For each face, the point to search for is computed by following the face normal for a distance \(h\) prescribed by
the user for this face.
The advantage of the Tree
sampler is that it does not rely on mesh structure in any way.
NB: the Tree
sampler is known to crash reconstructPar
, when cyclicAMI
boundaries are present
in the case.
The Crawling
sampler, by contrast, relies on the presence of prismatic mesh layers adjacent to the wall.
Starting from the wall face, it searches for the opposite face within the current cell, and continues going
in the wall-normal direction cell by cell, until the cell centre of the cell it is currently in is located at a distance
\(\geq h\).
The Crawling
sampler is the recommended choice if prismatic layers are present in the mesh, because it is
significantly faster for large cases, and allows more flexibility in how to prescribe \(h\), see next section for
details.
There is one situation in which the Tree
and Crawling
samplers behave inconsistently: when the distance
\(h\) sampler will revert to using the wall-adjacent cell in this case.
The Crawling
sampler will simply continue to crawl up cell by cell until it it hits a patch (typically a boundary
between processors) and then take the last valid cell’s centre to use for sampling.
When solution data is written to disk, the library will write out a field called SamplingCells
, which can be
examined in order to see, which cells are used for sampling.
The default value of this field is -1, but the cells, which are used for sampling the value will be set to the index of
the corresponding patch.
We encourage the users to examine SamplingCells
to confirm that the cell selection worked as expected.
Prescribing \(h\)
The values of \(h\) should be set in a field called hSampler
.
The setting of appropriate values is done in the same way as for any other solution field.
To that end, at the wall boundaries, the boundary condition for hSampler
should be set to fixedValue
.
The desired values are then either set for the whole patch using the uniform
keyword or alternatively prescribed
on a face-by-face basis using an OpenFOAM list.
On other boundaries of type patch
, the zeroGradient
boundary condition can be used.
When the Tree
sampler is used, the values in the hSampler
will be interpreted as the desired distance to the
sampling point.
Note, that the value 0 is reserved for sampling from the wall-adjacent cell.
By default, the same will be done by the Crawling
sampler, however alternatively one can let the sampler interpret
the set values as the index of the consecutive off-wall cell, from which to do the sampling.
So, for example, hSampler
equal to 2 will refer to sampling from the second off-wall cell.
In order to do this, the hIsIndex
keyword should be set to yes
in the dictionary of the wall model in
nut
.
Interpolation
By default, the wall model input will be sampled from the cell center of the cell found by the sampler. This means that if \(h\) is prescribed as distance, the actual sampling distance may be different. To avoid that, it is possible to interpolate the field values within the cell. This functionality is built into OpenFOAM, and several interpolation algorithms are available. See also This OpenFOAM Wiki article. Perhaps the most suitable choice is cellPointFace and also cellPoint. Note that interpolation within the wall-adjacent cell is not possible.
A summary of the parameters pertaining to sampling are given below.
1sampler Tree; //Crawling
2hIsIndex 0; // 1
3interpolation cell; // cellPoint, cellPointFace ...