Learning OpenFOAM 14 – Step-by-Step CFD Guides

In progress

by giux 18 articles last on October 16, 2026 0 comments

A path for learning OpenFOAM 14 (Foundation / CFD Direct) from scratch, one case at a time. Each guide builds a complete, reproducible case, solves it and checks the result with numbers: where an analytical solution exists, the comparison is quantitative, not just visual.

The first block uses a single physical problem, laminar flow between two parallel plates, which has the exact Poiseuille solution. Keeping the physics fixed makes it possible to change one thing at a time and see its effect: the mesh, the mesh generator, Python automation, parallel runs, boundary conditions.

The first six cases of the path in an overview video (in English), generated with Gemini Notebook from the articles.
  1. Case 01 – laminar flow between parallel plates, validated against Poiseuille
  2. Case 02 – mesh convergence study
  3. Case 03 – importing a Gmsh mesh with gmshToFoam
  4. Case 04 – parametric channel with the Gmsh Python API
  5. Case 05 – parallel runs with MPI
  6. Case 06 – sensitivity to the inlet boundary condition

The tools are OpenFOAM 14 with the incompressibleFluid solver via foamRun, blockMesh and Gmsh for meshing, ParaView 5.13.2 in client-server mode for visualization, Python 3 for parametric generation and OpenMPI for parallel runs.

These are the first six introductory guides.

Building a case, file by file

The second stage of the path changes the question: no longer how to run a ready-made case, but why it contains those files and how to write them yourself. It is an eight-part series, one layer of the case at a time.

  1. Part 1 – case anatomy and dictionary language
  2. Part 2 – building a mesh with blockMeshDict
  3. Part 3 – fields, initial conditions and boundary conditions
  4. Part 4 – controlDict and simulation control
  5. Part 5 – fvSchemes, from equations to discretisation
  6. Part 6 – fvSolution, linear solvers and solution algorithms
  7. Part 7 – physical properties and models
  8. Part 8 – reading and creating cases independently

Read in order, the eight parts lead from the structure of a case to reading an unfamiliar one and building a new one independently: fields and boundary conditions, execution control, discretisation schemes, linear solvers and algorithms, physical properties and models.

Working on a Linux server from Windows

Four operating guides accompany the path for anyone working on a Linux server from a Windows PC. The first covers the whole workflow: editing dictionaries in Notepad++, SFTP transfers with FileZilla, running over SSH from PowerShell with tmux, inspecting logs with klogg and visualizing results with ParaView connected to pvserver through an SSH tunnel. The PDF is included for download. The second covers what comes after launch: reading the log, residuals, function objects, pressure drop and flow rate, mass balance and a reproducible convergence assessment. The third uses ParaView to measure: profiles, section averages, flow rates, pressure drop, Poiseuille comparison and recirculation regions. The fourth establishes whether a result is reliable: quantity of interest, a family of three meshes, mass balance, comparison with Poiseuille, observed order, Richardson extrapolation and GCI, time-step study and physical validation.

Featured articles 3

Software used

  • OpenFOAM 14 OpenFOAM Foundation: the CFD code used throughout the path, with the incompressibleFluid solver via foamRun.
  • Gmsh Mesh generator used from Case 03, also through its Python API in Case 04.
  • ParaView Result visualization, version 5.13.2 in client-server mode with pvserver.

Documents and handouts

