The surfaceFieldValue
function object provides options to manipulate surface field data into derived forms, e.g. to report summations, averages and extrema; to calculate the volumetric or mass flux across a patch.
Base operations:
none
: no operationmin
: minimummax
: maximumsum
: summationsumMag
: sum of magnitudessumDirection
:sumDirectionBalance
:average
: averageareaAverage
: area averageareaIntegrate
: area integralCoV
: Coefficient of VariationareaNormalAverage
: area-normal averageareaNormalIntegrate
: area-normal integraluniformity
: uniformity indexWeighted operations:
weightedSum
weightedAverage
weightedAreaAverage
weightedAreaIntegrate
weightedUniformity
Absolute weighted operations:
absWeightedSum
absWeightedAverage
absWeightedAreaAverage
absWeightedAreaIntegrate
absWeightedUniformity
Example of the surfaceFieldValue
function object by using functions
sub-dictionary in system/controlDict
file:
surfaceFieldValue1 { // Mandatory entries (unmodifiable) type surfaceFieldValue; libs (fieldFunctionObjects); // Mandatory entries (runtime modifiable) fields (<field1> <field2> ... <fieldN>); operation <operationType>; regionType patch; name <patch>; // Optional entries (runtime modifiable) postOperation none; weightField alpha1; scaleFactor 1.0; writeArea false; surfaceFormat none; // Optional (inherited) entries writeFields false; scalingFactor 1.0; writePrecision 8; writeToFile true; useUserTime true; region region0; enabled true; log true; timeStart 0; timeEnd 1000; executeControl timeStep; executeInterval 1; writeControl timeStep; writeInterval 1; }
where the entries mean:
Property | Description | Type | Required | Default |
---|---|---|---|---|
type | Type name: surfaceFieldValue | word | yes | - |
libs | Library name: fieldFunctionObjects | word | yes | - |
fields | Names of operand fields | wordList | yes | - |
regionType | Face regionType: see below | word | yes | - |
name | Name for regionType | word | yes | - |
operation | Operation type: see below | word | yes | - |
postOperation | Post-operation type: see below | word | no | none |
weightField | Name of field to apply weighting | word | no | none |
scaleFactor | Output value scaling factor | scalar | no | 1.0 |
writeArea | Write the surface area | bool | no | false |
surfaceFormat | Output value format | word | conditional on writeFields | none |
The inherited entries are elaborated in:
Options for the regionType
entry:
faceZone | The `name` entry to specify the faceZone patch | The `name` entry to specify the patch functionObjectSurface | The `name` entry to specify a polySurface sampledSurface | A `sampledSurfaceDict` sub-dictionary and `name`
Options for the operation
entry:
none | no operation min | minimum max | maximum sum | sum sumMag | sum of component magnitudes sumDirection | sum values that are positive in given direction sumDirectionBalance | sum of balance of values in given direction average | ensemble average areaAverage | area-weighted average areaIntegrate | area integral CoV | coefficient of variation: standard deviation/mean areaNormalAverage | area-weighted average in face normal direction areaNormalIntegrate | area-weighted integral in face normal directon uniformity | uniformity index weightedSum | weighted sum weightedAverage | weighted average weightedAreaAverage | weighted area average weightedAreaIntegrate | weighted area integral weightedUniformity | weighted uniformity index absWeightedSum | sum using absolute weighting absWeightedAverage | average using absolute weighting absWeightedAreaAverage | area average using absolute weighting absWeightedAreaIntegrate | area integral using absolute weighting absWeightedUniformity | uniformity index using absolute weighting
Options for the postOperation
entry:
none | No additional operation after calculation mag | Component-wise `mag()` after normal operation sqrt | Component-wise `sqrt()` after normal operation
Usage by the postProcess
utility is not available.
areaNormalAverage
and areaNormalIntegrate
operations are written as the first component of a field with the same rank as the input field.faceZone
can only consist of boundary faces.functionObjectSurface
:subRegion
should not be used to select surfaces. Instead specify the regionType functionObjectSurface
and provide the name.sampledSurface
:interpolate=true
they use interpolationCellPoint
otherwise they use cell valuessampledSurface
is logically only in one cell so interpolation will be wrong when triangles are larger than cells. This can only happen for sampling on a triSurfaceMesh
Uniformity:
\[ UI(\phi) = 1 - \frac{1}{2 \overline{\phi} A} \int{\left| W \phi \cdot \hat{n} - \bar{W} \bar{\phi}\right| d\vec{A}} \,,\; \bar{\phi} = \frac{\int{W \phi \cdot d\vec{A}}}{\int{W \cdot d\vec{A}}} \]
A velocity uniformity index is calculated with no weighting (W=1) and \(\phi = \u\).
A scalar concentration uniformity index is calculated with either \(\rho \u\) or \(\u\) for weighting and \(\phi = conc\).
Data is written to file
$FOAM_CASE/postProcessing/<function object>/<start time>/surfaceFieldValue.dat
An example of a typical output is given below:
# Area : 1.2500000000e-03 # Scale factor : 1.0000000000e+00 # Time weightedAverage(H2O) weightedAverage(T) 0.01 9.9999967766e-03 4.7103661930e+02 0.02 9.9999999984e-03 4.7138303908e+02 0.03 1.0000000000e-02 4.7183514514e+02 0.04 1.0000000000e-02 4.7224152840e+02 0.05 1.0000000032e-02 4.7252916359e+02 0.06 1.0000076331e-02 4.7287719550e+02 0.07 1.0013972934e-02 4.7510153455e+02
Tutorial:
verticalChannel
tutorial: $FOAM_TUTORIALS/lagrangian/reactingParcelFoam/verticalChannelSource code:
Related:
History