The OpenFOAM Foundation is pleased to announce the release of version 8 of the OpenFOAM open source CFD toolbox. Version 8 is a snapshot of the OpenFOAM development version which, through sustainable development, is always-releasable. It provides new functionality and major improvements to existing code, with strict demands on usability, robustness and extensibility.
OpenFOAM 8 includes the following key developments.
- Multiphase: selectable interpolation for interface-capturing, PLIC scheme.
- Reacting multiphase: consolidated multiphaseEulerFoam solver and model development.
- Transport: new MomentumTransportModels and ThermophysicalTransportModels libraries.
- Thermophysical: thermodynamics and equation of state models, data input, refactoring.
- Surface Film: huge performance improvements and better surface handling.
- Heat transfer: better numerics and case setup, new thermal comfort modelling.
- Particle tracking: renamed uncoupled solvers, improved tracking efficiency, injection.
- Other models: transient/steady-state solvers, boundary conditions, reactions.
- Mesh: improved snappyHexMesh and blockMesh, face centre calculation, cyclic patches.
- Function Objects: improved visualization/field, residence time and configuration.
- Case Configuration: new configuration/initialisation tools, coded Function1.
- Computation: better data I/O, field caching, support for Arm processors.
- Approximately 710 code commits, 200+ resolved issues
- ISO/IEC 14882:2011 (C++11): tested for GCC v5.4+, Clang v3.8+, Intel ICC v18.0+.
OpenFOAM 8 is packaged for the following platforms, with ParaView 5.6.0 including Mesa with LLVM/Gallium acceleration for systems without a (supported) graphics card:
- Ubuntu Linux: packaged installation for Ubuntu 16.04, 18.04 and 20.04;
- Other Linux: installation with a Docker container; or compilation from source code;
- Windows 10: installation using Windows Subsystem for Linux with Ubuntu packs;
- macOS: installation with a Docker container.
The OpenFOAM 8 Source Pack can be compiled on suitable Linux platforms.
- Modelling: New interface capturing framework allows users to specify the interpolation method for two-phase flows in fvSchemes [ commit fa79ba ]. New family of interpolation schemes for multiphase interface handling based on piecewise-linear interface calculation (PLIC) [ commit 1611e0 ]. [ Further information: “Interface Capturing in OpenFOAM” ]
- Performance/Numerics: Phase fraction limiter for bubble-generated turbulence in mixtureKEpsilon model avoids spurious turbulence generation where bubbles are not present [ commit f84708 ]. Centralised the control parameters for multiphase VoF [ commit 8af31c ].
- Post-processing: phaseMap function object writes a single phase map field for multiple phases [ commit 35a04f ].
With VTT Finland and HZDR Dresden-Rossendorf
- Consolidated multiphaseEulerFoam: replicates and supersedes reactingMultiphaseEulerFoam, twoPhaseEulerFoam and reactingTwoPhaseEulerFoam. With reactions off, the “old” multiphaseEulerFoam is reproduced [ commit b83245 ]. A reference phase can be specified whose phase equation is not solved, replciating the “old” (reacting)TwoPhaseEulerFoam [ commit d1170c ], removing duplicate functionality [ commits d1170c ].
- Phase Momentum: Improved implicit phase pressure handling for more robust and stable simulation of packing in particle beds [ commit 3fbd9a ] and better performance on packed beds [ commit ba6b55 ]. The kinetic theory model is generalised to any pair of phases [ commit 01f4fa ].
- Other Phase Modelling: Improved the order of thermodynamic, reaction and specie fraction corrections [ commit 89023d ]. Corrections to ensure velocities and fluxes of phases correspond to the overall mixture [ commit 27ce5a ] and for MRF calculations [ commit 658b0c ]. Added code structure to support multi-component diffusion modelling for reacting phases [ commit 854dae ].
- Phase Change: Thermal phase change and boundary conditions [ commits 94a5e0 ]. Corrections to mass transfer processes [ commit df6835 ] and improved storage of phase pairs and the specification of their interface composition models [ commit 474962 ].
- Population Balance: Added fractal shape to the dispersed phase [ commit cfbb38 ]. Synchronised mass transfer rates and source terms [ commit cebc40 ]. Added laminar shear to PrinceBlanch coalescence model [ commit 6ad711 ].
- Interface: Surface area per unit volume can be stored for particles of the dispersed phase [ commit 8df44a ]. Saturation models can be specified for pairs of phases so that multiple transfer processes can be simulated across different interfaces and on different phases at walls [ commit aedb44 ]. New Gunn heat transfer model for fluidized bed simulations from Alberto Passalaqua [ commit 8e2402 ]. Fully defined the alphatWallBoilingWallFunction boundary condition [ commit 4d0661 ].
- Reactions: New surfaceArrheniusReactionRate model provides a reaction rate which is a function of surface area per unit volume [ commit 8c9e46 ].
- Turbulence: kOmegaSSTSato model fully operational [ commit 8ce466 ]. yPlus can now be calculated for specific phases [ commit 02dcff ]. Forces in turbulent dispersion models calculated from face fluxes [ commit 124c70 ]. Corrected turbulent dispersion models [ commit 64da7a ].
- Numerical: Improved numerical treatment of particle pressure for a big speed up of simulations such as fluidised beds [ commit da429d ].
- Boundary Conditions: External and coupled heat transfer boundary conditions applicable per phase [ commit b494e5 ].
- Tutorials: bubblePipe [ commit 2be90f ]. Code repairs tested with improved tutorials [ commits 474962 ]. New damBreak4Phase tutorial to demonstrate interface capturing [ commit 89439a ].
- MomentumTransportModels: new library generalises shear-stress in the momentum equation, for incompressible/compressible Newtonian, non-Newtonian, visco-elastic laminar flow, Reynolds averaged and large-eddy simulation of turbulent flow [ commit de66b1 ]. turbulenceProperties file is renamed momentumTransport, with backward-compatibility, following the generalisation of the library [ commit 7f5144 ].
- ThermophysicalTransportModels: new library created to enable complex energy and specie transport models, in particular multi-component diffusion [ commit 25b348 ].
jfunctions provide a new interface for mass transport [ commit b4cf40 ].
- Turbulence: In the SpalartAllmaras DES models, reduced storage of temporary fields and enabled writing of the LES region [ commit 4a810c ]. Improved stability of the kkLOmega turbulence model [ commit 3c64dc ]. Mass diffusivity with turbulence can now be specified independently of thermal diffusivity with separate turbulent Prandtl and Schmidt numbers [ commit 86f2c6 ].
- Viscoelasticity: PTT (Phan-Thien-Tanner) viscosity model [ commit 99982d ] and multi-mode viscoelastic models [ commit a7eb35 ].
- Specie: New adsorption boundary condition for species deposition at a surface [ commit bcc867 ].
- Thermodynamics: Added sensible enthalpy functions to thermophysical modelling [ commit 086034 ]. Added Gstd function to calculate Gibbs free energy of a mixture in the standard state [ commit 73c6f9 ]. New thermophysical properties class for a liquid in which the functions and coefficients for each property are configured through input files [ commit 375e1f ]. heSolidThermo thermophysical model updated to use corrected equation of state coefficient mixing [ commit c909bd ].
- Equation of State: rPolynomial (reciprocal polynomial) fits data for liquids and solids well and supports calculation of coefficients for mixtures of species [ commit 481797 ]. Significant correction to coefficient mixing for equations of state [ commit c8d434 ]. Created separate functions for entropy from the equation of state depending on whether specific heat capacity is at constant pressure or volume [ commit fa9ccc ].
- Data Input: Non-uniform table for specifying thermophysical properties, optimised with fast addressing [ commit 73a594 ]. Tabulated function of temperature for equation of state, thermodynamics and transport models [ commit 4c2fae ]
- Refactoring: Rewritten macros for instantiating thermophysical models to reduce by 2,500 lines of code [ commit fe8908 ]. Separated mixtures based on pure species from reactant/product combustion mixtures [ commit 80f15b ]. Added framework for evaluating properties, e.g. absolute enthalpy, of a specie at a field level rather than at a cell level [ commit e695df ].
- Performance: Rewritten to be 100% conservative and up to 30x faster than before [ commit 0ad918 ]. Corrected hydrostatic pressure problem for cases with internal corners [ commit 131a9f ]. Significantly improved convergence [ commit 68a384 ] and stability [ commit 7d03ae ] with high surface tension. Support for strong density gradients which overcomes a previous error at surface corners [ commit f6688b ].
- Surface: Corrected the surface velocity to assume a parabolic profile [ commit 2b82c3 ]. Rationalised and simplified the handling of the surface and wall velocities [ commit 663970 ].
- Models: Corrected thixotropic model [ commit 9025e2 ] with addtional option for Bingham plastic yield stress [ commit 3d7031 ].
- Case Setup: Added support for cases without fluid or solid regions to chtMultiRegionFoam [ commit a9ddd7 ].
- Numerics: Changed from solving enthalpy to energy for solids in conjugate heat transfer solvers [ commit c109be ]. Added optional pressure reference
pRefto heat transfer and buoyant solvers for greater accuracy in cases with a small pressure variation [ commit 2f30c1 ].
- Buoyancy-driven flows: comfort function object for thermal comfort quantities based on DIN ISO EN 7730:2005 with Tobias Holzmann [ commit 280c05 ]. Added moving/changing mesh capability to buoyantPimpleFoam [ commit 38fff7 ].
Particles and Tracking
- Solvers: Renamed the uncoupled solvers particleFoam and rhoParticleFoam [ commit 9fd917 ] and the function object particles [ commit 9fd917 ].
- Tracking: Improved efficiency on cases with moving meshes, in particular for post-processing, e.g. streamlines [ commit 0f5fbb ].
- Injection: Improved clipping in the Rosin-Rammler particle distribution model [ commit 8604c1 ]. Corrected the distribution of particles across cells for CellZoneInjection [ commit b507f3 ].
- Modelling: Corrected calculation of Eötvös number [ commit aab3a2 ]. Corrected scatter of a particle cloud, which impacts radiation scattering [ commit 7e6528 ].
- Solvers: Consolidated transient and steady-state solvers [ commits 7c32fe ]. rhoPimpleFoam produces identical results to rhoSimpleFoam when run with a steady-state time-scheme and rhoReactingFoam has also been updated to support SIMPLE operation [ commit 97cda4 ]. Improved algorithm in compressible flow solvers at high speeds [ commit ebc464 ]. Modified solidDisplacementFoam to use standard solid thermophysical modelling, so that it can use standard heat transfer boundary conditions [ commit 640027 ].
- Boundary Conditions (BCs): New entrainmentPressure provides excellent stability at external boundaries where totalPressure can sometimes fail [ commit 6c887b ]. Improved convergence of freestreamVelocity [ commit f7bcc1 ]. flowWithOpenBoundary tutorial explores conditions at an open boundary [ commit 197b14 ]. Optional tangentialVelocity in the pressureInletOutletVelocity boundary condition can now be time-varying [ commit d9fc45 ].
- Reactions: Redesigned reactions so reaction rate can depend on any field rather than just thermodynamic state [ commits 0e52c6]. reactingMixture is refactored so that the list of reactions is no longer derived from the reactions [ commit 3dc362 ]. singleStepReactingMixture functionality moved within the singleStepCombustion class as a first step to refactoring the instantiation of the reaction scheme [ commit b8fcd1 ]. Added an index argument to all functions that evaluate the reaction rate in chemistryModel, reactions and ODESolver [ commit 2d0f45 ].
- Rigid Body Dynamics: externalForce restraint with SeongMo Yeon [ commit 278ba8 ].
- Sources: The semiImplicitSource fvOption, for configuring source terms in equations, is generalised for scalars, vectors, tensors [ commit b6f91d ] and supports a Function1, allowing time-varying functions [ commit 95b5ef ].
- snappyHexMesh: Refinement can now be controlled based on the span between surface features, e.g. for small gaps [ commit 4c08b4 ] using surface closeness calculated by surfaceFeatures [ commit 509f15 ].
- blockMesh: New syntax allows specification of an arc using an
axis[ commit 73d253 ]. Improved checking of block face orientation [ commit 471810 ].
- Numerics: The face centre calculation has been corrected, improving the convergence on cases with distorted cells: the residuals for the motorbike tutorial have halved [ commit f85edb ]. Low-level mesh changes with
magFaceAreas()function added to primitiveMesh [ commit 19d4f1 ] and propagated through the code [ commit 44cf99 ].
- Coupled (Cyclic) Patches: Rationalised [ commit 4f0e38 ] and refactored [ commit 03207b ] transformations, replacing duplicated, incomplete implementations [ commit 87bce8 ]. Refactored the transformPosition function, reducing code duplication and removing associated errors [ commit 50d135 ]. Improved automatic calculation of rotational transformations [ commit 7010a8 ], removing ambiguous assignment [ commit ba52c4 ].
- Mesh Motion: Corrected self-mapping of fields with mesh unrefinement [ commit 22bba4 ].
- Regions: New planeToFaceZone source for topoSet which selects faces that are nearest to a plane [ commit 14e7db ].
- Visualization: Added fixes to avoid erosion of surfaces in isoSurface processing [ commit 916d0a ] and a filtering option in isoSurface to control the level of vertex removal [ commit 916d0a ].
- Fields: Improved the interface of the fieldAverage function object [ commit c60cef ] and simplified the configuration [ commit 0177c7 ]. New faceZoneAverage packaged function object calculates the average of a field over a face zone [ commit 84a126 ]. shearStress function object outputs the volumetric shear stress [ commit c57ffd ]. Added optional weight fields to the core volFieldValue function object, e.g. for volume integration of field data for phase properties in multiphase flows [ commit e01de9 ].
- Residence Time: The age function object, measuring residence time, supports fvOptions [ commit 73503b ] and has optional diffusion and convergence controls (with Tobias Holzmann) [ commit a2a74c ].
- Configuration: Optional execution at the start of a simulation to provide data at time “zero” [ commit 2ebed5 ]. Improved searching for function object files in multi-region cases [ commit 435b89 ]. Improved handling of field parameters for quick running function objects (e.g. for post-processing) without a configured file [ commit ad12d3 ].
- Data Visualisation: The ParaView reader module can now visualise surface and point fields [ commit b7c064 ] and volume internal fields [ commit 67d3a8 ]; foamToVTK also now supports volume internal fields [ commit 53e845 ]. In foamToVTK, rationalised the low-level write function to remove 3x code duplication [ commit 9ff1e2 ]. Support to write binary VTK files [ commit 622f47 ] and sampled surface files [ commit 84759e ].
- Case Initialisation: New “slash” (
/) syntax to access data at different dictionary levels in input files using macro (
$) expansions [ commit a7b842 ] including support for absolute paths to input files [ commit b7c0cd ] with updates to tutorials, template cases and foamDictionary [ commits 26187d ]. Illustrative codeStream example with angle of attack settings in aerofoilNACA0012 tutorial [ commit 17f110 ].
- Case Management: The patchSummary utility now provides complete information about the boundary conditions applied to the fields [ commit 107b5d ]. In foamDictionary, the expansion of included files and macros is now disabled by default [ commit c1edb0 ]. foamCloneCase now includes options for parallel decomposed cases and additional files [ commit f06e13 ].
- Function1: coded Function1 enables users to configure a Function1, e.g. a time varying parameter, in code [ commit 0dd2e9 ]. 3 standard formats for reading table and constant functions [ commit 0d9786 ]. reverseRamp can reverse the ramping of any Function1 from 1 to 0 [ commit 8756e8 ].
Programming and Computation
- Data Input:
readScalar(dict.lookup("name"))is simplified to
dict.lookup<scalar>("name")[ commit 5eaf74 ]. Extensive maintenance work on dictionary entry parsing and handling, making code more robust, consistent and extensible [ commits 4d8981 ] and when running in parallel [ commit c26037 ]. Improved syntax for input configurations including multi-line argument lists [ commit 7dc08e ].
- Fields and Dimensions: Temporary objects, e.g. fields, can be cached to enable further processing and writing of data [ commit fdf121 ] in particular field data, e.g. a model source term or numerical limiter, for code diagnostics [ commit 30cceb ]. Substantially simplfied the dimensionedConstants class [ commit 9513ad ].
- Architecture: Compilation rules added for Arm-based processors [ commit ed9e42 ].
- Other Numerics: Fields that are solved for by function objects (e.g., a scalar transport field) can now be included in time/iteration loop convergence tests [ commit c6089a ].
OpenFOAM 8 was produced by:
- Core Team (CFD Direct): Henry Weller (co-founder & lead developer); Chris Greenshields (co-founder), Will Bainbridge, Jakub Kníř.
- Developers/Maintainers: Juho Peltola, Timo Niemi, Fabian Schlegel, Ronald Oertel.
- Patch Contributors: Tobias Holzmann, SeongMo Yeon, Mattijs Janssens, Francesco Contino, Bruno Santos, Gerhard Holzinger, Kevin Nordin-Bates, Alberto Passalacqua.