CFD tutorial no. 15 — Industrial fan CFD
When the machine is enclosed

This industrial fan CFD tutorial covers the closed duct : cylindrical domain, dedicated presets, Phase 2 under close watch.

Start with tutorial no. 1

Industrial fan CFD: tutorial for the closed-duct calculation

CFD tutorial no. 15 of 20. The steps described here are those of the HELICIEL CFD tool window, opened from Heliciel: they assume the PRO CFD/BEM extension is active. This tutorial follows a real case: the fan model shipped with the software, in a closed duct, with a finned radiator inserted downstream. Every figure comes from the results file and the log of this case, every screenshot from its window. Test machine: desktop PC i7-8086K, 6 cores, 64 GB, 11 processes.

A confined axial machine — duct fan, bulb turbine, propeller pump, ducted thruster — cannot be calculated like a propeller in free air. The entire flow rate passes through the duct, the duct wall is part of the problem, and the blade tip clearance becomes a first-order quantity. This tutorial shows what that costs, what it delivers, and where the current chain reaches its limits — because this is the hardest configuration on the test bench, and it's better to know that before launching a two-hour run.

  1. Four configurations, not one
  2. The machine under study, and its BEM reference
  3. The cylindrical domain and its cost
  4. The duct presets
  5. The wall conditions applied
  6. Reading the result — and putting it in perspective
  7. Recognizing a duct mesh that won't hold
  8. Phase 2 in a duct, and its warning

1: Four configurations, not one

The bench distinguishes four case families, and the choice is made at creation :

When you create the case from a ducted propeller, Heliciel asks the question : free stream or duct ? Answer duct for a duct fan, a penstock turbine, a propeller pump. The answer changes the domain, the boundary conditions and the preset catalogue — it cannot be corrected afterwards.

2: The machine under study, and its BEM reference

The fan model shipped with Heliciel is used as the example, placed in a cylindrical duct with a finned radiator (an STL file dropped in the Insert tab, 1.5 m downstream of the rotor). Like every shipped model, it opens with a design point at zero: run Analyze operating point before switching to CFD, otherwise the BEM reference in the case folder will read zero.

Diameter1,250 mm (hub ∅ 400 mm), 7 blades
Ductinner diameter 1,300 mm: the whole flow goes through the machine
Speed960 rpm — blade tip 64.0 m/s, Mach 0.188
Bulk velocity12.33 m/s — J = 0.616
Fluidair, ρ = 1.3 kg/m³
Blade thrust / torque (BEM)479.2 N / 75.19 N·m, i.e. 7.56 kW on the shaft at 100.5 rad/s

The bench adds a remark as soon as the case is created, and it matters for what follows: “Tip clearance not modelled by the BEM: the rotor plane offers 9.1 % more cross-section than the BEM annulus. The CFD flow rate exceeds the BEM one by as much; an agreement at that level would not be physical.” In a closed duct, the BEM reference is therefore only an order of magnitude: the machine in the CFD calculation is not exactly the designer's one.

3: The cylindrical domain and its cost

In a closed duct, the domain is no longer a box: it is a cylinder meshed as an O-grid, five blocks, with an inlet, an outlet and a duct wall, into which the machine and the inserted object are cut. Direct consequence: the mesh is much heavier than for a free propeller.

The same installation — fan, duct and radiator — was meshed with two consecutive presets:

PresetCellsMeshing time (11 processes)Boundary layers on the blades
Conduit Level 21,396,6221 h 43 min 53 s0
Conduit Level 36,509,1484 h 35 min 24 s2 (1 in the catalogue, +1 for a ducted rotor)

One preset step multiplies the cell count by 4.7 here, and the meshing time by 2.7. For comparison, the lightest free propeller preset meshes in 49 seconds for 15,246 cells (boat propeller, Libre Level 1). Plan your time accordingly: in a closed duct, even the first step is an evening's calculation, and the next one an overnight one. Only Level 3 was computed afterwards; it is the one the rest of this page uses.

4: The duct presets

The catalogue changes with the configuration. In a closed duct there are only four levels, much closer together than the eight free-propeller levels:

PresetBackgroundSurface refin.EdgesLayersCostWhat it aims at
Conduit Level 18×6×64-450×1Smoke: domain convergence
Conduit Level 28×6×64-460×1.1Refined snapping and sharp edges
Conduit Level 38×6×64-561×1.5Ceiling: tip gap cut to keep Phase 2 fast
Conduit Level 48×6×64-561×1.5Reinforced: same mesh, more careful snap/layer convergence

