The OpenFOAM Foundation is pleased to announce the release of version 7 of the OpenFOAM open source CFD toolbox. Version 7 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 7 includes the following key developments.
- Heat transfer: consolidated solvers and improved convergence and robustness.
- Particle tracking: improved robustness and optimized computation.
- Multiphase: wave damping, configurable inlet phase properties, better settling numerics.
- Reacting multiphase models: heat transfer, population balance, breakup, coalescence.
- Reactions/combustion: simplified case setup.
- Turbulence: improved consistency and stability of wall functions, added sources.
- Thermophysical: thermodynamic functions, temperature-strain-dependent viscosity.
- Other models: atmospheric, rigid body dynamics, boundary conditions, sources.
- Mesh: standardized dynamic mesh capability, improved motion solvers.
- Case Configuration: improved data visualization, setup tools, function objects.
- Computation: improvements to containers, fields, parallel running, etc.
- Approximately 550 code commits, 250+ resolved issues
- ISO/IEC 14882:2011 (C++11): tested for GCC v4.8+, Clang v7.0+, Intel ICC v18.0+.
OpenFOAM 7 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 19.04 [subsequently 19.10 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 7 Source Pack can be compiled on suitable Linux platforms.
- Solvers: The Boussinesq equation of state can now be applied to any buoyancy solver, deprecating the specialized buoyantBoussinesq[SP]impleFoam solvers [ commit 9bf346 ].
- Other: Corrected thermal diffusion for laminar flow using enthalpy [ commit f71001 ]
- Case Setup: Improved convergence and stability of several tutorials by updating code and settings to solve for internal energy rather than enthalpy [ commits 80cc96 ]. Improved the numerics, chemistry and general configuration of the reverseBurner tutorial, which includes conjugate heat transfer and combustion [ commit a08502 ] and radiation [ commit 7203f2 ]. Added conjugate heat transfer example of shell and tube heat exchanger [ commit 6d4960 ].
- Data Processing: Removed Qdot from chtMultiRegionFoam since it is only used in reacting cases and common CHT usage does not simulate reactions [ commit b59c71 ]
- Numerics: Increased robustness of transient, thermal/compressible flows with better pressure and density limiting in rhoPimpleFoam [ commit f9cb8e ]. If energy-temperature iteration fails, temperature, energy and specific heat is now written out at each step to help diagnose the failure [ commit 7a398a ].
- Thermal Radiation: Removed redundant radiation switch from radiationProperties; radiation is switched off by
radiationModel none;[ commit ab3177 ]
Particles and Tracking
- Tracking: Corrected projection direction for tracking across AMI interfaces, e.g. for particles in rotating geometries [ commit 35dd88 ] and fixed incorrect removal of particles [ commit 10ece8 ]. Prevented particle simulations from hanging due to closed loops [ commit 1c26ed ]. Added interpolation method to eliminate hanging when particle drag competes with wall rebound [ commit 63b641 ]. Improved robustness of tracking of particles along cell edges [ commit 960bae ]. Replaced perpendicular vector calculations using random numbers with the global perpendicular function [ commit 68e9c8 ].
- Optimisation: Improved efficiency of particle tracking for cases with a stationary mesh [ commit b5e27b ].
- Injection: Consolidated cone injection for particles within coneInjection, modifying the random distribution to remove a bias towards the centreline [ commit 06d8f7 ]. Position and direction of cone injection of particles can now be time-varying [ commit b785c9 ].
- Modelling: Generalized drag models and added the SchillerNaumann model [ commit 081db9 ]
- Modelling: New phaseScalarTransport function object for scalar transport in a single phase of a multiphase flow [ commit 7b1840 ]. The dynamicAlphaContactAngle boundary condition now supports different conventions for contact angles [ commit a9cdfa ]
- Performance/Numerics: Added optional boundary extrema coefficient for the MULES algorithm to improve solutions to settling problems [ commit 441b7e ]. For the BinghamPlastic model in driftFluxFoam, added a limiter to avoid floating point errors with high phase fractions, with VTT Finland [ commit 6388a1 ]
- Marine/Waves: For simulations with surface waves, mean flow has been separated from wave perturbation, with new waveProperties file [ commit 967edc ]. New isotropicDamping fvOption provides wave damping towards a specified uniform flow speed [ commit 251f91 ]. An atmospheric boundary layer can now be added to the air with surface wave modelling [ commit 4d6b99 ]. New waveInletOutlet boundary condition sets different inlet values of a field, e.g. temperature, turbulence properties, above and below an interface [ commit 7957f3 ].
- General: Added fix to mass transfer across phase interface [ commit eaa089 ]. Improved robustness of reacting multiphase solvers by adding generalized sub-cycling [ commit 67cfa3 ].
- With VTT Finland: In reactingEulerFoam, added linearTsub model for the diameter of vapour bubbles as a linear function of the liquid sub-cooling [ commit e1c959 ]. In reactingEulerFoam, added an interval for updating the sources for population balance to reduce computational cost for steady-state simulations [ commit 1c35e8 ]. Added heat transfer model with a constant Nusselt number [ commit 0dfde5 ] and improved stability, particularly for cases with high mass transfer rate [ commit 7e799e ]. Improved the population balance phase change drift model [ commit 5e2f17 ].
- With HZDR: New LehrMilliesMewes and LuoSvendsen breakup and coalescence models [ commit 756d10 ].
Chemistry and Reactions
- Combustion: Added Qdot function object to write out heat release rate field due to combustion [ commit dc25f1 ]. Removed redundant active switch from combustionProperties; combustion is switched off by
combustionModel none;[ commit d62758 ].
- Reactions: Corrected, rationalized and generalized LangmuirHinshelwoodReactionRate model to an arbitrary pair of reacting species [ commit 669935 ] and added T^beta pre-factor to the Arrhenius expressions [ commit 5377d6 ]. Simplified set up of Tabulation of Dynamic Adaptive Chemistry (TDAC) for reactions, with VUBrussel [ commit 5c86ba ].
- Examples: Improved the setup of tutorials with reactions [ commit 14aad1 ].
- Wall Functions: Rationalized wall function implementation to avoid complex and inconsistent coefficients [ commit 1e2550 ], re-deriving nutkRoughWallFunction for improved stability and range of applicability [ commit a1091a ] and updating the nutURoughWallFunction for consistent inputs with nutkRoughWallFunction [ commit 926b6a ].
- Modelling: Added sources to k and omega equations in the kOmega model to make it easier to derive models from it [ commit f5d684 ].
- Data Processing: Added support for compressible models to turbulenceFields function object [ commit 2249f8 ].
- Thermodynamics: Added missing thermodynamic functions for departure from ideal gas behaviour for Boussinesq, PengRobinson and icoPolynomial equations of state [ commit 625c68 ], perfectFluid [ commit dfc10f ] and other equations of state [ commits f9971f ].
- Transport: New Williams-Landel-Ferry model for temperature dependent transport properties [ commit 797718 ]. New structure for generalized Newtonian laminar transport enables strain-dependent viscosity functions to be combined with temperature-dependent viscosity, e.g. for the Cross-WLF model for polymer flow [ commit 94d0b9f ]. Added Giesekus model for visco-elasticity in a framework that allows derivation from Maxwell and addition of sources [ commit 2dd53c ].
- Atmosphere: Added option for an offset boundary layer in atmBoundaryLayer [ commit bd5a19 ].
- Rigid Body Dynamics: New sixDoFRigidBodyControl functionObject stops the run when the body motion converges [ commit b4a00c ]. Added rigidBodyState function object to report the state of a rigid body to from patch by SeongMo Yeon [ commit d399b8 ].
- Boundary Conditions (BCs): The semiPermeableBaffle boundary condition can now calculate a mass flux based on difference in mole or mass fraction, or partial pressure [ commit 20653e ]. hydrostaticDisplacementFvPatchVectorField is a new traction boundary condition for solidDisplacementFoam based on pressure from a fluid reservoir [ commit a098cd ]. Added fanPressureJump boundary condition with pressure jump specified as a function of volumetric flow rate through the patch, with Daniel Jasiński [ commit ae28cb ]. Stabilized the freestream velocity and pressure boundary conditions at start up [ commit d3a02c ]. Generalized a reusable timeVaryingMappedFvPatchField boundary condition for mapping data at a set of supplied points in space and time onto a patch [ commit 8b4f86 ].
- Sources: Added the output of rotor power [ commit dfe7b8 ] and enabled opposite spin to rotorDisk fvOption, contributed by Robert Lee [ commit fcbebe ]
- Solvers: The sonicFoam, sonicDyMFoam and sonicLiquidFoam are deprecated since their functionality has been merged into the rhoPimpleFoam solver, running the transonic option [ commit 3341f9 ]. Added LTS capability to pimpleFoam, providing the option to accelerate solutions to steady-state [ commit e1e3e2 ]
- snappyHexMesh: Made merging of patch faces optional to enable layer insertion in multi-region meshes, e.g. in conjugate heat transfer [ commit 0497d2 ].
- Mesh Motion: New solid-body mesh-motion solver which interpolates the motion using Slerp [ commit 34f0ca ]. Solver applications include dynamic mesh capability by default, deprecating all “DyM” versions of solvers [ commit e0cf97 ]. Support for multiple motion solvers, e.g. solid body rotation and deformation with prescribed boundary motion [ commit faf6e2 ]. Rationalized the handling of the dynamicMeshDict configuration file [ commit a1a225 ]. Ensure old-time cell volumes are written out for seamless case restarts with backward differencing [ commit 911a10 ]. Added support for writing the motion state along with the mesh with the motionSolver for dynamic meshes [ commit 51d4c0 ]. Generalized updates to velocity field boundary conditions for cases with mesh motion [ commit 12c4ab ].
- Other: In the mesh utilities, rationalized the field handling code and added a -noFields option [ commit 66c26a ], including with subsetMesh [ commit d57d36 ]. surfaceFind now reports the true distance from a point to the nearest surface geometry (e.g. OBJ, STL) [ commit ba61e3 ].
- Data Visualisation: Added examples of all point seeding methods to packaged streamline function object [ commit bd2f27 ]. Added -ascii option to foamMonitor which plots graphs in ASCII into a terminal, useful for terminal-only connection to remote machines [ commit 80df54 ]. Implemented new iso-surface method that produces smoother surfaces and files that are up to 4 times smaller, contributed by Mattijs Janssens [ commit c4dc7f ]. Rationalized code for sampledSurface, to maintain visualisaition post-processing functionality [ commit 8baec3 ]. Fixed the cuttingPlane post-processing at the intersection between a plane and a cell zone when running in parallel, contributed by Federico Piscaglia [ commit 47d2e0 ].
- Case Initialisation: New
#negfunction to produce the negative of a dictionary variable [ commit 932e01 ]. New
#ifeqconditional handling in OpenFOAM input files, contributed by Mattijs Janssens [ commit 70afbf ]. Added -merge option to foamDictionary, to merge keyword entries, particularly within sub-dictionaries [ commit abde9a ]. foamGet selects destination directory based on file being copied, making it even easier to configure cases [ commit b9f8eb ]. Added support for files in binary format to foamDictionary [ commit a88405 ].
- Case Management: Added keyword option to foamInfo to search more broadly for a case-insensitive keyword, rather than an specific model name [ commit c562a4 ].
- Other Function Objects: log function object calculates the natural logarithm of a scalar field [ commit e757d5 ]. Age function object calculates the field of the time taken for fluid to travel from inlets to all locations in the domain [ commit b928e3 ]
Programming and Computation
- C++11 Standard: Updates to use C++11 scoped enumerations, providing a more consistent naming convention to improve code readability [ commits c7e261 ]. Removed the complex Xfer class, replacing functionality with C++11 “move” constructors and assignment operators [ commit 30bea8 ]. Extensive maintenance work to update all class declaration comments in accordance with a new standard [ commits 5c188d ]
- Containers and I/O: Undertaken core maintenance of List classes and their I/O [ commits d6f674 ]. Rationalized the writeEntry function for consistency, ease of use and maintainability across ASCII and binary formats [ commit d41166 ].
- Fields and Dimensions: A name (word) is no longer needed when constructing a dimensioned scalar, vector, etc [ commit 3708da ]. Temporary fields are no longer registered on the database by default [ commit 146a59 ]. Rewritten primitive field mapping, providing a flexible, extensible, comprehensible and maintainable structure [ commits 4f7f48 ]
- Parallel Running: Corrected parallel decomposition of surfaceVectorFields, with Mattijs Janssens [ commit 3395a5 ]. reconstructPar can now reconstruct surfaceVectorFields [ commit 44742d ]. Corrected sign of fluxes for cases renumbered in parallel [ commit bdd617 ]. Prevented crashes when running in parallel on cases with coupled patches [ commit e4d89d ].
- Other Numerics: Prevent hanging of some line-boundary intersections used, for example, in data sampling [ commit 39ad49 ]. Rationalized Final solver and relaxation factor settings, with relaxation factors using the standard setting if a Final version is not specified [ commit ee443e ]. Improved calculation of weights in surface interpolation as faces approach the limit of zero area [ commit a1a225 ]
OpenFOAM 7 was produced by:
- Core Team (CFD Direct): Henry Weller (co-founder & lead developer); Chris Greenshields (co-founder), Will Bainbridge
- Developers/Maintainers: Mattijs Janssens (co-founder), Juho Peltola, Timo Niemi, Fabian Schlegel, Ronald Oertel, Bruno Santos
- Patch Contributors: Francesco Contino, Lorenzo Trevisan, Federico Piscaglia, Robert Lee, SeongMo Yeon, Alberto Passalacqua