Project log 18

  1. Sep 21, 2026 OpenFOAM 14 Case 01: Laminar Flow Between Parallel Plates, Validated Against Poiseuille First case of the OpenFOAM 14 path: a laminar parallel-plate channel built from scratch with blockMesh, solved with foamRun and validated against the Poiseuille…
  2. Sep 22, 2026 OpenFOAM 14 Case 02: Mesh Convergence Study on a Laminar Channel The same laminar channel on three meshes (2,000, 8,000, 32,000 cells): the error against Poiseuille scales with order about 2. How to set up…
  3. Sep 23, 2026 OpenFOAM 14 Case 03: Importing a Gmsh Mesh with gmshToFoam The laminar channel rebuilt with a structured Gmsh mesh imported through gmshToFoam: patches, changeDictionary and a comparison with blockMesh giving identical results.
  4. Sep 25, 2026 OpenFOAM 14 Case 04: Parametric Channel Mesh with the Gmsh Python API A Python script using the Gmsh API builds the channel from command-line parameters: same logic, different geometries and meshes, validated in OpenFOAM 14 against…
  5. Sep 26, 2026 OpenFOAM 14 Case 05: Parallel Runs with MPI, decomposePar and reconstructPar The same case in serial and with four MPI processes: SCOTCH decomposition, mpirun, reconstructPar, a 3.5× speed-up and numerical equivalence checked point by point.
  6. Sep 27, 2026 OpenFOAM 14 Case 06: Sensitivity to the Inlet Boundary Condition Three inlet velocities, same mesh and solver: maximum velocity and pressure gradient scale as Poiseuille predicts. How to isolate the effect of a boundary…
  7. Sep 29, 2026 OpenFOAM 14 Part 1: Case Anatomy and Dictionary Language First part of the OpenFOAM 14 case-construction series: system, constant and time directories, the FoamFile header, dictionary syntax, dimensions and units, field files, macros…
  8. Sep 30, 2026 OpenFOAM 14 Part 2: Building a Mesh with blockMeshDict Second part of the OpenFOAM 14 series: a 3D duct from eight vertices, the hex block, cell counts, simple and symmetric grading, boundary patches,…
  9. Oct 16, 2026 OpenFOAM 14 Part 3: Fields, Initial Conditions and Boundary Conditions How to write and reason about the OpenFOAM 14 field files 0/U and 0/p: internalField and boundaryField, field classes and named dimensions, matching mesh…
  10. Oct 16, 2026 OpenFOAM 14 Part 4: controlDict and Simulation Control The OpenFOAM 14 system/controlDict explained entry by entry: solver module for foamRun, simulated time, start and stop rules, write policies, purgeWrite, restarts, adaptive time…
  11. Oct 16, 2026 OpenFOAM 14 Part 5: fvSchemes, from Equations to Discretisation How to read and modify system/fvSchemes in OpenFOAM 14: from equation terms to the six scheme families (ddt, grad, div, laplacian, interpolation, snGrad), defaults…
  12. Oct 16, 2026 OpenFOAM 14 Part 6: fvSolution, Linear Solvers and Solution Algorithms What happens after discretisation in OpenFOAM 14: the A x = b system, the solvers dictionary of system/fvSolution, tolerance, relTol and maxIter, GAMG, smoothers…
  13. Oct 16, 2026 OpenFOAM 14 Part 7: Physical Properties and Models From kinematic viscosity in physicalProperties to laminar, RAS and LES models in momentumTransport: what changes in a case when the physics changes, which fields…
  14. Oct 16, 2026 OpenFOAM 14 Part 8: Reading and Creating Cases Independently The final unit of the course: the official v14 documentation, foamDictionary, foamSearch, foamInfo, foamToC and foamFind, systematic error diagnosis and a capstone case built…
  15. Oct 16, 2026 OpenFOAM on a Linux server, working from Windows: SSH, FileZilla, PowerShell, logs and ParaView client/server An operating guide to using OpenFOAM 14 installed on a Linux server while working from a Windows PC: preparing cases in Notepad++, SFTP transfers…
  16. Oct 16, 2026 OpenFOAM: monitoring, troubleshooting and convergence assessment An operating guide to checking an OpenFOAM 14 run from launch to result assessment: reading the log, residuals and continuity, function objects for residuals…
  17. Oct 16, 2026 ParaView for OpenFOAM: quantitative analysis and scientific post-processing Using ParaView 5.13 with OpenFOAM 14 to measure, not just to visualise: profiles with Plot Over Line, section averages and flow rates with Integrate…
  18. Oct 16, 2026 OpenFOAM: verification, validation and mesh independence A repeatable protocol to decide whether an OpenFOAM 14 result is trustworthy: quantity of interest, a family of three meshes, iterative convergence and balances,…

All projects