The Navier-Stokes equations govern every fluid flow in existence, yet no general analytical solution exists in 3D. CFD discretises these equations and solves them numerically, giving aerospace engineers the ability to simulate aerodynamics without building a single physical model.
Every CFD solver numerically approximates the solution to the Navier-Stokes equations. Understanding these equations is essential to using any CFD tool correctly.
That second line does a lot of work. With no equation of state tying p to anything else, pressure here is not a thermodynamic property at all. It is a Lagrange multiplier, and its whole job is holding ∇·u = 0 at every instant. Hence the pressure-velocity coupling schemes below, and hence the pressure solve eating most of your run time.
Unsteady / local acceleration. Dropped by assumption in steady RANS, which is not the same as being physically zero. Run steady RANS on a stalled aerofoil and this term is what you have thrown away; the oscillating CL you get is the solver telling you so.
Convective acceleration. The nonlinear term responsible for turbulence and why no general solution exists.
Pressure gradient force. Fluid accelerates from high to low pressure. The primary lift-generating mechanism.
Viscous diffusion of momentum. Negligible in the outer flow, dominant near walls where it enforces no-slip. Largest in the viscous sublayer (y⁺ < 5) and significant across the whole boundary layer, plus wakes, shear layers and vortex cores. y⁺ is a mesh-resolution measure, not a region of the flow.
Body force (gravity). Often negligible in external aerodynamics but important for buoyancy-driven flows.
Resolving every turbulent eddy requires DNS at a cost proportional to Re³, infeasible at aircraft Reynolds numbers. RANS models introduce turbulent viscosity to close the equations at a fraction of the cost.
The k-ω Shear Stress Transport (SST) model by Menter blends k-ε in the freestream (where it performs well) with k-ω in the near-wall boundary layer (where k-ω is more accurate). It is the standard model for external aerodynamics because its shear-stress limiter makes it behave far better than k-ε under adverse pressure gradients. That is a relative claim, not an absolute one: SST still advances or delays separation onset depending on the case. It is also a fully turbulent model. On a UAV or model-scale aerofoil below about Re 10⁶, where the real flow has a laminar separation bubble, SST cannot represent the physics at all and will give confidently wrong CL and CD on a perfect mesh. Use a transition model (γ-Reθ) or cross-check against XFOIL with eN transition before trusting low-Re results. Two transport equations are solved: one for turbulent kinetic energy k and one for specific dissipation rate ω. SST is the recommended starting model for any aerofoil or aircraft simulation in ANSYS Fluent.
The k-ε model solves for turbulent kinetic energy k and dissipation rate ε. It performs well in the freestream and for fully turbulent internal flows (pipes, ducts, jet mixing). It over-predicts separation in adverse pressure gradients near walls and is not recommended for external aerodynamics. The Realizable k-ε variant improves on the standard model by satisfying physical realizability constraints. Often used as a first-pass solver to initialise SST runs.
LES resolves eddies larger than the mesh filter width directly and only models the small sub-grid scales. It captures unsteady flow phenomena that RANS cannot: vortex shedding, separated shear layers, and jet noise. The scaling depends entirely on how the wall is treated. Wall-resolved LES grid count scales as roughly Re1.86 (Choi & Moin, 2012), which keeps it out of reach at flight Reynolds numbers just as firmly as DNS. Wall-modelled LES scales closer to Re1 and is the only version that is tractable on a wing. Quoting a single LES cost figure without that distinction hides the reason WRLES is not an option for you. Detached Eddy Simulation (DES) hybridises RANS near walls with LES in separated regions: an excellent compromise for high-AoA separated flows and store separation problems.
A bad mesh is the most common cause of a run that will not converge or that returns obviously wrong numbers. It is not automatically the largest error source: once the mesh is adequate, turbulence model choice usually dominates the error budget for separated flow. Mesh quality and mesh resolution are also independent; a perfectly orthogonal 5,000-cell mesh is still a bad mesh.
There are two legitimate near-wall strategies and you must pick one deliberately. Wall-resolved (low-Re): put the first cell centroid at y⁺ ≲ 1 and integrate through the viscous sublayer. Wall functions: put it at y⁺ ≈ 30 to 300 and use an analytical log-law bridge, which is what standard k-ε normally assumes. What you must not do is land in the buffer layer, roughly y⁺ 5 to 30, where neither approach is valid. Note y⁺ is an output, not an input: you can only estimate it before the run and must check it afterwards.
Cells with skewness above 0.9 or orthogonality below 0.1 degrade accuracy and can provoke divergence; these particular thresholds are ANSYS Fluent conventions and other solvers define the metrics differently. High cell aspect ratio in inflation layers is desirable, not a defect. Structured hexahedral meshes give the highest accuracy per cell; hybrid meshes use prismatic layers near walls with tetrahedra elsewhere.
A CFD study follows five sequential phases. Errors in early phases propagate through to final results, garbage in, garbage out applies absolutely in CFD.
Define the aerofoil or aircraft geometry. For a NACA profile: import surface coordinates, create the fluid domain extending well beyond the body. A lifting aerofoil's induced velocity field decays only as 1/r, so a 20-chord boundary imposes a measurable circulation-dependent error on CL. Use 50 to 100 chords, or 20 chords with a point-vortex far-field correction, and demonstrate boundary independence the same way you demonstrate mesh independence, and Boolean-subtract the geometry from the fluid block. Named Selections: aerofoil_wall, inlet, outlet, far-field.
Generate the computational mesh. Target 80,000 to 200,000 quad cells for a 2D RANS aerofoil. Apply inflation layers near the wall targeting y⁺ ≤ 1 with growth ratio ≤ 1.2. Check quality metrics: max skewness < 0.9, min orthogonality > 0.1. Poor mesh is the leading cause of solver divergence.
Set boundary conditions in Fluent: Velocity Inlet (V = 50 m/s, Tu = 0.1%), Pressure Outlet (gauge = 0 Pa), Wall (no-slip). Select k-ω SST turbulence model. Enable Realizable k-ε as a comparison run. These conditions define the physical problem, wrong BCs give a correct solution to the wrong problem.
Convergence is not a residual number. Residuals are scaled against an early iteration, so where they land depends on how you initialised. A run can sit at 1e-6 and be nowhere near converged, or sit at 1e-3 and be done. Check three things instead: CL and CD have stopped moving over a few hundred iterations, mass and momentum imbalance is under about 0.1% of the inlet flux, and the residuals have flattened out after dropping several orders. If CL keeps swinging, the flow is unsteady and wants a transient run. Averaging a steady solver is not a fix.
Two separate jobs, often muddled together. Verification asks whether you solved the equations right. No experiment needed: run three systematically refined meshes, work out the observed order of accuracy, extrapolate to zero cell size and report a Grid Convergence Index. Keep iterative error and discretisation error apart, they are different things. Validation asks whether you solved the right equations, and only then do you go to experiment.
A percentage on its own is not validation. AIAA G-077 and ASME V&V 20 want the comparison error carried with uncertainty from both sides, yours and the experiment's. "Within 5 to 10%" is loose anyway for 2D RANS, where Drag Prediction Workshop practice is closer to 1 to 2% on CD. Expect CL to settle before CD does. Check y⁺ from the converged solution, not from what you guessed beforehand.
CFD does not solve the Navier-Stokes equations. It solves a discretised, modelled approximation of them on a finite mesh. Every one of those three words introduces error, and being able to name which one you are looking at is what separates a CFD user from a button-presser.
Almost every aerospace solver is finite volume. The domain is split into control volumes and the integral conservation laws are applied to each: what enters through the faces must leave or accumulate. This is why finite volume is conservative by construction, and why a converged solution still satisfies global mass balance even on a coarse mesh. The whole numerical problem reduces to one question: given the values stored at cell centres, what is the flux through each face?
First-order upwind hardly ever diverges, and that is the trap. Its truncation error behaves like extra viscosity, smearing shocks, shear layers and vortex cores while the result still looks entirely reasonable. Central differencing is second-order but rings where gradients get steep. In practice, start on first-order to settle the field, then switch to second-order upwind and re-converge before trusting anything. If the numbers move when you switch, what you had was numerical diffusion, not physics.
Incompressible flow has no equation of state handing you pressure, so the solver has to build a pressure field that satisfies ∇·u = 0. SIMPLE does it by guessing, solving momentum, measuring the leftover mass imbalance and correcting, over and over until the imbalance goes away. PISO adds a second correction step and suits transient work. A coupled solver does momentum and continuity at once: heavier on memory, far fewer iterations. When momentum residuals drop nicely but continuity sticks, this is what is struggling, and the cause is usually the mesh or your under-relaxation rather than the physics.
Keep these apart or you will never debug anything. Model error comes from the turbulence closure, which is a calibrated fit rather than physics, and no amount of mesh will shift it. Discretisation error comes from the mesh and the scheme, and it is the only one a grid study can measure. Iterative error comes from stopping too early, and is cheap to fix. Round-off rarely matters in double precision, though it can on very fine or badly scaled problems. Refining the mesh touches the second and leaves the first exactly where it was.
Visualise flow fields, mesh generation, and turbulence models: the concepts made visible.
The physics that CFD simulates: lift, drag, boundary layers, and shock waves. Understand the theory before running simulations.
Inlet aerodynamics, nozzle flows, and combustor CFD: propulsion and CFD go hand in hand.
The CL and CD values your CFD produces feed directly into flight mechanics performance calculations.
Import Cp distributions from Fluent into MATLAB, integrate for CL and CD, and validate against NACA experimental data.
Turbulence model sensitivity studies, supersonic inlet simulations, NACA aerofoil parametric studies: all with defined methodologies.
New to CFD? Start with the broader picture of aerospace engineering disciplines and where CFD fits in.
SheCodes Lab teaches Python and C++ from scratch, side by side, free, no experience needed. Includes an engineering module covering NumPy, pandas, ISA models, cost index, and flight data analysis. The same tools used to build the calculators on this site.
shecodeslab.com →