Using DTU controller for IEA 15 MW RWT

Hi there,

I am trying to use DTUcontroller for the IEA 15 MW RWT in OpenFast. I cloned the github repository for IEA15MW trubine from IEAWindTask37.

When i try to run the code for IEA-15-240-RWT-Monopile_wDTUcontroller, I get this error:

 **************************************************************************************************
 OpenFAST

 Copyright (C) 2022 National Renewable Energy Laboratory
 Copyright (C) 2022 Envision Energy USA LTD

 This program is licensed under Apache License Version 2.0 and comes with ABSOLUTELY NO WARRANTY.
 See the "LICENSE" file distributed with this software for details.
 **************************************************************************************************

 OpenFAST--128-NOTFOUND
 Compile Info:
  - Compiler: GCC version 10.4.0
  - Architecture: 64 bit
  - Precision: single
  - OpenMP: No
  - Date: Oct 29 2022
  - Time: 12:21:23
 Execution Info:
  - Date: 06/08/2023
  - Time: 17:44:18+0200

 OpenFAST input file heading:
     IEA 15 MW offshore reference model monopile configuration

 Running ElastoDyn.
 Running AeroDyn.
 Warning: Turning off Unsteady Aerodynamics because UA parameters are not included in airfoil
 (airfoil has likely has constant polars). (node 1, blade 1)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 2, blade 1)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 4, blade 1)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 5, blade 1)
 Warning: Turning off Unsteady Aerodynamics because UA parameters are not included in airfoil
 (airfoil has likely has constant polars). (node 1, blade 2)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 2, blade 2)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 4, blade 2)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 5, blade 2)
 Warning: Turning off Unsteady Aerodynamics because UA parameters are not included in airfoil
 (airfoil has likely has constant polars). (node 1, blade 3)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 2, blade 3)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 4, blade 3)
 Warning: Turning off Unsteady Aerodynamics because C_nalpha is 0. (node 5, blade 3)
 Running InflowWind.
 Running HydroDyn.
  Generating incident wave kinematics and current time history.
 Running SubDyn.
    Fixed bottom case detected
    Performing Craig-Bampton reduction 60 DOFs -> 0 modes + 6 DOFs
    Using static improvement method for gravity and ext. loads
    Calculating Full System Modes for output files
    Exporting Summary file
 Running ServoDyn.
 Running ServoDyn Interface for Bladed Controllers (using GNU Fortran for Linux).

 FAST_InitializeAll:HydroDyn_Init:Waves_Init:VariousWaves_Init: The random number generator in use
 differs from the original code provided by NREL. This pRNG uses 8 seeds instead of the 2 in the
 HydroDyn input file.
 FAST_InitializeAll:SrvD_Init:BladedInterface_Init:The dynamic library
 ./control/DTUWEC_for_OpenFAST.so could not be loaded. Check that the file exists in the specified
 location and that it is compiled for 64-bit applications.

 OpenFAST encountered an error during module initialization.
  Simulation error level: FATAL ERROR

  Aborting OpenFAST.

I am using OpenFast v3.3 and I guess its not the problem with the version but with the .so file itself.

Can someone recommend how to solve this issue?

Dear @Abdul.Syed

Does input DLL_FileName in ServoDyn point to the correct location where the controller dynamic library is stored? If you are using Windows, this should be a DLL instead of an SO.

Best regards,

Dear Jason

Thank you very much for a quick response.

I am using a Linux environment. The .so file is present in the control folder and the path is correctly given (I think). This is how the path is defined in the IEA-15-240-RWT-Monopile_ServoDyn_wDTUcontroller.dat file:

---------------------- BLADED INTERFACE ---------------------------------------- [used only with Bladed Interface]
"control/DTUWEC_for_OpenFAST.so"  DLL_FileName - Name/location of the dynamic library {.dll [Windows] or .so [Linux]} in the Bladed-DLL format (-) [used only with Bladed Interface]
"control/DISCON.IN"   DLL_InFile  - Name of input file sent to the DLL (-) [used only with Bladed Interface]

Should the path be like “./control/DTUWEC_for_OpenFAST.so” or “control/DTUWEC_for_OpenFAST.so”?
or Is it because the .so file is not compiled on the local machine?

Best regards,
Abdul

Dear @Abdul.Syed,

The later sounds right if that is correct location. How about changing it to the full path, e.g., “C:/>control/DTUWEC_for_OpenFAST.so” in case the relative path is incorrect?

Is the SO file compiled in 64 bits?

Best regards,

Dear Jason,

I tried putting the fixed path instead of the relative path and it still gave me the same error.

So I decided to compile the DTU controller myself using the link provided: DTU controller

