Feature: Add Smarteole LES simulation timeseries and brief model validation study#256
Conversation
… timeseries, even if they have different resource. Simply synced on time.
… the legacy fake simulation timeseries. Update analysis code
|
Hi @paulf81, @misi9170 -- Happy New Years! 🥳 Just wanted to get the ball rolling on this PR. It's still more of a concept and would love your steer on this so we can turn it into something that fits FLASC best. There's no rush -- would be helpful to get some steer in the next month or so! Also happy to have a meeting on this so that I can walk you through it, if that's easier. 👍 |
|
thank you @Bartdoekemeijer ! I'm very excited to dig into this, I'll try to make some time to look/think through it all soon |
Robin9697
left a comment
There was a problem hiding this comment.
Some comments on examples_smarteole/12_model_les_wake_loss_validation.ipynb. It's mostly small things and some code clean-up. However, I do suggest two changes about the general method:
- If we are assuming that the wind farm is fully operational, I think it would make more sense to compensate for the filtered out data by using a weighted mean instead of the sum to compute the AEP.
- To match the atmospheric conditions as much as possible, I would suggest copying all the NaN values in the SCADA dataset to the LES dataset.
I have left flasc/data_processing/timeseries_to_grid_solutions.py out of the review for now, since we can hopefully replace it with functions that already exist in FLASC.
|
Reminder to myself: add functionality to limit wind speed range to specific wake conditions. Edit: added this. Defaults to using all wind speeds, full dataset. |
…re not a whole multiple of 12 months.
…n printing to console, i.e. data timespan and wind speed range
…start at half the step size, e.g. 1.5 or 2.5 deg, we need different manipulations to expand interpolation.
…nctions, cleaned up
|
OK we're mostly there! Jupyter notebook has been updated and should be useable now. Added extensive explanations throughout the notebook and added docstrings to a part of the functions. What's left:
Optional:
|
|
Hi @Bartdoekemeijer and @Robin9697 ! Thanks for submitting this! I've left a couple of comments throughout the code. I have not actually run the example, but I believe @paulf81 will do that. To merge this, we'll need to have the floris_tools_test.py passing again. I've also identified a couple of places where we may be duplicating some functionality, which has been a bit of a challenge with FLASC in the past so I don't necessarily expect you to solve this now. I guess the next steps are:
|
…fy UserWarning so that its a lot easier for the user to understand.
Thank you for the quick review @misi9170! I have processed all your comments, fixed formatting through |
|
Hi @Bartdoekemeijer @Robin9697 and @misi9170 . I reviewed the example and discussed and ran it on my machine. The only hiccup I had was I found I needed two additional dependencies: "xarray~=2025.6.1",
"netcdf4~=1.6",In order to run: I commited an update to UPDATE: Following these changes, download and notebook all worked as expected |
|
@paulf81 I don't have any issues adding requirements. It looks like |
Yeah you're right, maybe we just specify |
|
I've now also successfully run the example in a fresh conda environment. I set up the environment with the latest python (3.14.3), and then installed flasc locally ( I then had some minor trouble trying to download the data from an internal VPN (failed to certify the SSL certificate when accessing the Zenodo DOI). Switching off the VPN worked. I've added a note to the To run the example notebook, I then had to add the standard After that, the notebook ran through fine. I'll also just point out here that the notebook is before being run, so it has does not have figures included. That is my preference, because it makes version control better, but it does mean that people won't be able to view the notebook output without downloading the data and running it. Various of our example notebooks in FLASC were committed after running, so include outputs (and figures). Compare this (the new example notebook, no outputs) to this (an existing example notebook, contains outputs). |
|
I created a clean environment with Python 3.13 on Windows 11. The company firewall blocks automated Zenodo downloads, so I cannot verify that, but everything else works as intended! Minor comments:
|
Thanks @Bartdoekemeijer ! I think that's all good. I added a brief note to the downloading script to mention VPN/SSL issues with accessing data, and I'll leave it to users to figure out how to avoid those. I didn't see the empty python cells, but if they're there, not a big deal. I've merged, and will release a minor version of FLASC later today. |
This PR is ready to be merged.
Feature or improvement description
This PR is made together with Robin de Jong, TUDelft as part of the European SUDOCO project. The purpose of this is to add an example that demonstrates how one can use FLASC to compare a dynamic timeseries simulation (here: Whiffle's ASPIRE LES) against SCADA. Whiffle's LES is a strong contender to become the golden standard for wake modeling in the industry and therefore benchmarking it is crucial. For certain applications it is a direct contender to FLORIS and other wake models.
Related issue, if one exists
N/A
Impacted areas of the software
Additional supporting information
The attached example are actual results from an ASPIRE LES simulation of SMARTEOLE for the same dates of the experiment.
Test results, if applicable
The current validation results are actually quite exciting already!
LES seems to underestimate total AEP (MWh), I'm guessing due to a slightly lower estimated inflow wind speed compared to what was actually seen in the field. However, it is excellent at estimating farm-wide wake loss. Also individual turbine wake losses are quite well estimated, showing much smaller deviations than FLORIS. Generally LES outperforms FLORIS' Cumulative Curl by quite a margin in relative wake losses! This is also seen in the energy ratios.
Release checklist: