Running an OpenFAST v5.0 simulation with the ROSCO controller

Dear OpenFast Team,

I have migrated a wind turbine model that previously worked with a ROSCO controller to the new OpenFast v5.0 version . However, when I run a stedy simulation in this new version using the old .dll and DISCON.in files, the controller does not behave as expected and the turbine response is not correct:

As far as I understand, the latest ROSCO release is compatible with OpenFAST 4.2 (as indicated in the environment.yml file), so I am currently unable to generate a new DISCON.IN file specifically for OpenFAST v5.0.

Is there any way to continue using the ROSCO controller with OpenFAST v5.0?

If not, what would be the best way to obtain an equivalent controller for OpenFAST v5.0 that reproduces the behavior of the previous one as closely as possible?

Thank you very much for your help.

Maddi

Dear @Maddi.Aizpurua,

I’m not aware of any incompatibility between the ROSCO controller and OpenFAST v5.

Can you clarify in which version of of OpenFAST your model used to work and what changes you made to the model to migrate it to OpenFAST v5?

Best regards,

Dear Jason,

Until now, I had been working with a model in OpenFAST v4.1.1, and I was able to tune a controller in the ROSCO environment by running the tools 01_turbine_model.py, 02_ccblade.py, and 03_tune_controller.py to generate the DISCON.IN file. This controller allowed the wind turbine to operate properly.

Now, I have migrated that model to the new ElastoDyn.dat, AeroDyn.dat, ServoDyn.dat, and Main.fst templates of OpenFAST v5.0, which include new parameters (PitchDOF,PBrIner,HubIner_Teeter,PitNeut,PitSpr,PitDamp,ModCoupling,RhoInf,ConvTol,MaxConvIter,NRotors,CompSoil,MirrorRotor…). Running the new .fst with the old .dll and DISCON.IN files (the ones obtained with the v4.1.1 model) works, but the wind turbine does not behave as it should, as I showed you in my previous message.

However, when I try to create a new DISCON.IN for this new .fst in OpenFAST v5.0, I get several errors suggesting that the new ElastoDyn.dat, AeroDyn.dat, ServoDyn.dat, and Main.fst files are not being read correctly by ROSCO.

I’ve attached new ServoDyn.dat and Main.fst template files that I’m using in openfast v5.0 (due to the character limit, I can’t send you all the modules):

Servodyn

