Close

8th July 2025

OpenFOAM 13 Released

The OpenFOAM Foundation is pleased to announce the release of version 13 of the OpenFOAM open source CFD toolbox, produced by CFD Direct. Version 13 includes: a rewrite of mesh zones which can dynamically update and are easier to use and more robust (replacing the lousy topoSet): field-based Lagrangian, a 65% complete, more flexible, extensible and efficient replacement to the existing code; improvements to MULES to guarantee boundedness and accelerate solutions, e.g. in multiphase flows; a rewrite of mass transfer modelling; better visualisation with ParaView working on decomposed cases, foamVTKSeries for animations and improved foamMonitor; several improvements and additions for multi-region simulations, case configuration, meshing, function objects, multiphase flows and combustion.

OpenFOAM 13 includes the following highlights.

  • Modular Solvers: include deactivating flow, thermophysics and models switches.
  • MULES: guarantees boundedness irrespective of iterator convergence.
  • Multiphase: significantly accelerated simulations with the multiphaseEuler solver.
  • Transport/Thermo: rewritten mass transfer modelling for the multiphaseEuler solver.
  • Combustion: improved ignition and flame model for simulation of engines.
  • Particles: 65% complete field-based Lagrangian is more flexible, extensible, efficient, …
  • Meshes: upgraded mesh generation and coupling of multiple mesh regions.
  • Mesh Zones: robust, usable, flexible, and more functional replacement.
  • Multi-region Simulation: improved NCC and mesh stitching and mapping.
  • Function Objects: improved scalarTransport, add power, reaction rate, cutLayerAverage.
  • Models: added propellerDisk models and improved fvFieldSource.
  • Boundary Conditions: improved pressure, temperature and mass diffusion conditions.
  • Case Configuration: new foamMergeCase tool.
  • Visualisation: ParaView can read decomposed cases, foamVTKSeries for animations.
  • Cases: new examples for single phase, multiphase, incompressible and compressible flows.
  • Other: The foamNewApp script can create starter code for a non-CFD application.
  • ~832 code commits, ~150 resolved issues.
  • ISO/IEC 14882:2011 (C++14): tested for GCC v5.5+, Clang v16+ (v10+ should also work).

OpenFOAM 13 is packaged for the following platforms:

The OpenFOAM 13 Source Pack can be compiled on suitable Linux platforms.

Modular Solvers

  • General: All solver modules now have flow, thermophysics and models switches which can disable the solving of the flow, thermal and additional models, respectively [ commit c822a9b7 ].
  • Combustion: In the XiFluid solver module, the Xi model and sub-models can be selected through the combustionProperties file [ commit 8b46ef6b ].

MULES

  • General: The MULES limiter now guarantees boundedness irrespective of iterator convergence [ commit e53e7618 ].  The MULES controls are now specified in a small sub-dictionary with simpler keywords [ commit f57b6e05 ].  A globalBounds switch allows the user to limit the solution variable by its global bounds, rather than limiting locally using neighbouring cell values [ commit 025f14d4 ].
  • Semi-implicit: The convergence of the semi-implicit MULES iterations can be controlled by a new tolerance control rather than specifying a fixed number of iterations [ commit adaa3f0b ].
  • Multiphase: In the volume of fluid solvers, the number of sub-cycles can now be specified as a function of Courant number [ commit bde0fa74 ].  An optional clip to the phase fraction calculation in the multiphaseEuler solver  handles round-off error causing solution drift in very long simulations [ commit d3940e3f ]. Phase-fluxes can be limited at boundaries if the phase-fraction boundary condition is assignable but not absolutely fixed, to allow limiting with the inletOutlet condition [ commit a71780cd ].

For information about the the improvements to MULES, see “MULES in OpenFOAM in 2025”.

