Loading playback: preparing the current-frame estimator view.

Real Time Flow Estimation from Sparse Sensors

This demo reconstructs a complex, unsteady flow field from a small number of sensors and forecasts its evolution a few seconds ahead. Real time estimates at this level of detail are useful in active control systems, where decisions must be made before the flow changes. The training data come from an OpenFOAM simulation of flow around two staggered cylinders.

The model has three components. Proper Orthogonal Decomposition (POD) compresses the CFD data into a small set of dominant flow patterns, so the full field is described by a few time-varying coefficients. A Kalman filter updates those coefficients as each new set of sensor measurements arrives and flags any time step where the measurements disagree with its prediction by far more than noise can explain, a sign that the flow has moved outside the conditions the model was trained on. A linear dynamics model then advances the coefficients in time to produce the forecast. The approach runs in milliseconds and is easier to interpret than other ML methods such as neural networks.

The 20 sensors, marked as blue dots, each measure streamwise and transverse velocity components with 5% noise added, giving 40 measurements per time step. Below, the model estimate is shown beside the CFD result, and the error panel shows where the two differ. The tabs switch between streamwise velocity, transverse velocity and vorticity. The slider displays forecasts made up to three seconds earlier, and playback covers one full shedding cycle held out from training.

How the flow estimator works. Offline: POD finds the main flow patterns in 2,701 CFD snapshots and a linear rule learns how their strengths evolve. Live: a Kalman filter blends that rule with 40 noisy measurements from 20 sensors, then rebuilds the full flow field and forecasts up to 3 seconds ahead.
Click to enlarge
Model estimate
t = 0.0
ω_z (s⁻¹)−+
CFD reference
t = 0.0
sensor location
ω_z (s⁻¹)−+
Error
t = 0.0
error0%10%+