Two useful remarks. The cost shown is the catalogue's: on the case of this page, going from Level 2 to Level 3 cost far more than the announced “×1.1 → ×1.5”. And levels 3 and 4 share the same mesh geometry: what separates them is the care taken over snapping and layer-stack convergence, not the fineness.

5: The wall conditions applied

The results panel shows the boundary conditions actually applied, and it is a reflex to acquire in a closed duct — they are not those of a free propeller:

Hubslip (frictionless) — no boundary layer on the hub
Ductclosed duct (pipeWall from blockMesh, not from an STL)
Duct wallslip (frictionless) — no boundary layer on the wall
Inlet / outletvelocity imposed at the inlet, pressure imposed at the outlet

The frictionless wall is a deliberate choice of the chain: stacking boundary layers on the duct wall, on top of those on the blades, produces cells that cross each other in the tip gap in this context, and makes meshing fail. It has a price: friction pressure losses on the duct wall are not modelled. And since the velocity is imposed at the inlet, the flow rate is not a result: what the calculation gives is the pressure needed to push it through.

6: Reading the result — and putting it in perspective

surface pressure on the blades, the hub, the radiator fins and the wall of a fan duct in CFD
Surface pressure, Phase 1: blue on the back of the blades (suction), duct wall orange between the fan and the radiator, where the compressed air waits to get through the fins. The scale in absolute pascals is at the top right.

streamlines crossing the rotor then the radiator fins in a fan duct
Streamlines, coloured by axial velocity, cross the rotor then slip between the radiator fins. The velocity scale, on the left, runs from 4 to 23 m/s.

The verdict on the installation fits in one signed number, which the panel computes between the inlet and the outlet of the duct: −22.1 Pa of static pressure (−17.5 Pa in total pressure), for a mass flow of 21.1 kg/s conserved within 0.03 %. Negative, it says that the radiator holds back a little more than the fan pushes at this flow rate. This is the detailed reading of case study no. 7, which is about the same calculation.

The forces, on the other hand, call for caution:

BEM (blades)CFD Phase 1 (blades)deviation
Thrust479.2 N270.0 N−43.7 %
Torque75.19 N·m52.64 N·m−30.0 %
Shaft power7.56 kW5.29 kW−30.0 %

The bench provides a second, independent testimony here, separate from the wall forces: it compares the torque read on the surfaces with the torque deduced from the angular-momentum balance of the fluid crossing the rotor. The two should agree. The log writes:

[Audit Euler] Couple fluide (Euler)=-30.34 Nm, couple surfaces (pales+hub)=-52.68 Nm, captage=174% -> AVERTISSEMENT
[Audit Euler]   -> le moment cinetique retire au fluide n'est pas converti en effort sur les pales :
[Audit Euler]      dissipation numerique dans la zone rotor. Le ratio CFD/BEM n'est PAS interpretable.
[Audit Euler]      Remede : preset superieur (raffinement zone pales) et/ou couches limites > 0.

In other words, the torque read on the surfaces is 1.74 times what the fluid actually lost in rotation. Such a gap cannot be made up by a solver setting: it says that the mesh does not faithfully carry momentum through the rotor zone. The field also contains a maximum velocity of 747 m/s for a machine whose blade tip turns at 64 m/s — a local extremum, produced by a few degenerate cells, enough to distort any automatic colour scale. These forces are a result of the configuration, not a result of the machine: do not quote them as the fan's performance.

CFD results panel of the fan in a closed duct: wall conditions, thrust, torque, pressure difference
The results panel in a closed duct: it recalls the wall conditions applied before giving the forces and the pressure difference. Read them first.

cut normal to the flow just behind the rotor of a ducted fan: axial velocity and blade footprint
Cut normal to the axis, just behind the rotor, coloured by axial velocity: the footprint of the seven blades can be read in the annulus, and the blue ring along the wall marks the air slowed down in the tip gap. The squares visible around the edge are the mesh cells.

vertical cut of turbulent viscosity in a fan duct: turbulence created by the radiator
Vertical cut coloured by turbulent viscosity. The scale runs from blue (zero) to red (maximum, 0.039 m²/s). At this mesh, the rotor creates almost none; turbulence appears in the radiator fins and behind them. The grey banner recalls the quantities of the calculation.

7: Recognizing a duct mesh that won't hold

