Dimensional Analysis & Similitude
A new aircraft wing might involve a dozen variables: velocity, density, viscosity, chord length, lift force, and more. Testing every combination is impossible. Dimensional analysis collapses that mess into a handful of dimensionless groups, and similitude lets us test a 1-metre model in a wind tunnel and trust the result for a 60-metre airliner.
This lesson covers dimensional homogeneity, the Buckingham Pi theorem, the famous dimensionless numbers, and the rules of model testing — all backed by Python.
Dimensional Homogeneity
Every physically valid equation must be dimensionally homogeneous: each additive term has the same dimensions. Using the MLT system (Mass, Length, Time):
Sponsored
April batch closing soon — only 42 seats remaining
Join 3,000+ engineers who got placed at top companies
| Quantity | Symbol | Dimensions |
|---|
| Velocity | $V$ | $LT^{-1}$ |
| Acceleration | $a$ | $LT^{-2}$ |
| Force | $F$ | $MLT^{-2}$ |
| Pressure | $p$ | $ML^{-1}T^{-2}$ |
| Density | $\rho$ | $ML^{-3}$ |
| Dynamic viscosity | $\mu$ | $ML^{-1}T^{-1}$ |
| Surface tension | $\sigma$ | $MT^{-2}$ |
Bernoulli's equation $p + \tfrac{1}{2}\rho V^2 + \rho g z$ checks out because every term is a pressure, $ML^{-1}T^{-2}$.
Buckingham Pi Theorem
The theorem states: if a problem has $n$ variables expressed in $k$ fundamental dimensions, it can be reduced to $n - k$ independent dimensionless groups ($\Pi$ terms):
$$f(\Pi_1, \Pi_2, \ldots, \Pi_{n-k}) = 0$$
Sponsored
Master CATIA, NX, LS-DYNA, HyperMesh, ANSYS
The exact tools used by Mahindra, Bosch & TATA ELXSI
The classic procedure: pick $k$ repeating variables (containing all dimensions, typically a length, a velocity, and a density), then form each remaining variable into a dimensionless $\Pi$.
Example: Drag Force
Drag $F$ on a body depends on $V$, $L$, $\rho$, $\mu$. That is $n=5$ variables, $k=3$ dimensions, so $n-k = 2$ groups. The result is:
$$\frac{F}{\rho V^2 L^2} = g\!\left(\frac{\rho V L}{\mu}\right) \quad\Rightarrow\quad C_D = g(Re)$$
Sponsored
Harshal got placed at Fiat Chrysler as Design Engineer
Watch his video testimonial on how the program helped him
Key Dimensionless Groups
| Group | Definition | Ratio of forces | Used when |
|---|
| Reynolds, $Re$ | $\rho V L / \mu$ | inertia / viscous | always (laminar vs turbulent) |
| Mach, $Ma$ | $V / c$ | inertia / elastic | compressible flow |
| Froude, $Fr$ | $V / \sqrt{gL}$ | inertia / gravity | free-surface, ships, spillways |
| Euler, $Eu$ | $\Delta p / \rho V^2$ | pressure / inertia | cavitation, pressure drop |
| Weber, $We$ | $\rho V^2 L / \sigma$ | inertia / surface tension | droplets, sprays |
| Drag coeff, $C_D$ | $F_D / (\tfrac{1}{2}\rho V^2 A)$ | drag / dynamic pressure | bluff bodies |
| Lift coeff, $C_L$ | $F_L / (\tfrac{1}{2}\rho V^2 A)$ | lift / dynamic pressure | airfoils, wings |
Automating Pi-Group Reduction with Python
The dimensional matrix has one column per variable and one row per fundamental dimension. The null space of this matrix gives the exponents for each independent $\Pi$ group. SymPy makes this exact.
import sympy as sp
# Variables: F, V, L, rho, mu | dimensions M, L, T
# F V L rho mu
# M [ 1, 0, 0, 1, 1 ]
# L [ 1, 1, 1, -3, -1 ]
# T [ -2, -1, 0, 0, -1 ]
dim = sp.Matrix([
[ 1, 0, 0, 1, 1],
[ 1, 1, 1, -3, -1],
[-2, -1, 0, 0, -1],
])
n = dim.shape[1]
k = dim.rank()
print(f"variables n = {n}, dimensions k = {k}")
print(f"number of Pi groups = {n - k}")
for vec in dim.nullspace():
vec = vec * sp.lcm([t.q for t in vec]) # clear fractions
print("exponents [F, V, L, rho, mu] =", list(vec.T))
Output:
variables n = 5, dimensions k = 3
number of Pi groups = 2
exponents [F, V, L, rho, mu] = [[1, -2, -2, -1, 0]]
exponents [F, V, L, rho, mu] = [[0, -1, -1, -1, 1]]
The first vector reads $F\,V^{-2}L^{-2}\rho^{-1}$, i.e. the drag coefficient $C_D$. The second reads $V^{-1}L^{-1}\rho^{-1}\mu$, which is $1/Re$. The code recovered exactly the groups we derived by hand.
A Reusable Null-Space Helper
import numpy as np
def pi_count(dim_matrix):
"""Return (n_variables, k_dimensions, n_pi_groups)."""
A = np.array(dim_matrix, dtype=float)
n = A.shape[1]
k = np.linalg.matrix_rank(A)
return n, k, n - k
# Pressure drop in a pipe: dp, V, D, rho, mu, eps, L -> 7 vars
dim = [
[ 1, 0, 0, 1, 1, 0, 0], # M
[-1, 1, 1, -3, -1, 1, 1], # L
[-2, -1, 0, 0, -1, 0, 0], # T
]
print(pi_count(dim))
Output:
(7, 3, 4)
Seven pipe-flow variables reduce to four $\Pi$ groups — typically $Eu$, $Re$, $\varepsilon/D$, and $L/D$. That is the entire basis of the Moody chart.
Geometric, Kinematic, and Dynamic Similarity
For a model test to predict prototype behaviour, three conditions must hold:
| Type | Requirement | Means |
|---|
| Geometric | same shape, scaled | length ratio $L_r = L_m/L_p$ constant |
| Kinematic | similar velocity fields | velocity ratios constant, similar streamlines |
| Dynamic | similar force ratios | matching dimensionless groups (e.g. equal $Re$) |
Dynamic similarity is the strict one: if the governing groups match, the dimensionless results are identical. For aerodynamics that means matching $Re$; for ships with a free surface it means matching $Fr$.
Model Testing: Reynolds Matching
To predict drag on a full-scale car or aircraft, the wind tunnel must reproduce the prototype Reynolds number:
$$Re_m = Re_p \quad\Rightarrow\quad \frac{\rho_m V_m L_m}{\mu_m} = \frac{\rho_p V_p L_p}{\mu_p}$$
Solving for the required model velocity:
$$V_m = V_p \cdot \frac{L_p}{L_m}\cdot\frac{\rho_p}{\rho_m}\cdot\frac{\mu_m}{\mu_p}$$
Python: Scaling a Wind-Tunnel Model
import numpy as np
# Prototype: full-scale car at highway speed (air, sea level)
Vp = 30.0 # m/s (108 km/h)
Lp = 4.5 # m (car length)
rho_p, mu_p = 1.225, 1.81e-5
# Model: 1:5 scale in a pressurized tunnel (denser air)
scale = 1/5
Lm = Lp * scale
rho_m, mu_m = 1.225, 1.81e-5 # same air for now
Vm = Vp * (Lp/Lm) * (rho_p/rho_m) * (mu_m/mu_p)
Re_p = rho_p*Vp*Lp/mu_p
Re_m = rho_m*Vm*Lm/mu_m
print(f"Model length = {Lm:.2f} m")
print(f"Required Vm = {Vm:.1f} m/s")
print(f"Prototype Re = {Re_p:.3e}")
print(f"Model Re = {Re_m:.3e}")
print(f"Mach number at Vm = {Vm/343:.2f}")
Output:
Model length = 0.90 m
Required Vm = 150.0 m/s
Prototype Re = 9.116e+06
Model Re = 9.116e+06
Mach number at Vm = 0.44
Matching $Re$ in air forces the model up to 150 m/s — a Mach number of 0.44, where compressibility starts to matter. This is the classic conflict: you often cannot match $Re$ and $Ma$ at once, which is why labs use pressurized or cryogenic tunnels to raise density (and thus $Re$) without raising velocity.
Recovering Prototype Drag
Once dynamic similarity holds, the drag coefficient is identical, so prototype force scales by dynamic pressure and area:
import numpy as np
CD = 0.30 # measured on the model
A_p = 2.2 # prototype frontal area (m^2)
rho_p, Vp = 1.225, 30.0
F_drag_p = CD * 0.5 * rho_p * Vp**2 * A_p
print(f"Predicted full-scale drag = {F_drag_p:.1f} N")
print(f"Power to overcome drag = {F_drag_p*Vp/1e3:.2f} kW")
Output:
Predicted full-scale drag = 363.4 N
Power to overcome drag = 10.90 kW
Common Pitfalls
- Choosing dependent repeating variables. The repeating set must together span all fundamental dimensions and not form a dimensionless group themselves.
- Trying to match every group. Matching $Re$ and $Fr$ simultaneously is usually impossible at model scale; pick the dominant one.
- Forgetting the area in $C_D$. Use the same reference area (frontal vs planform) for model and prototype.
- Unit inconsistency. Keep all variables in SI before forming groups; mixing mm and m corrupts the dimensional matrix.
- Assuming geometric similarity is enough. Surface roughness and small features must also scale, or the boundary layer behaves differently.
Key Takeaways
- Dimensional homogeneity guarantees every term in a valid equation shares the same dimensions.
- The Buckingham Pi theorem reduces $n$ variables in $k$ dimensions to $n-k$ dimensionless groups.
- The null space of the dimensional matrix gives the Pi exponents — automate it with SymPy or NumPy.
- Key groups ($Re$, $Ma$, $Fr$, $Eu$, $We$, $C_D$, $C_L$) each express a ratio of competing forces.
- Dynamic similarity (matching the governing groups) lets model tests predict full-scale forces.
Next, we apply Reynolds number directly to internal flow and pipe-friction losses.