About Internships Research Projects Contact Resume
Back to Research

Undergraduate Research / Ongoing / Johns Hopkins University

Ship Wake CFD &
Dimensionality Reduction

AIRO Lab / LCSR / JHU Prof. Joseph Moore / Dept. of Mechanical Engineering
OpenFOAM CFD POD / ROM Python Linear Algebra / SVD UAV Autonomy Data-Driven Fluids

Why This Matters

Landing a UAV on a moving ship deck is one of the most demanding autonomous control problems in robotics. The ship's superstructure creates a turbulent wake, vortices, flow separation, and highly unsteady pressure fields that directly destabilize the vehicle during final approach. Controllers need accurate disturbance models to compensate, but real-world ship-wake data is extraordinarily difficult and expensive to obtain.

My research has two parts: generating high-fidelity CFD simulations of ship wake flow fields, and reducing those simulations to compact, computationally efficient models that can actually be used in a real-time control system.

CFD simulation showing turbulent wake structures behind ship
~2M
Mesh cells in the refined CFD domain
200s
Transient simulation duration per run
13
CPU cores used for parallelized solving
900×3×20⁶
Raw CFD output dimension, way too large for real-time use

CFD Simulation Pipeline

The simulation environment is built entirely in OpenFOAM, an open-source finite volume solver. The ship geometry is imported as an STL surface mesh, and the fluid domain is constructed and refined around it.

blockMesh Base domain
snappyHexMesh Local refinement
pimpleFoam LES transient
Field Export Velocity snapshots
POD / ROM Dimensionality reduction
Solver
pimpleFoam, LES Transient
Large Eddy Simulation captures the unsteady turbulent structures in the ship wake. Incompressible flow formulation appropriate for low-Mach wind speeds.
Mesh
~1.97M Cell Hex-Dominant
blockMesh generates the base structured domain. snappyHexMesh refines the boundary layer near the hull and densifies the wake box where disturbance data matters most.
Numerics
PIMPLE with Adaptive Timestep
Courant number kept at or below 0.5 with adaptive timesteps. 1 outer corrector, 2 pressure-velocity correctors, 1 non-orthogonal corrector. Runs parallelized over 13 cores.
Results
Vortex Shedding and Wake Turbulence
Flow separates at the stern and sharp geometric ends, producing vortex structures and a highly unsteady wake region.

The Problem with Raw CFD

Why raw CFD can't feed a real-time controller

Each simulation exports the full 3D velocity field at every timestep, roughly 100 timesteps × 3 velocity components × roughly 1,000,000 spatial points. That's a 300-million-element dataset per run. Even storing it efficiently is non-trivial, and using it directly for control system input is completely impractical.

Real-time autonomous control requires disturbance models that evaluate in microseconds to milliseconds, not the hours or days a full CFD solve takes. The solution is to extract the essential physics from the high-dimensional data and represent it in a compact form without throwing away the accuracy that makes the simulation useful.

Proper Orthogonal Decomposition (POD)

The mathematical tool I use for this dimensionality reduction is Proper Orthogonal Decomposition (POD), a data-driven technique from linear algebra that decomposes the flow field into a hierarchy of orthogonal spatial modes, ranked by energy content.

Conceptually, POD answers the question: what are the most energetically important spatial structures in this flow? The first few modes capture the dominant physics, and the rest can often be discarded with minimal loss of fidelity.

POD Decomposition
u (x, t) = ū(x) + Σk ak (t) · φk (x)

Where ū(x) is the mean flow field, φk(x) are the spatial modes (orthogonal basis functions), and ak(t) are the temporal coefficients that describe how each mode evolves in time. The modes are computed via Singular Value Decomposition (SVD) of the snapshot matrix.

Snapshot Matrix SVD
X = U Σ VT (columns of U = spatial modes)

In practice, the first handful of modes typically capture >95% of the total flow energy, reducing the representation from millions of spatial points to just a few dozen temporal coefficients, a compression ratio of several orders of magnitude.

Step 1
Assemble Snapshot Matrix
Each CFD timestep produces a velocity field snapshot. These are stacked column-by-column into a data matrix X of dimension (spatial points) × (timesteps).
Step 2
Subtract Mean Flow
The time-averaged mean flow ū(x) is removed from every snapshot. POD then operates on the fluctuating component, isolating dynamic structures.
Step 3
SVD / Eigendecomposition
Python (NumPy) computes the SVD of the snapshot matrix. Singular values reveal energy content; the leading left singular vectors are the POD spatial modes.
Step 4
Truncate & Project
Retain only the r most energetic modes. Project the full flow field onto this reduced basis to obtain compact temporal coefficients a_k(t) for each mode.

POD Verification: Reynolds Number Scaling

A critical check on the method's physical validity: as wind speed increases, the Reynolds number increases, turbulence intensifies, and the flow becomes less ordered, meaning more modes should be needed to represent it accurately.

I verified this by running POD at multiple wind speeds and examining whether the number of energetically significant modes increased with Reynolds number. The results confirmed the expected behavior: higher Reynolds number flows required more modes, consistent with the physical understanding that turbulent flows contain energy across a broader range of spatial scales.

Future Work

Checking whether temporal coefficients stay consistent across the 4.5 to 5.5 m/s range. If they do, that opens the door to interpolating between operating conditions.
Literature review on adding stochastic noise into the POD framework to represent the turbulence the reduced-order model can't capture.
Ship motion correction. Right now the ship is stationary in the CFD domain. Incorporating 6-DOF vessel motion would make the simulation much more realistic.
Looking into Dynamic Mode Decomposition (DMD) as an alternative to POD for capturing the oscillatory structures in the wake.

Research Takeaways