I generated a .so file by compiling it with GCC gfortran and put its path in the IEA-15-240-RWT-Monopile_ServoDyn_wDTUcontroller.dat but then i get this new error:

 FAST_InitializeAll:SrvD_Init:BladedInterface_Init:The procedure DISCON in file
 /home/absy/Openfast/BasicDTUController/build/src/dtu_we_controller/dtu_we_controller.so could not
 be loaded.

 OpenFAST encountered an error during module initialization.
  Simulation error level: FATAL ERROR

  Aborting OpenFAST.

It has something to do with DISCON. Can you help me understand this problem?

Best regards,
Abdul

Hi Abdul,

Does the DTU team have any guidance on what DLL_ProcName should be when using their controller in OpenFAST? This error message seems to come after the dynamic library is loaded and when it’s searching for the subroutine name in the library. In ROSCO, and some others, it’s DISCON. Perhaps that input needs to be updated. I would check to see if your source code has that DISCON subroutine.

Best, Dan

Hi Daniel and Jason,

Sorry for the delay in posting the reply. I contacted the DTU controller team and solved the issue. I was using the wrong format of the DTU WE controller. The controller file can be compelled using the source code at OpenLAC / BasicDTUController · GitLab

The correct format is the bladed format. These are the things to consider:
• First you need to use this: ”DTUWEC_for_OpenFAST.so”. (.dll in case of Windows)
• second, you also need to prepare the correct controller parameter files used by DTUWEC and put it into a file, for example, called “DISCON.IN”.
• In the OpenFAST ServoDyn input file, you need to give the correct path to both the “DTUWEC_for_OpenFAST.so” file and the “DISCON.IN”
• You have to insert the “DISCON” in the line where you give “DLL_ProcName”

Then there was another issue with the usage of the DTU controller with the IEA 15 MW RWT UMaine SemiSubmersible. This issue is related to the pitch instability of a floating wind turbine above rated wind speeds. This issue is solved by adding a “Floating additional control loop” and changing some parameters for Full load control parameters in the DISCON.IN file. I am attaching the modified DISCON.IN to this reply.

The modified DISCON.IN for the floating IEA-15-MW RWT UMaineSemi.

; begin init ; 
; Overall parameters 
constant  1    15000.0        ; Rated power [kW]                          
constant  2    0.524          ; Minimum rotor (LSS) speed [rad/s] 
constant  3    0.792          ; Rated rotor (LSS) speed [rad/s] 
constant  4    21586451.33303 ; Maximum allowable generator torque [Nm] 
constant  5    100.0          ; Minimum pitch angle, theta_min [deg],  
                              ; if |theta_min|>90, then a table of <wsp,theta_min> is read ; 
                              ; from a file named 'wptable.n', where n=int(theta_min)
                              ; But for the openFAST interface, it has a bug so currently, you can only set a single minimum pitch angle instead of a table.
constant  6   90.0            ; Maximum pitch angle [deg] 
constant  7    2.0            ; Maximum pitch velocity operation [deg/s] 
constant  8    1.0081         ; Frequency of generator speed filter [Hz] 
constant  9    0.7            ; Damping ratio of speed filter [-] 
constant 10    1.01           ; Frequency of free-free DT torsion mode [Hz], if zero no notch filter used 
; Partial load control parameters 
constant 11    0.302217E+08   ; Optimal Cp tracking K factor [Nm/(rad/s)^2], ; 
                              ; Qg=K*Omega^2, K=eta*0.5*rho*A*Cp_opt*R^3/lambda_opt^3                      
constant 12    0.112427E+09   ; Proportional gain of torque controller [Nm/(rad/s)] 
constant 13    0.201829E+08   ; Integral gain of torque controller [Nm/rad] 
constant 14    0.0    	      ; Differential gain of torque controller [Nm/(rad/s^2)] 
;     Full load control parameters 
constant 15    0              ; Generator control switch [1=constant power, 0=constant torque] 
constant 16    3.1681          ; Proportional gain of pitch controller [rad/(rad/s)] 
constant 17    0.7109         ; Integral gain of pitch controller [rad/rad] 
constant 18    0.0            ; Differential gain of pitch controller [rad/(rad/s^2)] 
constant 19    0.4e-8         ; Proportional power error gain [rad/W] 
constant 20    0.4e-8         ; Integral power error gain [rad/(Ws)] 
constant 21    2.2208       ; Coefficient of linear term in aerodynamic gain scheduling, KK1 [deg] 
constant 22   -154.6450       ; Coefficient of quadratic term in aerodynamic gain scheduling, KK2 [deg^2] & 
                              ; (if zero, KK1 = pitch angle at double gain) 