Multiphase

  • Solver: In the multiphaseEuler solver, the phase-pressure fluxes are cached from the previous iteration to avoid recalculation during sub-cycling and the correction loop and provide better consistency with the pressure equation in [ commit a8a84c78 ].  The solution algorithm for phase-fraction, developed for VoF solvers, has now been extended for the multiphaseEuler solver to provide faster solutions at high Courant numbers [ commit fe950b90 ].
  • Momentum transfer: In the multiphaseEuler solver, removed pressure gradient and surface tension forces from the low phase-fraction, leaving drag and buoyancy, so when phase-fraction → 0, heavy phases fall and light phases rise due to gravity [ commit 30fecbbb ].
  • Drift flux: Added packingDispersionModels for industrial separations, waste water sludge and mineral slurries [ commit 1f6ae5c8 ]. Added the HerschelBulkley viscosity model [ commit 7962b54e ].
  • Particulate phase: Introduced a new algorithm for the phase-fraction of particulate phases in the multiphaseEuler solver [ commit a56c4dd6 ].
  • Interface capturing: VoF tutorials have been updated to use the MULES sub-dictionary within the phase fraction solver controls in the fvSolution file [ commit cb6641ee ].  The compressible VoF solvers now include an option to specify a reference pressure pRef, like in the multiphaseEuler solver [ commit a0c90e4b ].
  • Population balance: For the population balance method, size group fractions can be specified at a boundary or internal field using singleSizeGroup or distributionSizeGroup options; both are implemented as boundary conditions and source terms [ commit d1eacce5 ].  The populationBalanceSetSizeDistribution function sets population balance size distributions by overwriting the values in the size-group fraction fields with values obtained by integrating a specified distribution [ commit 8e4a1b8 ].

Transport/Thermodynamics

  • Mass transfer: Phase change processes in the multiphaseEuler solver have been rewritten as a set of fvModels including heat-transfer, evaporation, condensation, dissolving, cavitation, boiling, homogeneous nucleation, and reaction-driven transfers [ commit 1142ff22 ]. In the blended force models of the multiphaseEuler solver, we have removed the generalizations of both the signs (+/-) on forces and the handling of fixed flux boundaries, because they are specific to individual models [ commit 72b40725 ].  New adjustTimeStepToNucleation function object can control the time step based on the time scale of nucleation of liquid droplets in the multiphaseEuler solver, e.g. for condensation or phase separation [ commit 8a1956f3 ].  
  • Mass: New binary diffusion coefficient (binaryDiffusionCoefficient) which is a polynomial function of the log of temperature [ commit f9139b7a ].
  • Thermodynamics: The incompressiblePerfectGas equation of state is now thermodynamically consistent with perfectGas, making it suitable for cases where the pressure variation is small but which may otherwise struggle with unwanted pressure oscillations [ commit f8d64ccb ].
  • Interface: The devTau/Sigma functions return surface traction forces (per unit area), to maintain consistency between CFD calculations and further data processing, e.g. of forces, power, etc. [ commit 6592798c ].

Combustion

  • Ignition: Added constantIgnition fvModel for XiFluid to replace legacy one-off code [ commit 1cbf7525 ].  Added new ignition fvModels for 1, 2 and 3D simulations with XiFluid [ commit 812e5fde ]
  • multiCycleConstantbXiIgnition is a new ignition model for multi-cycle simulations with exhaust-gas recirculation (EGR) modelling using the XiFluid solver [ commit f7f9be71 ].  New bXiIgnited ignited model for the Weller b-Xi combustion models [ commit 7d7deec8 ].
  • Flame speed: Flexible configuration controls for the laminar flame speed models [ commit d01d62ce ].  Overhauled laminar flame speed modelling [ commit a3586e16 ]
  • Flame wrinking: New equilibrium frame-wrinkling models in the XiFluid solver [ commit 4d77261d ].  New frame-wrinkling correction model for early kernel growth [ commit 76c4d789 ].    Added a simple 1D flame propagation example for the Weller b-Xi combustion model [ commit 17922670 ].  New model structure for frame wrinkling profiles in the Weller b-Xi combustion models [ commit 19844bde ].
  • Engine simulations: A new engine2Valve2D example case provides a simple 2D engine-like simulation with conjugate heat transfer with motion, sliding interfaces and mesh-to-mesh mapping [ commit 342980ab ], inlet and exhaust valves, fuel injection and spark ignition utilising the Weller b-Xi combustion model with support for exhaust gas re-circulation [ commit 40732682 ].

