Vortex Panel Method
Overview
The Vortex Panel Method (VPM) is a simple aerodynamic tool that is rich enough to capture meaningful flow physics, yet fast enough for design iterations. In this project, I used a 2D axisymmetric VPM to model the flow around a diffuser-augmented wind turbine (DAWT), combining classical potential flow theory with a Joukowsky actuator disk representation of the rotor. The result is a lightweight model that can predict induced velocities and wake development without requiring full CFD.
Why Vortex Panel Method and Model Assumptions
The VPM is based on potential flow theory, which assumes:
- incompressible flow
- inviscid flow
- irrotational flow
- steady conditions
Instead of solving Navier–Stokes, the geometry is represented using a distribution of panels along its surface, with the panels having attributed vortices. Each vortex influences the surrounding flow (Biot-Savart Law), and the combined effect of all the panels reconstructs the velocity field.
This implementation extends a regular vortex method in two ways:
- Axisymmetric formulation (r–x plane)
- Coupling with a Joukowsky actuator disk model for the turbine
Instead of applying a simple pressure jump (classic actuator disk), the turbine is modeled as a wake-inducing vortex sheet, which interacts directly with the flow field. This allows the model to capture:
- diffuser-induced acceleration
- rotor loading effects
- wake development
For a detailed explanation of this vortex panel method or other vortex methods in general, visit my PhD thesis (starting page 54) or the references Bontempo and Lewis.
How the Code Works
Step 1 — Geometry & Panel Generation
The geometry (airfoil or diffuser) is discretised into panels using cosine clustering, which increases resolution near leading and trailing edge. Each panel stores:
- center point
- length
- slope
- curvature
Step 2 — Coefficients Matrix and Solving First Iteration
For each panel pair (i,j), compute how panel j affects panel i. The coefficients go into the K-Matrix. Then, the panel vortex strengths are solved using:
K · γ = rhs
Where:
- K = aerodynamic interaction matrix
- γ = panel vortex strengths
- rhs = freestream boundary condition
With γ solved, you can now compute the flow around the diffuser. It will not include the turbine — just an empty diffuser.
Step 3 — Including the Turbine and Wake
When activated:
- turbine loading extracts axial momentum
- a wake sheet is introduced downstream of the blade tip
- wake vortices modify/induce the velocity field
- diffuser solution is updated iteratively
Now that we are accounting for the wake vortices and turbine influence, we can compute the flow again. The wake sheet will have a different shape, so we must update our wake vortices and re-compute the induction on the velocity field.
After iterating a few times, the solution converges and you have successfully coupled diffuser, turbine and wake, enabling DAWT modelling.
Integration of the Code on the Browser
In this project, the solver runs entirely in the browser. Pyodide allows a dynamic solver loading, where the Python code is compiled to WebAssembly, loading once and caching the solver. Any new edits to the solver can be instantly implemented without rebuilding the app. For the visualization, the Agg backend was used to render Matplotlib figures as PNG, then displayed in JavaScript.
References
- Bontempo, F. et al. — Title to be completed.
- Lewis, R. I. — Title to be completed.
- Pyodide — Python with the scientific stack, compiled to WebAssembly. https://pyodide.org/
- Matplotlib Agg backend — Non-interactive backend for rendering to PNG. Matplotlib Backends Documentation