OpenFOAM® v1806: New and improved post-processing
New In-situ processing with ParaView Catalyst
The new function object adaptor for ParaView Catalyst marks a significant addition in post-processing and visualisation capabilities for OpenFOAM.
Catalyst adds in-situ and live visualisation capabilities to arbitrary OpenFOAM simulations. Rather than post-processing at the end of a simulation, it is now possible to harness the capabilities of ParaView and generate visualisation results simultaneous to the simulation. The scripts for the visualisation pipelines can be created interactively using the ParaView GUI.
There can be several benefits of using the Catalyst in-situ visualisation. In general, it is more efficient to avoid writing intermediate results solely for the sake of visualisation. It is faster and uses less disk space to generate the desired visualisation images directly. This becomes extremely important for large meshes and when a high temporal resolution is required for the visualisation.
The example animation below shows an overset case where the images have been created at a high temporal frequency during the calculation, and the view configured to produce the composite image for all mesh regions:
The live visualisation option can also be useful to examine the current simulation fields without writing to disk. Since the live visualisation is incorporated into the OpenFOAM time loop, it can be used to pause the simulation and set breakpoints. These features make it invaluable during the development of new solvers or physics, to gain insights of the behaviour of the simulation and models.
The Catalyst function object is run-time selectable and supports in-situ conversion of the following types:
- finite volume meshes and fields. Single or multi-region.
- finite area meshes and fields. Single region.
- lagrangian (clouds). Single or multiple clouds.
The Catalyst function object is a community module that has been developed by OpenCFD in collaboration with Simone Bna (CINECA) and with the kind support of Andy Bauer (Kitware). The work has been partially supported by PRACE.
Installation support with spack is current approaching completion and will be available within a few weeks.
Build requirements
- OpenFOAM-v1806 or newer.
- ParaView 5.4 or newer, compiled with python support.
ParaView 5.5 or newer is recommended for its more advanced script generation support. If building from source, the additional patches applied by the ThirdParty makeParaView script are also recommended for better support of the OpenFOAM -case option.
- Source code
- $WM_PROJECT_DIR/modules/catalyst
- Examples
- $WM_PROJECT_DIR/modules/catalyst/tutorials/finiteArea/sphereSurfactantFoam/sphereTransport
$WM_PROJECT_DIR/modules/catalyst/tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater
$WM_PROJECT_DIR/modules/catalyst/tutorials/incompressible/icoFoam/cavity
$WM_PROJECT_DIR/modules/catalyst/tutorials/lagrangian/coalChemistryFoam/simplifiedSiwek
$FOAM_TUTORIALS/incompressible/overPimpleDyMFoam/twoSimpleRotors/system/catalyst
Writing residual fields
The residuals function object now enables users to create linear solver residual fields, which are stored on the mesh database and can be optionally written to disk according to the chosen write controls. The following animation shows the evolution of the p_rgh field and its initial residual for the BernardCells tutorial case.
- Source code
- $FOAM_SRC/functionObjects/utilities/residuals
- Examples
- $FOAM_TUTORIALS/heatTransfer/buoyantBoussinesqPimpleFoam/BernardCells/system/residuals
$FOAM_TUTORIALS/incompressible/pisoFoam/LES/motorBike/motorBike/system/stabilizationSchemes
Updated writing of VTK format data
Updated vtkWrite function object
Now disabled in -postProcess mode to avoid accidental overwrite of run-time conversions.
The new default is to write the without additional polyhedral decomposition, since this produces compacter files and VTK manages this in most instances. The optional dictionary decompose flag can be used to reinstate the old behaviour.
- Source code
- $FOAM_SRC/functionObjects/utilities/vtkWrite
- Examples
- $FOAM_TUTORIALS/incompressible/simpleFoam/windAroundBuildings
New vtkCloud function object
This new function object writes Lagrangian data in the VTK polyData format with the extension .vtp during a simulation. In parallel, all data are written from the master.
The result is a .vtp per cloud and time-step containing positions and all of the selected fields.
The time information is stored redundantly. Each data file contains this information in the first XML comment within the file. For example,
Additionally, a .vtp.series time series file is created for each cloud. This file contains a listing of file names and their associated times in a human readable format that can also be loaded directly as a sequence with ParaView 5.5 or later.
- Source code
- $FOAM_SRC/functionObjects/lagrangian/vtkCloud
- Examples
- $FOAM_TUTORIALS/lagrangian/coalChemistryFoam/simplifiedSiwek
Updated writing of Ensight format data
EnSight format for sampled surfaces
The sampled surface geometry is now written in the same directories as the sampled fields. This allows a more flexible response to changes in the underlying sampled surface geometry.
The surface output writers are now triggered when a change in the surface geometry occurs. This fixes a previous bug where the collated EnSight surface format would not follow changes the iso-surfaces.
Updated ensightWrite function object
Now disabled in -postProcess mode to avoid accidental overwrite of run-time conversions.
The ensight mesh geometry is now stored in the same location as the fields, so there is no initial distinction in the output between moving and non-moving simulations. Only when the ensight case file is written will a distinction be seen.
For moving cases, the geometry varies with time and a combination of a time-set and a data mask are used to locate the files.
model: 1 data/********/geometry
For non-moving cases, the geometry is time-invariant and is referenced directly.
model: data/00000000/geometry
The ensight case file is now flushed every time the function object write is called. This ensures that the case file always contains the current values and allows immediate loading of the case file and processing of the data during the calculation.
The ensightWrite function object now supports the nodeValues option for consistency with the foamToEnsight utility.
- Source code
- $FOAM_SRC/functionObjects/utilities/ensightWrite
- Examples
- $FOAM_TUTORIALS/incompressible/simpleFoam/windAroundBuildings
$FOAM_TUTORIALS/incompressible/pimpleFoam/RAS/wingMotion/wingMotion2D˙pimpleFoam
$FOAM_TUTORIALS/incompressible/simpleFoam/motorBike
Improved sampling options
Surface sampleScheme
The surface sampling routines can specify an alternative sampling scheme for obtaining the face values instead of just using the cell value.
type surfaces;
libs ("libsampling.so");
...
sampleScheme cellPoint;
interpolationScheme cellPoint;
}
- Source code
- $FOAM_SRC/sampling/sampledSurface/sampledSurfaces
$FOAM_SRC/src/sampling/surfMeshSample/surfMeshSamplers
New cellCentre sampledSet
Samples on cell centres, can optionally be limited based on a bounding box. This can be used, for example, to extract volume fields into a CSV or other format for use with external programs.
- Source code
- $FOAM_SRC/sampling/sampledSet/cellCentre
- Examples
- $FOAM_SRC/compressible/rhoSimpleFoam/squareBend
Bounded sampling planes
The new bounds entry for sampling planes enables users to restrict the extent of the plane, as shown below:
{
type plane;
source cells;
planeType pointAndNormal;
pointAndNormalDict
{
normal (-1 0 0);
point (-0.04 0 0);
}
bounds (-1 -1 -1) (0 0 1);
}
Distance surface sampling
Users can now define non-closed signed distance surfaces. This allows their use as flexible alternative to a sampled plane with bounding box restrictions, or to sample on arbitrary surface, e.g. a hemisphere in an outflow.
- Source code
- $FOAM_SRC/sampling/sampledSurface/distanceSurface
$FOAM_SRC/sampling/surfMeshSample/distanceSurface/surfMeshSampleDistanceSurface - Examples
- $FOAM_SRC/compressible/rhoSimpleFoam/squareBend
Derived sampled fields
Now support the specification of a rhoRef when calculating rhoU or pTotal as a derived sampled surface field for incompressible cases.
- Source code
- $FOAM_SRC/sampling/surfMeshSample/surfMeshSamplers
- Examples
- $FOAM_SRC/incompressible/rhoSimpleFoam/squareBend
New uniformity index
Added a new flow uniformity operation to the surfaceFieldValue function object, available in regular, weighted and absolute weighted versions.
Note: When the mass-flow is taken for the weight field, an intermediate sampling into surfFields is likely to be required.