Output-constrained individual pitch control can find a trade-off between no IPC and full IPC by adding the possibility to set a reference on the oscilating loads experienced by the wind turbine rotor. For example, in the below figure you can see that without IPC the actuator duty cycle (ADC) is low and the damage equivalent load (DEL) is high. On the other hand, fully engaging IPC can lower the DEL at the expense of increased ADC. The proposed ℓ2-IPC and ℓ∞-IPC controllers achieve a superior trade-off between DEL reduction and ADC increase. With respect to full IPC, they can achieve 87% of the load reduction with just 50% of the actuation increase.
For more information, check out our publications on output-constrained IPC:
- Hummel, J. I. S., Kober, J., and Mulders, S. P.: Output-constrained individual pitch control methods using the multiblade coordinate transformation: Trading off actuation effort and blade fatigue load reduction for wind turbines, Wind Energy Science, 2025. https://doi.org/10.5194/wes-10-2005-2025
- Hummel, J. I. S., Kober, J., and Mulders, S. P.: Output-Constrained Individual Pitch Control using an Adaptive Leaky Integrator for Wind Turbine Blade Load Reductions, American Control Conference (ACC), 2025. https://doi.org/10.23919/ACC63710.2025.11108076
In case you have any questions, please contact me. You can find my contact details in the papers.
Clone the repo by git clone --recurse-submodules https://github.com/jesseishi/Output-constrained-IPC.git. --recurse-submodules
is used to also clone the
preplot-postplot repository
which is used for plotting.
Then, you can get started in two ways:
- Run your own simulations by defining a case in
generate_cases.py, then run the case withRun_cIPC.mor multiple cases withRun_batch_cIPC.m, and then analyze with a script inspired byPlot_xyz.m. - Download our results and put them in the
Results/datafolder. You can now analyze all the results usingPlot_WES.m.
IEA-15-240-RWT- Defines the IEA 15 MW reference turbine. Adjusted from
GitHub, see
IEA-15-240-RWT/README.mdfor the changes made.
- Defines the IEA 15 MW reference turbine. Adjusted from
GitHub, see
preplot-postplot(optional)- My plotting utilities to make nice plots with less boilerplate, available on GitHub.
Results(optional)data: Stores simulation data to be used by plotting scripts. If you want to recreate our results, store our datasets in this folder. This folder has folders that mirror the folders ofInputFiles. Then for each folder, there are folders indicating what reference signal was used by the controllers (e.g.ref0for a 0 Nm reference), then finally for each simulation there is an.outbfile with OpenFAST outputs and a.csvfiles which also contrains logged signals from Simulink.figures: Stores resulting figures.InputFiles: Stores input files used by OpenFAST to run the different cases.
src:Helper: Contains helper functions.Lib: Library with some static data (linearizations and optimal azimuth offsets).Models: Constains the different Simulink models.TempCache(optimal): Temporary cache folder.generate_cases.py: Generate input files to run different cases (wind speed, turbulence intensity, etc...).Plot_XYZ.m: Scripts to plot the results.Run_batch_cIPC.m: Script to run many OpenFAST simulations with an output-constrained IPC controller.Run_cIPC.m: Script to run a single OpenFAST simulation with an ouput-constrained IPC controller.TurbSim_x64.exe: TurbSim executable to generate turbulent wind files when runninggenerate_cases.py.
- Python 3.12.1
- Matlab and Simulink R2024b
- The OpenFAST toolbox
- OpenFAST 3.5.0
- TurbSim v2.0
- The preplot-postplot toolbox for plotting
Apache-2.0 license, see LICENSE.
