WISDEM: setting directly the value of the 50-year-return-period extreme wind speed

Hello everybody,

I have two questions about wind-speed settings.

The N2 diagram of 18_rotor_tower_monopile/blade_driver.py shows me that the turbine wind-speed class setting is one of the three inputs of the wt.rotorse.wt_class ExplicitComponent along with V_mean_overwrite and V_extreme50_overwrite. The wind-speed class setting is used to set a Vref value used to calculate the three outputs of the class: V_mean, V_extreme1, V_extreme50. And, as the inputs names suggest, the first and third calculated values can be overwritten by the values of V_mean_overwrite and V_extreme50_overwrite.
Searching through the WISDEM code, I have found that I can set V_mean_overwrite by simply assigning a value to the V_mean field in the geometry configuration file under the environment tag, but (question 1 ) can I do the same also for V_extreme50_overwrite ? If yes, with what variable and where? I haven’t found anything about this in …/wisdem/inputs/geometry_schema.yaml.
Now, the V_extreme50 output is used only in glue_code.py as

self.connect("rotorse.wt_class.V_extreme50", "drivese.spinner_gust_ws")
...
self.connect("rotorse.wt_class.V_extreme50", "landbosse.gust_velocity_m_per_s")

and, actually, also spinner_gust_ws value can be set directly in the configuration file, but I have not found a way to do the same for gust_velocity_m_per_s.
So, (question 2) if V_extreme50_overwrite can not be set in the configuration file, can at least gust_velocity_m_per_s be set there?

Thank you for your time and attention,
Henny

Hello Henny,
from your question I can see that you have a very good understanding of how WISDEM sets up the workflow, I can see you’ve done your homework! You are correct, both inputs V_extreme50_overwrite and gust_velocity_m_per_s currently are not set as inputs that the user can overwrite.
Implementing this change is however not too difficult. You should be able to add a line here WISDEM/wisdem/glue_code/gc_WT_InitModel.py at 525da76445e642598393e5a2909751a834e4ba69 · WISDEM/WISDEM · GitHub and add
wt_opt[“rotorse.wt_class.V_extreme50_overwrite”] = XYZ
where XYZ is hardcoded or is taken from the environment dictionary, which in turn is taken from the input yaml.
I hope this helps. Please let me know if that’s not the case.
Best regards,
Pietro

Hello (Ciao :wink:) Pietro,

I did what you suggested:

        wt_opt["rotorse.wt_class.V_extreme50_overwrite"] = 95.0

then re-run an optimization case already successful with the code not modified, and it converged again without any warnings.
Looking at the .csv output file I can read

rotorse.wt_class.V_extreme50_overwrite,,[95.],

while for the optimization without code modification that line was:

rotorse.wt_class.V_extreme50_overwrite,,[0.],

Running compare_designs on the results of the two optimizations shows differences in the optimized designs in some parameters:
induction
or:
ct_aero
but for the tower and monopile the comparison result is:

and the total mass of the tower is 1973736 kg for the design without V_extreme50_overwrite set ( so V_extreme50 gets the calculated value 1.4*Vref = 59.5 m/s) and 1963943 kg for the design with V_extreme50_overwrite set to 95 m/s. Actually, with a difference of +35 m/s, I was expecting more massive tower and monopile (so also differences in the wall thickness distribution), but this is not so, and the tower becomes even slightly lighter… (Question 1) Why there is no effect on the tower and monopile design?

I delved a little more into the WISDEM code and I’d like to have some clarifications on the WISDEM models.
I have found in …/glue_code/glue_code.py :

self.connect("rotorse.wt_class.V_extreme50", "landbosse.gust_velocity_m_per_s")

and

self.connect("rotorse.wt_class.V_extreme50", "drivese.spinner_gust_ws")

as the only connections of V_extreme50.
Now, spinner_gust_ws is used to Estimate thrust pressure on spinner in hub.py, and gust_velocity_m_per_s is used to calculate moment from each component at base of tower in landbosse.py. (Question 2) Are these the only uses of V_extreme50? There should not be also the calculation of the effect of the 50-year extreme wind speed on the rotor?
Looking at the connections of V_mean, the other output of wt_class, I found :

self.connect("rotorse.wt_class.V_mean", "orbit.site_mean_windspeed")

and site_mean_windspeed is used to calculate the 50 year extreme wind moment, load, gust, and speed for the model of the monopile in …/orbit/phases/design/monopile_design.py. (Question 3) Why for the monopile the 50 year extreme wind conditions are calculated from V_mean instead of using the V_extreme50 value from wt_class?

Thank you for your time and attention,
Henny

Ciao Henny,

WISDEM sizes rotor and tower with a “gust”. This gust has a wind speed set here

The gust hits the rotor at rated rpm and pitch here WISDEM/wisdem/rotorse/rotor_structure.py at 525da76445e642598393e5a2909751a834e4ba69 · WISDEM/WISDEM · GitHub

rotor_structure.py goes from aero loads from CCBlade to full rotor loads and then passes them to the tower module here WISDEM/wisdem/glue_code/glue_code.py at 525da76445e642598393e5a2909751a834e4ba69 · WISDEM/WISDEM · GitHub

So no, that V_extreme50_overwrite currently isn’t used anywhere else than where you found.

I hope this helps.
Best,
Pietro

Thank you for the clear explanation, Pietro.