“------- SERVODYN INPUT FILE --------------------------------------------
FAST certification Test #06: AOC 15/50 with many DOFs with gen start loss of grid and tip-brake shutdown. Many parameters are pure fiction.
---------------------- SIMULATION CONTROL --------------------------------------
False Echo - Echo input data to .ech (flag)
0.005 DT - Communication interval for controllers (s) (or “default”)
---------------------- PITCH CONTROL -------------------------------------------
5 PCMode - Pitch control mode {0: none, 3: user-defined from routine PitchCntrl, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
0 TPCOn - Time to enable active pitch control (s) [unused when PCMode=0]
1.54 PitNeut(1) - Blade 1 neutral pitch position–pitch spring moment is zero at this pitch (degrees)
1.54 PitNeut(2) - Blade 2 neutral pitch position–pitch spring moment is zero at this pitch (degrees)
1.54 PitNeut(3) - Blade 3 neutral pitch position–pitch spring moment is zero at this pitch (degrees)
7.0e8 PitSpr(1) - Blade 1 pitch spring constant (N-m/rad)
7.0e8 PitSpr(2) - Blade 2 pitch spring constant (N-m/rad)
7.0e8 PitSpr(3) - Blade 3 pitch spring constant (N-m/rad)
2.3e5 PitDamp(1) - Blade 1 pitch damping constant (N-m/(rad/s))
2.3e5 PitDamp(2) - Blade 2 pitch damping constant (N-m/(rad/s))
2.3e5 PitDamp(3) - Blade 3 pitch damping constant (N-m/(rad/s))
9999.9 TPitManS(1) - Time to start override pitch maneuver for blade 1 and end standard pitch control (s)
9999.9 TPitManS(2) - Time to start override pitch maneuver for blade 2 and end standard pitch control (s)
9999.9 TPitManS(3) - Time to start override pitch maneuver for blade 3 and end standard pitch control (s) [unused for 2 blades]
2 PitManRat(1) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 1 (deg/s)
2 PitManRat(2) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 2 (deg/s)
2 PitManRat(3) - Pitch rate at which override pitch maneuver heads toward final pitch angle for blade 3 (deg/s) [unused for 2 blades]
1.54 BlPitchF(1) - Blade 1 final pitch for pitch maneuvers (degrees)
1.54 BlPitchF(2) - Blade 2 final pitch for pitch maneuvers (degrees)
1.54 BlPitchF(3) - Blade 3 final pitch for pitch maneuvers (degrees) [unused for 2 blades]
---------------------- GENERATOR AND TORQUE CONTROL ----------------------------
5 VSContrl - Variable-speed control mode {0: none, 1: simple VS, 3: user-defined from routine UserVSCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
2 GenModel - Generator model {1: simple, 2: Thevenin, 3: user-defined from routine UserGen} (switch) [used only when VSContrl=0]
89.4 GenEff - Generator efficiency [ignored by the Thevenin and user-defined generator models] (%)
True GenTiStr - Method to start the generator {T: timed using TimGenOn, F: generator speed using SpdGenOn} (flag)
True GenTiStp - Method to stop the generator {T: timed using TimGenOf, F: when generator power = 0} (flag)
9999.9 SpdGenOn - Generator speed to turn on the generator for a startup (HSS speed) (rpm) [used only when GenTiStr=False]
6 TimGenOn - Time to turn on the generator for a startup (s) [used only when GenTiStr=True]
25 TimGenOf - Time to turn off the generator (s) [used only when GenTiStp=True]
---------------------- SIMPLE VARIABLE-SPEED TORQUE CONTROL --------------------
9999.9 VS_RtGnSp - Rated generator speed for simple variable-speed generator control (HSS side) (rpm) [used only when VSContrl=1]
9999.9 VS_RtTq - Rated generator torque/constant generator torque in Region 3 for simple variable-speed generator control (HSS side) (N-m) [used only when VSContrl=1]
9999.9 VS_Rgn2K - Generator torque constant in Region 2 for simple variable-speed generator control (HSS side) (N-m/rpm^2) [used only when VSContrl=1]
9999.9 VS_SlPc - Rated generator slip percentage in Region 2 1/2 for simple variable-speed generator control (%) [used only when VSContrl=1]
---------------------- SIMPLE INDUCTION GENERATOR ------------------------------
2.222 SIG_SlPc - Rated generator slip percentage (%) [used only when VSContrl=0 and GenModel=1]
1800 SIG_SySp - Synchronous (zero-torque) generator speed (rpm) [used only when VSContrl=0 and GenModel=1]
314.3 SIG_RtTq - Rated torque (N-m) [used only when VSContrl=0 and GenModel=1]
1.75 SIG_PORt - Pull-out ratio (Tpullout/Trated) (-) [used only when VSContrl=0 and GenModel=1]
---------------------- THEVENIN-EQUIVALENT INDUCTION GENERATOR -----------------
60 TEC_Freq - Line frequency [50 or 60] (Hz) [used only when VSContrl=0 and GenModel=2]
4 TEC_NPol - Number of poles [even integer > 0] (-) [used only when VSContrl=0 and GenModel=2]
0.0492 TEC_SRes - Stator resistance (ohms) [used only when VSContrl=0 and GenModel=2]
0.000534 TEC_RRes - Rotor resistance (ohms) [used only when VSContrl=0 and GenModel=2]
480 TEC_VLL - Line-to-line RMS voltage (volts) [used only when VSContrl=0 and GenModel=2]
0.0001 TEC_SLR - Stator leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2]
0.0001 TEC_RLR - Rotor leakage reactance (ohms) [used only when VSContrl=0 and GenModel=2]
0.00449 TEC_MR - Magnetizing reactance (ohms) [used only when VSContrl=0 and GenModel=2]
---------------------- HIGH-SPEED SHAFT BRAKE ----------------------------------
0 HSSBrMode - HSS brake model {0: none, 1: simple, 3: user-defined from routine UserHSSBr, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
9999.9 THSSBrDp - Time to initiate deployment of the HSS brake (s)
9999.9 HSSBrDT - Time for HSS-brake to reach full deployment once initiated (sec) [used only when HSSBrMode=1]
9999.9 HSSBrTqF - Fully deployed HSS-brake torque (N-m)
---------------------- NACELLE-YAW CONTROL -------------------------------------
0 YCMode - Yaw control mode {0: none, 3: user-defined from routine UserYawCont, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
9999.9 TYCOn - Time to enable active yaw control (s) [unused when YCMode=0]
0 YawNeut - Neutral yaw position–yaw spring force is zero at this yaw (degrees)
0 YawSpr - Nacelle-yaw spring constant (N-m/rad)
0 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s))
9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s)
2 YawManRat - Yaw maneuver rate (in absolute value) (deg/s)
0 NacYawF - Final yaw angle for override yaw maneuvers (degrees)
---------------------- AERODYNAMIC FLOW CONTROL --------------------------------
0 AfCmode - Airfoil control mode {0: none, 1: cosine wave cycle, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
0 AfC_Mean - Mean level for cosine cycling or steady value (-) [used only with AfCmode==1]
0 AfC_Amp - Amplitude for for cosine cycling of flap signal (-) [used only with AfCmode==1]
0 AfC_Phase - Phase relative to the blade azimuth (0 is vertical) for for cosine cycling of flap signal (deg) [used only with AfCmode==1]
---------------------- STRUCTURAL CONTROL --------------------------------------
0 NumBStC - Number of blade structural controllers (integer)
“unused” BStCfiles - Name of the files for blade structural controllers (quoted strings) [unused when NumBStC==0]
0 NumNStC - Number of nacelle structural controllers (integer)
“unused” NStCfiles - Name of the files for nacelle structural controllers (quoted strings) [unused when NumNStC==0]
0 NumTStC - Number of tower structural controllers (integer)
“unused” TStCfiles - Name of the files for tower structural controllers (quoted strings) [unused when NumTStC==0]
0 NumSStC - Number of substructure structural controllers (integer)
“unused” SStCfiles - Name of the files for substructure structural controllers (quoted strings) [unused when NumSStC==0]
---------------------- CABLE CONTROL -------------------------------------------
0 CCmode - Cable control mode {0: none, 4: user-defined from Simulink/Labview, 5: user-defined from Bladed-style DLL} (switch)
---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface]
“libdiscon.dll” DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface]
“DISCON.IN” DLL_InFile - Name of input file sent to the DLL (-) [used only with Bladed Interface]
“DISCON” DLL_ProcName - Name of procedure in DLL to be called (-) [case sensitive; used only with DLL Interface]
“default” DLL_DT - Communication interval for dynamic library (s) (or “default”) [used only with Bladed Interface]
false DLL_Ramp - Whether a linear ramp should be used between DLL_DT time steps [introduces time shift when true] (flag) [used only with Bladed Interface]
9999.9 BPCutoff - Cutoff frequency for low-pass filter on blade pitch from DLL (Hz) [used only with Bladed Interface]
0 NacYaw_North - Reference yaw angle of the nacelle when the upwind end points due North (deg) [used only with Bladed Interface]
0 Ptch_Cntrl - Record 28: Use individual pitch control {0: collective pitch; 1: individual pitch control} (switch) [used only with Bladed Interface]
0 Ptch_SetPnt - Record 5: Below-rated pitch angle set-point (deg) [used only with Bladed Interface]
0 Ptch_Min - Record 6: Minimum pitch angle (deg) [used only with Bladed Interface]
0 Ptch_Max - Record 7: Maximum pitch angle (deg) [used only with Bladed Interface]
0 PtchRate_Min - Record 8: Minimum pitch rate (most negative value allowed) (deg/s) [used only with Bladed Interface]
0 PtchRate_Max - Record 9: Maximum pitch rate (deg/s) [used only with Bladed Interface]
0 Gain_OM - Record 16: Optimal mode gain (Nm/(rad/s)^2) [used only with Bladed Interface]
0 GenSpd_MinOM - Record 17: Minimum generator speed (rpm) [used only with Bladed Interface]
0 GenSpd_MaxOM - Record 18: Optimal mode maximum speed (rpm) [used only with Bladed Interface]
0 GenSpd_Dem - Record 19: Demanded generator speed above rated (rpm) [used only with Bladed Interface]
0 GenTrq_Dem - Record 22: Demanded generator torque above rated (Nm) [used only with Bladed Interface]
0 GenPwr_Dem - Record 13: Demanded power (W) [used only with Bladed Interface]
---------------------- BLADED INTERFACE TORQUE-SPEED LOOK-UP TABLE -------------
0 DLL_NumTrq - Record 26: No. of points in torque-speed look-up table {0 = none and use the optimal mode parameters; nonzero = ignore the optimal mode PARAMETERs by setting Record 16 to 0.0} (-) [used only with Bladed Interface]
GenSpd_TLU GenTrq_TLU
(rpm) (Nm)
---------------------- OUTPUT --------------------------------------------------
True SumPrint - Print summary data to .sum (flag) (currently unused)
1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused)
True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused)
“G0” OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused)
5 TStart - Time to begin tabular output (s) (currently unused)
OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-)
“GenTq” - LSS, HSS, and generator torque
“GenPwr” - LSS, HSS, and generator power
END of ServoDyn input file (the word “END” must appear in the first 3 columns of this last line).”