constant 23    1.5            ; Relative speed for double nonlinear gain [-] 
;     Cut-in simulation parameters 
constant 24   -1              ; Cut-in time [s], no cut-in is simulated if zero or negative 
constant 25    1.0            ; Time delay for soft start of torque [1/1P] 
;     Cut-out simulation parameters 
constant 26   -1              ; Shut-down time [s], no shut-down is simulated if zero or negative 
constant 27    5.0            ; Time of linear torque cut-out during a generator assisted stop [s] 
constant 28    1              ; Stop type [1=normal, 2=emergency] 
constant 29    1.0            ; Time delay for pitch stop after shut-down signal [s] 
constant 30    2.0            ; Maximum pitch velocity during initial period of stop [deg/s] 
constant 31    3.0            ; Time period of initial pitch stop phase [s] (maintains pitch speed specified in constant 30) 
constant 32    2.0            ; Maximum pitch velocity during final phase of stop [deg/s] 
;     Expert parameters (keep default values unless otherwise given) 
constant 33    2.0            ; Time for the maximum torque rate = Maximum allowable generator torque/(constant 33 + 0.01s) [s] 
constant 34    2.0            ; Upper angle above lowest minimum pitch angle for switch [deg], if equal then hard switch 
constant 35   95.0            ; Percentage of the rated speed when the torque limits are fully opened [%] 
constant 36    2.0            ; Time constant of 1st order filter on wind speed used for minimum pitch [1/1P] 
constant 37    1.0            ; Time constant of 1st order filter on pitch angle used for gain scheduling [1/1P] 
;     Drivetrain damper 
constant 38    0.0            ; Proportional gain of active DT damper [Nm/(rad/s)], requires frequency in input 10 
;	  Over speed 
constant 39   50.0            ; Overspeed percentage before initiating turbine controller alarm (shut-down) [%] 
;     Additional non-linear pitch control term (not used when all zero) 
constant 40    0.0            ; Rotor speed error scaling factor [rad/s] 
constant 41    0.0            ; Rotor acceleration error scaling factor [rad/s^2] 
constant 42    0.0            ; Pitch rate gain [rad/s] 
;     Storm control command 
constant 43   28.0            ; Wind speed 'Vstorm' above which derating of rotor speed is used [m/s] 
constant 44   28.0            ; Cut-out wind speed (only used for derating of rotor speed in storm) [m/s]	   
;     Safety system parameters 
constant 45   50.0            ; Overspeed percentage before initiating safety system alarm (shut-down) [%] 
constant 46    2.0            ; Max low-pass filtered tower top acceleration level [m/s^2] 
;     Turbine parameter 
constant 47  240.0            ; Nominal rotor diameter [m] 
;     Parameters for rotor inertia reduction in variable speed region 
constant 48    0.0            ; Proportional gain on rotor acceleration in variable speed region [Nm/(rad/s^2)] (not used when zero) 
;     Parameters for alternative partial load controller with PI regulated TSR tracking 
constant 49    9.0            ; Optimal tip speed ratio [-] (only used when K=constant 11 = 0 otherwise  Qg=K*Omega^2 is used) 
;     Parameters for adding aerodynamic drivetrain damping on gain scheduling 
constant 50    0.0            ; Aerodynamic DT damping coefficient at the operational point of zero pitch angle [Nm/(rad/s)] (not used when zero) 
constant 51    0.0            ; Coefficient of linear term in aerodynamic DT damping scheduling, KK1 [deg] 
constant 52    0.0            ; Coefficient of quadratic term in aerodynamic DT damping scheduling, KK2 [deg^2] 
;     Torque exclusion zone 
constant 53    0.0            ; Exclusion zone: Lower speed limit [rad/s] (Default 0 used if zero)	   
constant 54    0.0            ; Exclusion zone: Generator torque at lower limit [Nm] (Default 0 used if zero)	   
constant 55    0.0            ; Exclusion zone: Upper speed limit [rad/s] (if =< 0 then exclusion zone functionality is inactive)               	   
constant 56    0.0            ; Exclusion zone: Generator torque at upper limit [Nm] (Default 0 used if zero) 	   
constant 57    0.0            ; Time constant of reference switching at exclusion zone [s] (Default 0 used if zero)	   
;     DT torsion mode damper	   
constant 58    0.0            ; Frequency of notch filter [Hz] (Default 10 x input 10 used if zero)	   
constant 59    0.0            ; Damping of BP filter [-] (Default 0.02 used if zero) 	   
constant 60    0.0            ; Damping of notch filter [-] (Default 0.01 used if zero) 	   
constant 61    0.0            ; Phase lag of damper [s] =>  max 40*dt (Default 0 used if zero) 	   
;     Fore-aft Tower mode damper	   
constant 62    0.0            ; Frequency of BP filter [Hz] (Default 10 used if zero)\\ 	   
constant 63    0.0            ; Frequency of notch fiter [Hz] (Default 10 used if zero)\\ 	   
constant 64    0.0            ; Damping of BP filter [-] (Default 0.02 used if zero)\\	   
constant 65    0.0            ; Damping of notch filter [-] (Default 0.01 used if zero)\\	   
constant 66    0.0            ; Gain of damper [-] (Default 0 used if zero)\\ 	   
constant 67    0.0            ; Phase lag of damper [s] =>  max 40*dt (Default 0 used if zero)\\ 	   
constant 68    0.0            ; Time constant of 1st order filter on PWR used for fore-aft Tower mode damper GS [Hz] (Default 10 used if zero)	   
constant 69    0.0            ; Lower PWR limit used for fore-aft Tower mode damper GS [-] (Default 0 used if zero)	   
constant 70    0.0            ; Upper PWR limit used for fore-aft Tower mode damper GS [-] (Default 0 used if zero) 	   
;     Side-to-side Tower mode filter	   
constant 71    0.0            ; Frequency of Tower side-to-sede notch filter [Hz] (Default 100 used if zero)	   
constant 72    0.0            ; Damping of notch filter [-] (Default 0.01 used if zero)	   
constant 73    0.0            ; Max low-pass filtered tower top acceleration level before initiating safety system alarm (shut-down) [m/s^2] (Default 1.1 x input 46 used if zero)	   
constant 74    0.0            ; Time constant of 1st order filter on tower top acceleration [1/1P] (Default 1 used if zero)	   
;     Pitch deviation monitor parameters	   
constant 75   1005020         ; 1005020 Parameters for pitch deviation monitoring. The format is 1,nnn,mmm 	   
; where 'nnn' [s] is the period of the moving average and 'mmm' is threshold of the deviation [0.1 deg] (functionality is inactive if value $<$ 1,000,000)	   
;     Gear ratio	   
constant 76    1.0            ; Gear ratio used for the calculation of the LSS rotational speeds and the HSS generator torque reference [-] (Default 1 if zero) 
;     Rotor speed notch filter for constant power operation above rated 
constant 77    0.0            ; Frequency of notch filter [Hz] applied on the rotor speed before computing torque above rated (constant power), if zero no notch filter used 
constant 78    0.0            ; Damping of notch filter [-] applied on the rotor speed before computing torque above rated (constant power), (Default 0.01 used if zero) 
;     Down regulation control strategy 
constant  79   0              ; Down regulation control strateg. (0 = None, 1 = constant rotation, 2 = max rotation  3 = minimum Ct) 
constant  80   100.0          ; Derate percentage (eg. 70 means 70% of nominal power) 
constant  81   0.0            ; rotor inertia 
; 	  Floating additional control loop
constant 	82 10.59;    Rated wind speed (Only used when constant 79 = 3 OR constant 91/92/93/94 != 0)
constant 	83 0;	Gain for the loop mapping from tower velocity to blade pitch [rad/(m/s)]
constant  	84 -4.119e+06; 	Gain for the loop mapping from tower velocity to GenTorque [Nm/(m/s)]
constant  	85 30.0; 	Time to switch on the floating control loop [s]
constant    86 0.0; 	Frequency of LP filter [Hz] (Default 0 if filter not used)
constant    87 0; 	Damping ratio of LP filter  [-]
constant    88 0.03; 	Frequency of BP filter [Hz] (Default 0 if filter not used)
constant    89 0.7; 	Damping ratio of BP filter  [-] (Default 0.02)
constant    90 0.3; 	Time constant of BP filter [s] (Default 0)
constant    91 0.0; 	Coefficient of linear term in gain scheduling for tower-pitch loop, KK1 [1/(m/s)];
						; Kgain * (1 + KK1 *abs(WSPfilt - WSPrated) + KK2 * abs(WSPfilt - WSPrated)**2)
constant    92 0.0; 	Coefficient of quadratic term in gain scheduling for tower-pitch loop, KK2 [1/(m/s)^2];
constant    93 -0.0044; 	Coefficient of linear term in gain scheduling for tower-genTorq loop, KK1 [1/(m/s)];
constant    94 -0.0012; 	Coefficient of quadratic term in gain scheduling for tower-genTorq loop, KK2 [1/(m/s)^2];
constant    95 1.0;     Choice of gain-scheduling variable (0: WSPfilt, 1:Pitch angle (Default))
end init ; 

Hopefully, this will help someone in the future. Many thanks to Fanzhong Meng from DTU for helping out.