Design the ideal wind turbine, propeller, or ship screw

Theory and Architecture

Software Architecture

In designing PropGen I wanted to take the path of least resistance while keeping the project as scalable as possible. The result is a loosely coupled mash-up of Java, C++, and Javascript modules that communicate via XML. All computations and business logic are performed in the C++ layers; all results are presented in html pages viewable on any browser; and the UI is a very thin Java application. PropGen also uses the following open source software:

-1- Boost: platform independent C++ library used for multi-threading, directory, and timing operations.

-2- Flot: Javascript library used for plotting.

-3- Newmat: Matrix math library used for computations.



Most of the heavy lifting for the application is in the Design/Analysis Engine. The function of the Design/Performance Manager is to determine what computations should be performed and then package and send those requests to the analysis engine. The Java UI is a thin application with minimal business logic.


The computations are based upon the Lerbs Lifting Line method. Background information on this is available from:

    • MIT OCW on Hydrofoils and Propellers (check out the lecture notes)
    • John Carleton, 'Marine Propellers and Propulsion', Chapter 8
    • Lerbs, H.W.; 'Moderately Loaded Propellers with Finite Number ofBlades and an Arbitrary Distribution of Circulation', SNAME, Vol. 60,1952.

    The first reference is available for free, the 2nd one requires access to the textbook, and the 3rd is the cannonical formulation. The 2nd reference comes closest to describing the actual process used by PropGen.

    I deviate from Lerbs' formulation only when calculating the axially induced velocities for a wake filament approaching 90 degrees (i.e filament is planar with the rotor disk). In the Lerb's formulation this situation may result in infinite velocities; my formulation has them going to zero. This gives a better model of what really happens when part of the wake becomes planar with the rotor disk (i.e. you have zero thrust at that radius) and also makes the computation more stable.