Particles

  • Field-based Lagrangian: Added a new field-based Lagrangian library which, when fully completed, will replace the existing particle-based lagrangian library [ commit afdfb5bd ]; the new library stores data as fields, rather than on particles, making it far more flexible, extensible and efficient, easier to use, and more consistent with the rest of OpenFOAM.
  • Tracking: Included parabolic tracking to help produce second-order Lagrangian models [ commit 143443e6 ].
  • Reactions: With reacting multiphase particles, simulations are now insensitive to the order in which phases are specified in the singleMixtureFraction model coefficients [ commit 436361e6 ].
  • Distributions: The distribution functions can now restart from an earlier state, generating the same sequence of samples multiple times, so that convergence of iterative sequences is no longer prevented by re-randomization of samples [ commit 1e761950 ].  New multiFixedValue distribution model can take multiple values, each with a given probability [ commit d4f88d69 ]
  • Data processing: The cloudSurfaceDistribution function object generates a plot of a distribution of the values of particles that pass through a faceZone, faceSet or patch [ commit c6477cb4 ].

For information about the new field-based Lagrangian, see “Field-Lagrangian in OpenFOAM”.

Meshes

  • General:  Meshing tools, e.g. snappyHexMesh, now overwrite existing mesh files by default; the -noOverwrite option now replicates the old default behaviour, where the polyMesh directory is written into time directories [ commit 08b82b5c ].
  • snappyHexMeshConfig: The tool used to configure snappyHexMesh, has the following new options: -closedDomain, -minDimCells and -regions [ commit bce844a7 ]; -noBackground to prevent writing of a blockMeshDict file [ commit 45e69c59 ]; -insidePoints [ commit 87b48aff ]; and -rm to delete the mesh configuration files snappyHexMeshConfig generates [ commit 4c3ee7b7 ].  Simplified the specification of optional arguments, removing the need for excessive brackets [ commit f21766be ].
  • snappyHexMesh: The syntax for specifying surface geometries, used in snappyHexMesh and other utilities, has been simplified: the irrelevant searchable prefix has been removed, e.g. searchableBox is now box [ commit 031e50e9 ]; and triSurface (not triSurfaceMesh) now specifies a surface geometry file, e.g. in OBJ or STL format [ commit 974c68a5 ].  Rewritten the preservation of zones when layers are added [ commit 414f5f88 ].
  • extrudeMesh: New path extrude model added [ commit 4accaf6c ]. Standardised the input syntax [ commit 7bdc653d ].
  • Conversion: The fluent3DMeshToFoam mesh converter has been improved by some face renumbering [ commit 49427c76 ].
  • Other: mergeMeshes can now merge meshes from a constant/meshes sub-directory [ commit 8a07d26f ].  The mapFields and mapFieldsPar utilities now work on meshes with non-conformal couple (NCC) interfaces [ commit 4a65ffb0 ].
  • Motion: New displacementLayeredMotionSolver moves a layer of mesh between opposite patches [ commit 74599a66 ].  Improved the interoperability of mesh motion, refinement and distribution, and second-order time-schemes [ commit f4eb5495 ].

