The OpenFOAM Foundation is pleased to announce the release of version 10 of the OpenFOAM open source CFD toolbox. Version 10 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 10 includes the following key developments.
- Multiphase: added models and improved performance / robustness of multiphase solvers.
- Transport: properties consolidated into a single physicalProperties file.
- Thermophysical: improved handling of conductivity and added documentation.
- Heat transfer: improved thermal coupling in conjugate heat transfer.
- Particle tracking: can now be plugged into any solver using the clouds fvModel.
- Reactions: chemistry now solve for mass fractions to account for thermal expansion.
- Parallelisation: new framework for load-balancing, decomposition and redistribution.
- Mesh: general improvements to snappyHexMesh, blockMesh and other tools
- Dynamic Mesh: non-conformal coupling (NCC) for rotating geometry, to replace AMI.
- Dynamic Re-meshing: mesh-to-mesh mapping for mesh motion including engines.
- Function Objects: more efficient output for sampling, and new field calculations.
- Models and Constraints: now work for moving mesh cases and with function objects.
- Boundary Conditions: new general conditions of pressure, velocity and temperature.
- Case Configuration: created userTime to provide a customised measure of time.
- Computation: improvements to distance-to-wall calculations, time handling and I/O.
- Approximately 635 code commits, 161 resolved issues.
- ISO/IEC 14882:2011 (C++14): tested for GCC v5.4+, Clang v10+ (v6+ should also work).
OpenFOAM 10 is packaged for the following platforms, with ParaView 5.6 including Mesa with LLVM/Gallium acceleration for systems without a (supported) graphics card:
- Ubuntu Linux: packaged installation for Ubuntu 18.04 20.04 and 22.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 10 Source Pack can be compiled on suitable Linux platforms.
- Modelling: Surface waves can now be specified with an input period (as an alternative to wave length) [ commit 559fe8 ] and allows flow reversal at boundaries, so that waves can be specified in any direction and with zero mean flow [ commit 1c4868 ]. Added a condensation switch for liquid evaporation modelling [ commit cc3b25 ]. Blending of sub-models in multiphaseEulerFoam has been extended for simulation of three or more phases [ commit 428c54 ]. New Quemada viscosity model for colloidal dispersions in driftFluxFoam [ commit f4b497 ]. Corrected centrifugal accleration with MRF in driftFluxFoam [ commit fbf737 ]. In driftFluxFoam, added the Michaels and Bolger model for flocculated suspensions [ commit 64a2a3 ]. In driftFluxFoam, flow curvature now affects the separation of the dispersed phase from the continuous phase in a physical manner [ commit 620cbe ].
- Reacting Multiphase (with VTT Finland and HZDR Dresden-Rossendorf): Added coalescence and breakup models of Liao et al [ commit fe9829 ]. New moments function object calculates the mean properties of size distributions computed with the population balance method [ commit 36c565 ]. Added solid particle coalescence and breakage models to multiphaseEulerFoam [ commit b4bcb2 ]. Improved calculation of dilatation in the population balance method [ commit 376b51 ].
- Performance/Numerics: In compressibleInterFoam the temperature equation is formulated based on total internal energy by default but can be based on internal energy by setting totalInternalEnergy to false [ commit 12dc41 ]. compressibleMultiphaseInterFoam now supports fvModels and fvConstraints [ commit 13b782 ]. Improved stabilisation of multiphase cases when phase fraction alpha → 0 [ commit 3df883 ]. New phaseStabilised and phaseStabilisedSnGrad interpolation schemes help stabilise multiphaseEulerFoam runs on poor meshes by reverting to a bounded form when the phase fraction is less than 1e-3 [ commit 7b3631 ].
- Tutorials: Tutorial example of flow in a pipe with a 90° bend showing solid particle coalescence and breakage (with Kasper Gram Bilde and HZDR Dresden-Rossendorf) [ commit 0999cd ].
- General: Consolidated the specification of fluid properties, in particular with a single physicalProperties file, for flows which are incompressible, compressible, single and multi-phase, and single and multi-region [ commit 65ef2c ].
- MomentumTransportModels: Combustion tutorials now demonstrate the Wilke mixing rule for calculating transport properties [ commit 393023 ]. New Andrade model calculates the natural logarithm of dynamic viscosity and thermal conductivity for liquids [ commit 26f0e4 ].
- ThermophysicalTransportModels: Running a solver with the -listThermophysicalTransportModels option enables users to list the thermophysical transport models [ commit af7111 ].
- Turbulence: New VoFTurbulenceDamping fvModel applies turbulence damping at the VoF interface [ commit 4f9694 ]. Added the epsilonmWallFunction for the epsilonm field in the mixtureKEpsilon model [ commit 3bac21 ]. In the Reynolds Stress (
R) turbulence models, the coupling between
Uhas been improved, with a new tutorial demonstrating secondary flow in a duct [ commit a34604 ].
- Thermodynamics: Extended header documentation to the equations of state [ commit c86c64 ], thermodynamics [ commit b3e02d ] and transport models [ commit 8dbbe1 ]. Added a function for volumetric thermal expansion coefficient to equations of state [ commit 2d7a57 ]. Thermodynamics now stores thermal conductivity kappa rather than thermal diffusivity alpha as the fundamental parameter for thermal transport [ commit cc96ab ].
- Transport: Conductivity can now be specified in the const transport model instead of Prandtl number [ commit cd1f69 ].
- Numerics: For conjugate heat transfer, a new nEcorr loop may improve cases where the thermal coupling between fluid and solid regions is dominant [ commit f52d86 ]. buoyantSimpleFoam and buoyantPimpleFoam have been merged into a single buoyantFoam solver for steady or transient buoyant, turbulent flow of compressible fluids [ commit d40ecd ].
Particles and Tracking
- Solvers: The clouds fvModel enables particles to be added to a simulation with various levels of coupling, with both incompressible and compressible solvers [ commit 5f1146 ], see example [ commit 24a359 ].
- Tracking: Improved robustness of tracking to prevent hanging, divisions by zero and floating point errors [ commit 5272e4 ].
- Chemistry: Chemistry models now solve mass fractions rather than concentrations to account for changes in reaction rate associated with thermal expansion [ commit 4f0dfc ]. The In-Situ Adaptive Tabulation (ISAT) chemistry model has been refactored and improved [ commit 8145de ].
- Combustion: Added an example of ignition using a fixedTemperature constraint [ commit 19b3b2 ].
- Tabulation: Corrected several issues with in-situ adaptive tabulation (ISAT) [ commit 011397 ].
- Load balancing: A prototype general CPU load balancer redistributes a mesh in parallel based on the computational load in local cells; it initially works for chemistry loads [ commit 472ce5 ]. New fvMeshDistributors library provides for parallel redistribution of meshes during a simulation, particularly for load-balancing [ commit bf5f05 ].
- Decomposition and redistribution: Created a new framework within fvMesh to handle run-time mesh redistribution, e.g. for load-balancing [ commit 687996 ]. Added new distribute function to MeshObjects to support mesh redistribution for load balancing [ commit a0ac78 ]. Introduced separate controls for the decomposition and redistribution of meshes for parallel cases [ commit f97f63 ]. New parallelised mesh redistribution using the Zoltan library [ commit 340856 ]. Moving mesh cases running with 2nd-order time schemes can now run with re-distribution [ commit 97eee8 ].
- Optimisation: Improved parallel efficiency of limiter calculation in MULES [ commit 8cc05a ]. decomposePar has been optimised for minimal IO and corrected so it can decompose sequences of time-varying meshes [ commit 399545 ].
- General: The fvMesh and fvSolution files are no longer needed when generating a mesh [ commit ddbf2d ]. Mesh data is now written to time directories only when mesh motion and topology changes have occurred [ commit b439fc ]
- snappyHexMesh: Corrected the handling of multiple locationsInMesh with baffles [ commit 115144 ]. The addLayersControls subdictionary can be removed entirely from the snappyHexMeshDict file when addLayers is switched off [ commit d87a93 ].
- blockMesh: Block faces which are not specified within a boundary patch are collected into a default patch whose name and type can be specified by the defaultPatch entry [ commit 99cfbd ].
- Manipulation: The topoSet utility fully replaces the setSet utility which is deprecated [ commit 8d887e ] and includes a simplified input file syntax [ commit 6a657c ]. Enabled mesh renumbering for parallel cases with the Zoltan library [ commit d90f42 ]. The createPatch utility [ commit 930207 ] and the createBaffles utility have been simplified [ commit f93300 ]. In topoSet, added a simpler input option to the rotatedBoxToCell source using a specified rotation [ commit c18039 ].
- Conversion: The fluent3DMeshToFoam mesh converter is updated for Fluent version R2021 [ commit 318f78 ].
- Surface Geometry: The -help option explains the new syntax for transformPoints and surfaceTransformPoints which allows a sequence of transformations [ commit 57a446 ].
- Non-Conformal Coupling: Non-Conformal Coupling (NCC) connects regions of a domain with independent meshes, particularly for cases when one or more regions are moving, e.g. to simulate rotating geometry, replacing the unreliable, inaccurate AMI and ACMI functionality [ commit 569fa3 ]. All the tutorial examples for AMI, ACMI and Repeat AMI have been converted to use Non-Conformal Coupling, to guide users to convert their own cases [ commit 420866 ]. ACMI and Repeat AMI have been removed from OpenFOAM since they are unreliable and have been replaced by Non-Conformal Coupling. AMI remains into the v10 release, but will afterwards be removed. [ commit b4b8b2 ].
- Other: The moveDynamicMesh utility has been renamed moveMesh, deprecating the utility of the same name [ commit 31da3a ]. Simulations can now undergo a list of topological mesh changes [ commit 45428b ]. Added a rotating joint to rigid body dynamics, used for example to combine a propeller to a moving ship [ commit 0289f3 ].
- Mapping: Simplified the code in the mapFields utility [ commit 08b7a9 ]. With the latest mesh-to-mesh mapping, a set of pre-generated meshes can be used to manage changes in topology and geometry, mesh refinement and un-refinements, etc [ commit 47b0cd ]. Mesh-to-mesh mapping now supports changes in decomposition between meshes when running in parallel [ commit f0e693 ].
- Engines: Added new engine and layeredEngine fvMeshMover for engine simulations [ commit 941ea1 ] now used by XiFoam, making XiEngineFoam redundant [ commit 8f14b6 ]. Refactored the engine valve and piston functionality in the engine fvMeshMover [ commit 49faf0 ]. rhoPimpleFoam and the engine fvMeshMover can simulate engines without reactions, making the coldEngineFoam solver redundant [ commit 640cd6 ]; similarly reactingFoam can simulate engine calculations with chemistry, making the engineFoam solver redundant [ commit facc36 ].
- General: The moveDynamicMesh utility has been renamed moveMesh, deprecating the utility of the same name [ commit 31da3a ]. Simulations can now undergo a list of topological mesh changes [ commit 45428b ]. Added a rotating joint to rigid body dynamics, used for example to combine a propeller to a moving ship [ commit 0289f3 ].
- Sampling: Sample surfaces are now written with all field data in a single file which simplifies visualization post-processing and reduces disk space by avoiding duplication of surface geometry data [ commit 261ce0 ]. Improved the writing of the CSV format [ commit 05cfe8 ]. In sampling data, ensure tracking is performed at the current time level [ commit 41b73e ]. Streamlines now propagate across cyclic boundaries [ commit 701fc2 ]. Overhauled sampling and streamlines with improved, less wasteful file writing, greater reliability with sampling segments and parallelisation, and improved interface [ commit 25a6d0 ]. New layerAverage function object replaces the postChannel post-processing utility [ commit 053eed ]. Rewrote the layerAverage function object to allow complex changes in geometry, e.g. along a curved pipe [ commit d5820b ].
- Visualisation: Added a
writeEmptyoption for surfaces function objects to write out files which are empty, in particular for isoSurfaces when generating animations [ commit 2d1428 ].
- Fields: The comfort function object is extended to calculate draught rate [ commit 19950f ]. The scalarTransport function object includes an option to use MULES to ensure boundedness, in particular when there is no diffusion and a sharp interface is maintained using a compressive or (M)PLIC scheme [ commit aa6c04 ]. The wallShearStress function object can now process the wall shear stress of a specified phase in multiphase systems [ commit e6acc7 ]. The wallHeatFlux function object can now calculate the wall heat flux for a specified phase in multiphase systems [ commit 7d4dca ].
For an updated list of packaged function objects, see User Guide: 6.2 Post-Processing CLI.
Models and Constraints
- General: Added updates for mesh motion to fvModels and fvConstraints [ commit 19bdfa ]. fvModels and fvConstraints can now work with function objects that solve equations, e.g. scalarTransport, providing models and constraints to the scalar field [ commit 987d59 ].
- fvModels: The actuationDisk fvModel can now work in multiphase solvers [ commit 96de80 ] and supports disk orientation [ commit 991489 ]. The time step can now be limited by an fvModel [ commit e478bb ]. New interfaceTurbulenceDamping fvModel provides damping of turbulence around phase interfaces [ commit 898924 ] and phaseTurbulenceStabilisation fvModel stabilises the turbulence properties of a phase when the phase fraction → 0 [ commit 9925df ].
- fvConstraints: The limitTemperature fvConstraint now supports solvers such as compressibleInterFoam which use temperature as the solution variable in the energy equation [ commit fb53b9 ]. Added an option to specify the limited pressure field in the limitPressure fvConstraint [ commit 3b3127 ]. Replaced the limitVelocity fvConstraint with the more general limitMag, which limits the magnitude of any vector or tensor field [ commit 01f72b ].
General Boundary Conditions
- Pressure: New transonicEntrainmentPressure condition supports supersonic jets at an outlet boundary [ commit d10f22 ], by blending towards zero gradient with supersonic outflow, starting from a Mach number which can be specified by the user [ commit 63ef6f ]. The totalPressure boundary condition works reliably with an external tangential velocity [ commit a36082 ] which can be specified in a freestream [ commit ba5612 ].
- Velocity: New movingWallSlipVelocity boundary condition provides a slip condition on moving walls [ commit 80c1a6 ]. In the flowRateInletVelocity boundary condition, users can now choose optional velocity profiles, corresponding to laminar and turbulent boundary layers, and a flow rate specification based on the mean velocity [ commit 8bb48d ].
- Temperature: The externalWallHeatFluxTemperature boundary condition can now be configured with multiple heat sources, i.e. power, flux, transfer coefficient, at the same time [ commit 373c49 ].
- General: Corrected rotated cyclic transformations of tensors [ commit b56f6d ].
- Data Visualisation: New options in foamCreateVideo provide a pause to the video at the beginning and/or end [ commit c70a7b ]
- Case Initialisation: Generalised the concept of userTime, which can be configured in controlDict to convert run time into a customised measure of time. e.g. crank angle, for data I/O [ commit 3ef3e9 ]. engineTime is replaced by the configurable engine userTime, as a further step to integrate engine simulations into standard solvers [ commit e10830 ]. foamCloneCase now includes a
-startFromoption to rename the copied time directory, in particular to reset the copied latest time directory to 0 (zero) [ commit 2cac62 ].
Programming and Computation
- Data Input: New typeIOobject, a form of IOobject that can check the existence of an object file and check the header without constructing the object [ commit b91233 ]. Rationalised the handling of file paths in I/O [ commit cc9233 ].
- Other Numerics: cpuTime now uses the POSIX clock() function, providing greater resolution [ commit 01f075 ]. Standardised the density prediction at the beginning of the pressure equation calculation in compressible solvers [ commit 468954 ]. Removed duplicate code in meshWave functionality [ commit 20ef80 ] and simplified the calculation through transform interfaces, used in calculation distance to the nearest wall [ commit 4e0577 ]. Wall distance calculations are more consistent across processor and cyclic boundaries, with finer control over the accuracy of the calculations [ commit 9d702d ].
- Compilation: Added support for GCC compiler v11 to [ commit d83c87 ] and the OneAPI Intel compiler [ commit 37108e ].
OpenFOAM 10 was produced by:
- Maintainers (CFD Direct): Henry Weller (co-founder & lead developer); Chris Greenshields (co-founder), Will Bainbridge.
- Developers: Fabian Schlegel, Ronald Lehnigk, Juho Peltola, Timo Niemi.
- Patch Contributors: Kaspar Gram Bilde.