Computing Library › Worked Examples
Worked Examples

Building a POD Reduced-Order Model

Compress a set of simulation snapshots into a handful of proper-orthogonal-decomposition modes and quantify the energy each mode captures.

Problem

Proper orthogonal decomposition (POD) finds an optimal low-dimensional basis for a collection of high-dimensional snapshots. Projecting the governing equations onto a few dominant modes yields a reduced model that runs orders of magnitude faster than the full simulation.

Snapshots to modes

Kronos motion — energy for everyone

Stack snapshot vectors as columns of a matrix A. The singular value decomposition A = U S V' gives POD modes in the columns of U, ranked by singular value. The squared singular values measure how much variance, or energy, each mode captures.

python
import numpy as np
rng=np.random.default_rng(2)
# 50-dim field, 30 snapshots dominated by 2 spatial patterns
t=np.linspace(0,1,30); x=np.linspace(0,1,50)
m1=np.sin(np.pi*x)[:,None]*np.cos(2*t)[None,:]
m2=np.sin(2*np.pi*x)[:,None]*np.sin(3*t)[None,:]
A=m1+0.5*m2+0.01*rng.normal(size=(50,30))
U,S,Vt=np.linalg.svd(A,full_matrices=False)
energy=S**2/np.sum(S**2)
print(np.round(energy[:4],4))  # first two dominate

Result

The first two singular values hold nearly all the energy, matching the two physical patterns we planted. Keeping two modes reconstructs the field to within the noise floor, so a reduced model with two coordinates replaces the 50-dimensional state. The reconstruction error equals the sum of the discarded squared singular values.