Dimensional Analysis & Similitude | Fluid Mechanics with Python | Skill-Lync Resources

50% OFF - Ends Soon!

Lesson 6 of 13 25 min

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

Reserve Your Seat
QuantitySymbolDimensions
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

See All Tools

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

See His Journey
🎯 3,000+ Engineers Placed
Sponsored
Harshal Sukenkar

Harshal

Fiat Chrysler

Abhishek

Abhishek

TATA ELXSI

Srinithin

Srinithin

Xitadel

Ranjith

Ranjith

Core Automotive

Gaurav Jadhav

Gaurav

Automotive Company

Bino K Biju

Bino

Design Firm

Aseem Shrivastava

Aseem

EV Company

Puneet

Puneet

Automotive Company

Vishal Kumar

Vishal

EV Startup

Key Dimensionless Groups

GroupDefinitionRatio of forcesUsed when
Reynolds, $Re$$\rho V L / \mu$inertia / viscousalways (laminar vs turbulent)
Mach, $Ma$$V / c$inertia / elasticcompressible flow
Froude, $Fr$$V / \sqrt{gL}$inertia / gravityfree-surface, ships, spillways
Euler, $Eu$$\Delta p / \rho V^2$pressure / inertiacavitation, pressure drop
Weber, $We$$\rho V^2 L / \sigma$inertia / surface tensiondroplets, sprays
Drag coeff, $C_D$$F_D / (\tfrac{1}{2}\rho V^2 A)$drag / dynamic pressurebluff bodies
Lift coeff, $C_L$$F_L / (\tfrac{1}{2}\rho V^2 A)$lift / dynamic pressureairfoils, 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:

TypeRequirementMeans
Geometricsame shape, scaledlength ratio $L_r = L_m/L_p$ constant
Kinematicsimilar velocity fieldsvelocity ratios constant, similar streamlines
Dynamicsimilar force ratiosmatching 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.

3,000+ Engineers Placed in Top Companies
Career Growth

3,000+ Engineers Placed in Top Companies

Join the ranks of successful engineers at Bosch, Tata, L&T, and 500+ hiring partners.