The bench analyses checkMesh at the end of meshing, and gives a reliability index at the end of the calculation: 52 % on this case, rated “Acceptable”. The detail is written in the log:

Heliciel Hybrid BEM/CFD (snappyHexMesh): Finished meshing with 563 illegal faces (concave, zero area or negative cell pyramid volume)
Heliciel Hybrid BEM/CFD (checkMesh): ***Error in face tets: 1 faces with low quality or negative volume decomposition tets.
Heliciel Hybrid BEM/CFD (checkMesh): ***Cells with small determinant (< 0.001) found, number of cells: 139
Heliciel Hybrid BEM/CFD (checkMesh): ***Concave cells (using face planes) found, number of cells: 323 018
Heliciel Hybrid BEM/CFD (checkMesh): ***Faces with small interpolation weight (< 0.05) found, number of faces: 65
Heliciel Hybrid BEM/CFD (checkMesh): Failed 5 mesh checks.
Solver: checkMesh métriques — skewness max=13.14 (seuil 4), faceTets négatifs=1, cellules det<0.001=139, régions=0, checks échoués=5

The two lines that matter are the skewness (13.14 for a threshold of 4) and the 139 nearly degenerate cells. A cell with a near-zero determinant has an effective volume close to zero: gradients blow up there, and that is where the 747 m/s comes from. The bench says it plainly in its diagnosis: “structural divergence guaranteed” in Phase 2.

These defects gather in a known zone: the blade tip gap, where the mesh has to fit cells between the rotating blade and the duct wall, over a thickness of a few millimetres. It is the hard point of the whole configuration. The Show > Highlight problem cells overlay counts and locates them: on this case, 47 cells fall below one hundredth of the median volume, and their full report — azimuthal, radial and axial histograms — is written to the log. The markers themselves are tiny at the scale of a 1.3 m duct: read the report rather than the picture.

8: Phase 2 in a duct, and its warning

Sliding-mesh Phase 2 is only possible in a closed duct from Level 3 up: levels 1 and 2 have no boundary layers, and the bench refuses to launch Phase 2 on a mesh without layers. The case of this page, at Level 3, meets that condition. It was not taken on to Phase 2, for two reasons the bench displays itself: its mesh diagnosis announces a divergence, and when Phase 2 is ticked on a closed duct, it warns that it costs 50 to 300 hours per revolution and that Phase 1 is enough for the mean forces. In a closed duct, Phase 2 is in any case limited to 0.3 revolution, for all four presets.

What to do, in order:

  1. read the reliability index and the checkMesh detail before launching Phase 2;
  2. if nearly degenerate cells are reported, do not launch. The remedy the bench itself proposes is a higher preset; going from Level 1 to Level 2 adds neither boundary layers nor surface cells and does not make Phase 2 possible, whereas levels 3 and 4 carry a boundary layer and cut the tip gap;
  3. the “problem cells” overlay tells you where the mesh gave way;
  4. if the tip gap is the cause, the Level 3 and Level 4 presets deliberately cut it to keep a sound mesh: it is a compromise, not a defect.

For confined machines whose Phase 2 does go through, everything described in tutorial no. 5 applies unchanged. And for an energy-extracting machine in a duct — bulb turbine, Kaplan, penstock — the reading of signs is that of tutorial no. 14: positive torque, a machine that produces.

The collection of twenty CFD tutorials

« Previous: Wind turbine and tidal turbine  |  Next: Aircraft propeller, cruise and static thrust »

  1. First CFD propeller simulation
  2. Reading the OpenFOAM case folder
  3. Choosing the mesh preset
  4. The MRF zone and Phase 1
  5. Phase 2 with sliding mesh
  6. Comparing BEM and CFD
  7. Reading the convergence of a run
  8. Turbulence models
  9. Boundary layer and y+
  10. Reading a pressure map
  11. Where the forces come from
  12. Checking an airfoil polar
  13. Marine propeller and cavitation
  14. Wind turbine and tidal turbine
  15. Fan in a closed duct (you are here)
  16. Aircraft propeller, cruise and static thrust
  17. The optimisation loop
  18. Calibrating on a reference
  19. From the hull to the propeller
  20. The deliverable calculation file

This series accompanies the Heliciel design tutorials, which cover the BEM side: blade design, choosing the rotation speed, performance curves. CFD comes after them, to verify and to see.

Short, jargon-free version of this tutorial: the ducted fan CFD case study with a radiator in the duct.