Mesh Zones

  • Overview: A new dynamic zone generation system has created, providing a zoneGenerator which can be configured to generate a zoneSet (set of zones) comprising of one or more of a pointZone and/or cellZone and/or faceZone [ commit da974812 ].  Includes numerous zoneGenerators to create and control zones within the new dynamic zone generation system [ commits b4339ca4 ] and [ commits a578e1e8 ].  The orientation flipMap is now optional for a faceZone [ commit 5877765e ], but can always be added using the flipMap zone generator [ commit 32f9dd4f ].
  • createZones: provides a simpler, more powerful replacement to topoSet for creating cell zones [ commit e4278233 ] which can read from a createZonesDict or zoneGenerator file [ commit 1703c26e ].
  • refineMesh: rewritten and simplified to use multiple zones generated within the application, which can be refined in a single execution of the application [ commit 61e3bcb6 ]; it includes the option of hexRef8 refinement which supports further refinement, e.g. in snappyHexMesh, dynamic refinement, etc, and makes the separate refineHexMesh utility redundant [ commit 1544cf9b ].
  • subsetMesh: has been rewritten to enable sub-setting using a cellZone, typically generated within the application (configured in subsetMeshDict) [ commit 7d90588d ].
  • createPatch: now preserves the patch order of the mesh [ commit 1527f1f2 ], can create a patch from a face zone generated directly from a configuration in the createPatchDict file [ commit f05b6ee8 ] and uses a simpler dictionary format in its configuration files [ commit de7e4107 ].
  • setFields: simplified file input and can use zones configured directly within the setFieldsDict file itself [ commit e12d83e7 ].
  • Rigid body motion: can now include pointZones which can move with a rigid body [ commit c184f81b ].

For information about zones and associated utilities, see “Dynamic Zones in OpenFOAM” and “OpenFOAM User Guide: 5.6 Mesh zones”.

Multi-region simulations

  • Mapping: Multi-region cases can now do mesh-to-mesh mapping by including the set of meshes used at mapping times in a meshes sub-dictionary [ commit cbfa3627 ]
  • Meshing: For simulations with multiple regions, individual meshes can be generated and manipulated using the -region option [ commit c0c636f6 ].
  • Non-conformal coupling: New moveUpdate parameter in non-conformal coupled (NCC) interfaces controls whether the intersection/mapping needs updated between never (for stationary meshes), always (moving meshes) and detect (sometimes moving, sometimes stationary) [ commit ad8a5e82 ].  Mesh stitching now works with multiple NCC interfaces which are closely connected [ commit d76d4047 ].  Fixed ordering of non-conformal mapped wall patches with domain decomposition [ commit 7220bc3b ].  The user can indirectly control which patches of a non-conformal coupled interface become owner and neighbour; the owner patch projects onto the neighbour so it makes sense that the owner corresponds to the coarser mesh [ commit e458c678 ].
  • Mesh stitching: Improved the robustness of stitchMesh [ commit 8a90693c ].

Function Objects

  • General: The #includeFunc directive now supports macro expansions within arguments [ commit 2bb1fd47 ].
  • Scalar transport: Improved scalarTransport and phaseScalarTransport to enable caching of diffusivity so it can be used elsewhere [ commit 92eef5ec ].  The scalarTransport function object now solves the transport equation at the end of the time step using the converged flux field from the time step [ commit d4f3f480 ]; also for the phaseScalarTransport function object [ commit 604b24e1 ].
  • Fields: New power function object calculates various power fields [ commit 0cc6f26b ].
  • Reactions: Reaction rate function objects now include an option to write the reaction rate fields [ commit 1c19a34b ]
  • Graphs:  The cutLayerAverage function object writes graphs of cell values, volume-averaged across planes perpendicular to a given direction or in contours of a given distance field [ commit 0d43f803 ].
  • Other: Population balance function objects now work with foamPostProcess from HZDR [ commit fe17ea77 ].
  • Data output: New Function1s include: shift, which shifts a function along the x-axis; repeat, which repeats the function with a specified period/frequency; and normalise which scales a function so its integral equals one (or scaled again) [ commit 37638286 ]Function1 can select specific columns of data from table files in OpenFOAM format [ commit 662fe586 ].

Models

  • Fluid sources: An fvFieldSource can now operate on an entire volume field rather than a small region within in a volume field [ commit 6bb26587 ].
  • Momentum: New rigidBodyPropellerDisk fvModel provides a propellerDisk model with support for mesh motion [ commit d5b963ae ] and propellerDiskForce applies the opposite force and moment of the propellerDisk onto the body to which the propeller is attached [ commit 6137b137 ]; later corrected [ commit d118afa2 ].