Main.fst

------- OpenFAST v3.2 INPUT FILE -----------------------------------------------
NREL Wind Turbine Modeling Workshop Simulation
---------------------- SIMULATION CONTROL --------------------------------------
False Echo - Echo input data to .ech (flag)
“FATAL” AbortLevel - Error level when simulation should abort (string) {“WARNING”, “SEVERE”, “FATAL”}
660 TMax - Total run time (s)
0.005 DT - Recommended module time step (s)
3 ModCoupling - Module coupling method (switch) {1=loose; 2=tight with fixed Jacobian updates (DT_UJac); 3=tight with automatic Jacobian updates}
2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic}
0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections}
0.0 RhoInf - Numerical damping parameter for tight coupling generalized-alpha integrator (-) [0.0 to 1.0]
1e-4 ConvTol - Convergence iteration error tolerance for tight coupling generalized alpha integrator (-)
6 MaxConvIter - Maximum number of convergence iterations for tight coupling generalized alpha integrator (-)
1.5 DT_UJac - Time between calls to get Jacobians (s)
1E+06 UJacSclFact - Scaling factor used in Jacobians (-)
---------------------- FEATURE SWITCHES AND FLAGS ------------------------------
1 NRotors - Number of rotors in turbine (-)
1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades; 3=Simplified ElastoDyn}
1 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from ExtInflow}
1 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDisk; 2=AeroDyn; 3=ExtLoads}
1 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn}
0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}
0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn}
0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF}
0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex}
0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn}
0 CompSoil - Compute soil-structural dynamics (switch) {0=None; 1=SoilDyn}
0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine}
F MirrorRotor - Flag to reverse rotor rotation direction [1 to NRotors] {F=Normal, T=Mirror}
---------------------- ENVIRONMENTAL CONDITIONS --------------------------------
9.80665 Gravity - Gravitational acceleration (m/s^2)
1.225 AirDens - Air density (kg/m^3)
0 WtrDens - Water density (kg/m^3)
1.464e-05 KinVisc - Kinematic viscosity of working fluid (m^2/s)
335 SpdSound - Speed of sound in working fluid (m/s)
103500 Patm - Atmospheric pressure ¶ [used only for an MHK turbine cavitation check]
1700 Pvap - Vapour pressure of working fluid ¶ [used only for an MHK turbine cavitation check]
0 WtrDpth - Water depth (m)
0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward]
---------------------- INPUT FILES ---------------------------------------------
“ElastoDyn.dat” EDFile - Name of file containing ElastoDyn input parameters (quoted string)
“unused” BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string)
“unused” BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string)
“unused” BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string)
“unused” InflowFile - Name of file containing inflow wind input parameters (quoted string)
“unused” AeroFile - Name of file containing aerodynamic input parameters (quoted string)
“unused” ServoFile - Name of file containing control and electrical-drive input parameters (quoted string)
“unused” SeaStFile - Name of file containing sea state input parameters (quoted string)
“unused” HydroFile - Name of file containing hydrodynamic input parameters (quoted string)
“unused” SubFile - Name of file containing sub-structural input parameters (quoted string)
“unused” MooringFile - Name of file containing mooring system input parameters (quoted string)
“unused” IceFile - Name of file containing ice input parameters (quoted string)
“unused” SoilFile - Name of the file containing the SoilDyn input parameters (quoted string)
---------------------- OUTPUT --------------------------------------------------
True SumPrint - Print summary data to “.sum” (flag)
1 SttsTime - Amount of time between screen status messages (s)
99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s)
0.05 DT_Out - Time step for tabular output (s) (or “default”)
60 TStart - Time to begin tabular output (s)
3 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both}
True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false}
“G0” OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string)
---------------------- LINEARIZATION -------------------------------------------
False Linearize - Linearization analysis (flag)
False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag)
3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-)
0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-)
0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque)
0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s))
0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s))
1 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False]
0 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [unused if Linearize=False]
1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False]
1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False]
False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2]
False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False]
---------------------- VISUALIZATION ------------------------------------------
0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation}
1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0]
false VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0]
15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2]"

This template files have been obtained from Openfast V5.0 documentation and “glue-code” examples.

Thank you in advanced,

Hi Maddi,

If you turn off the new PitchDOF in ElastoDyn, do you get closer to the expected control response with the DISCON.IN you previously tuned?

If you want to re-tune with the latest OpenFAST v5 model, you’ll need to update the openfast-io dependency of ROSCO to v5. It should not change the DISCON.IN much.

I hope this helps.

Best, Dan

Hi Daniel,

It does not improve the simulation. The simulation I shared with you had already been run with PitchDOF = False. The ElastoDyn.dat file I pasted in my previous message was only an example to show the file format I am using with OpenFAST v5.0.

After updating the openfast-io dependency to the v5.0-compatible version, I ran 02_ccblade.py again. It now seems that the ElastoDyn.dat, AeroDyn.dat, ServoDyn.dat, and Main.fst files are being read correctly. However, I now get the following error:

Traceback (most recent call last):
  File "C:\Users\maddi.aizpurua\ROSCO\Examples\02_ccblade.py", line 67, in <module>
    main()
  File "C:\Users\maddi.aizpurua\ROSCO\Examples\02_ccblade.py", line 48, in main
    turbine.load_from_fast(
  File "C:\Users\maddi.aizpurua\ROSCO\rosco\toolbox\turbine.py", line 240, in load_from_fast
    self.load_blade_info()
  File "C:\Users\maddi.aizpurua\ROSCO\rosco\toolbox\turbine.py", line 535, in load_blade_info
    r0 = np.array(self.fast.fst_vt['AeroDynBlade']['BlSpn'])
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
TypeError: list indices must be integers or slices, not str

So it looks like the OpenFAST v5.0 files are now being parsed, but ROSCO does not already supports this updated structure. Or, should I change something else?

Best regards,

Maddi

Hi Maddi,

I started the process of making ROSCO compatible with OpenFAST 5.0 input files here: GitHub - NatLabRockies/ROSCO at of_50 · GitHub

So far, I’m not seeing any instabilities in simple simulations with the IEA-15MW floating model.

Which model are you using in your simulation? Is it possible that updated settings in the OpenFAST model would cause instabilities in the aerodynamic or generator speed response?

Has anything changed in the DISCON file from v4 to v5?

To reproduce your issue, I’ll need more information.

Best, Dan

Hi Daniel,

I installed the ROSCO that you shared but I am still getting the following error, so I couldn’t generate the DISCON.in file with the v5 version and compare it with v4 "(rosco-env).

" C:\Users\maddi.aizpurua\ROSCO\Examples>python 02_ccblade.py

Loading wind turbine data for NREL’s ROSCO tuning and simulation processeses

Loading FAST model: MinimalExample.fst
Traceback (most recent call last):
File “C:\Users\maddi.aizpurua\ROSCO\Examples\02_ccblade.py”, line 67, in
main()
File “C:\Users\maddi.aizpurua\ROSCO\Examples\02_ccblade.py”, line 48, in main
turbine.load_from_fast(
File “C:\Users\maddi.aizpurua\ROSCO\rosco\toolbox\turbine.py”, line 240, in load_from_fast
self.load_blade_info()
File “C:\Users\maddi.aizpurua\ROSCO\rosco\toolbox\turbine.py”, line 535, in load_blade_info
r0 = np.array(self.fast.fst_vt[‘AeroDynBlade’][‘BlSpn’])
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
TypeError: list indices must be integers or slices, not str"

Where can I find the IEA-15MW floating model?I found this to compare it with my model, but this one does not seem to be adjusted to the v5.0 version (GitHub - IEAWindSystems/IEA-15-240-RWT: 15MW reference wind turbine repository developed in conjunction with IEA Wind · GitHub).

In my updated settings, I followed NREL’s recommendations for the new parameters. I also ran some tests by changing the definitions of some of those new parameters, but the instabilities did not disappear.

Best,

Maddi

Hi Maddi,

Here is a version of the IEA-15 MW floating model I used to check for instabilities: ROSCO/Examples/Test_Cases/IEA-15-240-RWT/IEA-15-240-RWT-UMaineSemi at of_50 · NatLabRockies/ROSCO · GitHub. It will eventually make its way to the main branch.

When I re-tuned the models for OpenFAST v5, there were only minor changes, which should not affect the stability of simulations.

I hope this helps.

Best, Dan

Dear @Jason.Jonkman

Recently, I have probelms running OpenFAST v5.0.0 with the ROSCO controller v2.10.4 for NREL 5MW wind turbine. However, when using the Simulink type controller, many errors happened. In dll mode, everything went well. Could you please help find out the problems?

I want to upload the simulation files, but it seems like there is no entrance.

Hi Yinghan,

I should note that we don’t officially support the Simulink version of the controller. However there does seem to be an instability in the simulation.

Was the Simulink controller working with previous versions of OpenFAST? That might be a better comparison for this forum.

There does appear to be a numerical instability related to the blade pitch. Is the PitchDOF disabled in ElastoDyn? What are your SIMULATION CONTROL settings in the main OpenFAST input?

If you could simplify the blade pitch input to isolate the issue, that would be helpful, so we can rule out any controller logic. The spikes in the signal are much faster than any of the normal control logic.

I’m not sure if there are any incompatibilities between the new solver coupling and Simulink, but that is a new element added in v5.

Best, Dan