General Boundary Conditions

  • Pressure: Corrected the waveSurfacePressure boundary condition when using a reference pressure [ commit 53941b20 ].
  • Temperature: The externalTemperature boundary condition now can be used with an external radiation emissivity without also needing an external convective heat transfer coefficient [ commit 4b4bcef1 ].
  • General: Boundary conditions which calculate mass diffusion have been updated to use effective diffusivity rather than assume a Lewis number of one [ commit 4d52188c ].

Case Configuration

  • General configuration: In the tutorials, the getApplication function an associated application entry in controlDict have been removed where possible, since it defaults to foamRun [ commit 9971c8c5 ].  A new foamMergeCase utility can create a new case from an existing one, merging in small changes [ commit 486df09c ].  The nCorrectors input keyword is now used consistently to specify the number of correctors in PISO, PIMPLE, VoF and multiphaseEuler phase-fraction solution, populationBalance, scalarTransport and phaseScalarTransport [ commit ef79c692 ].
  • Case initialisation: Keyword parameters, e.g. Ux, substituted within coded entries in input files are now expanded so they are written with the parameter value, allowing restarts of simulations [ commit 52514ec4 ].  The writeOptionalEntries switch prints default values used in a simulation, allowing the user to check the values [ commit 039e06cf ].
  • Units: The Avogadro number, Universal Gas constant and the Faraday constant are each provided as two variables, one in terms of mol (mole) units, the other using kmol (kilo-mole): (respectively) NA, R and F use mol; NNA, RR and FF use kilo-mol [ commit 5e423f69 ].  The values of dimensioned constants are now converted automatically between unit systems [ commit 84991fbe ].

For more information about foamMergeCase, see “OpenFOAM User Guide: 4.7.9. The foamMergeCase script”.

Visualisation

  • Animation: New foamVTKSeries script generates .vtk.series files which can be opened in ParaView to interpret a series of VTK files from OpenFOAM post-processing [ commit f7aac692 ]
  • Graphs: The foamMonitor tool has been improved to open the default graphical window in interactive mode and shutdown cleanly [ commit f6a6e48c ]
  • ParaView reader: The PVFoamReader (launched with the paraFoam script) can now read a decomposed case [ commit 81583278 ].  The time selector never gets stuck in sequence mode, so always displays case times correctly [ commit 737df51e ].

For more information about foamVTKSeries, see “OpenFOAM User Guide: 7.4.5. The foamVTKSeries script”.

Cases

Other

  • Other numerics: Implemented the eigendecomposition of an N×N scalarSquareMatrix [ commit 4ca8ea20 ].  Converted moment of inertia tensors to use symmTensor [ commit cf85a155 ].  Made the polygon triangulation more robust [ commit 7cf271cd ].
  • Fields: The template arguments of GeometricField, a fundamental building block of Field Operation and Manipulation (FOAM) have been modified to allow more flexible options for the internal field [ commit 3e98252e ].  Added a new fvc::surfaceIntegrateExtrapolate function which produces a full field including boundary values, with the surfaceIntegrate and surfaceSum functions now only returning an internal field [ commit 66a9057f ].
  • Data management: Removed unnecessary dictionary copies from OpenFOAM [ commit a512d3fc ].
  • Starter Code: The foamNewApp script includes a -plain option to create starter code for a simple (non-CFD) application [ commit 55568890 ].

Credits

OpenFOAM 13 was produced by CFD Direct: Henry Weller, Will Bainbridge, Chris Greenshields and Aidan Wimshurst.

With contributions from Stanislau Stasheuski, Clemens Gößnitzer, Ronald Lehnigk, Timo Niemi and Mahmoud Gadalla.

Licence

OpenFOAM 13 is distributed under the General Public Licence v3 by the OpenFOAM Foundation.

Artwork