OpenFAST / openfast

Main repository for the NREL-supported OpenFAST whole-turbine and FAST.Farm wind farm simulation codes.
http://openfast.readthedocs.io
Apache License 2.0
695 stars 459 forks source link

Nacelle Yaw control for repositioning of IEA-15MW #1638

Closed Dwivedi07 closed 1 year ago

Dwivedi07 commented 1 year ago

Hello there! I am trying to implement a nacelle yaw controller for repositioning analysis for IEA-15MW wind turbine. My goal is to laterally reposition the turbine by changing the nacelle yaw angle and generating an aerodynamic thrust force to move the turbine. I am using ROSCO based controller and edited its YawRateControl SUBROUTINE to generate my required yaw rate at each call and then assign it with avrSWAP(48). The issue which I have encountered is that openfast abort in between when I run my controller with the error on the terminal as: FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption2:AD_CalcOutput:RotCalcOutput:BEMT_CalcOut put(node 48, blade 2):UA_CalcOutput:Mach number exceeds 1.0. Equations cannot be evaluated.

OpenFAST encountered an error at simulation time 33.075 of 1000 seconds. Simulation error level: FATAL ERROR

My yaw rate and max yaw are constrained also by 0.15 rad.sec and Yaw angle i have constrained by 20 degrees(later 8 degrees(reason for this is written below) but still same results)


I had first tried to switch off the Y_ControlMode(=0) and give initial nacelle yaw angle to the turbine. On simulating upto 800 seconds the turbine should sway significantly but the order of sway I am getting is 0.47m(nearly upto 8 degrees as initial nacelle yaw angle given in ElastoDyn) Which is very weird? One thing I observed is as the openfast starts for the given initial nacelle yaw(< 8degrees). The total yaw is negative but the turbine moves in a positive y direction which is against the dynamics later(after 200-300 sec) the sign are in agreement but it is very weird to get opposite results, which I am not sure why it is happening. If I give more than 8 degrees as initial Nacelle Yaw the openfast aborts:(below is the response when I put the initial nacelle yaw as 9 degrees):: ------------------------------------------------------------ELASTODYN FILE---------------------------------------------------------------------------------- ---------------------- INITIAL CONDITIONS -------------------------------------- 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) 0 IPDefl - Initial in-plane blade-tip deflection (meters) 1 BlPitch(1) - Blade 1 initial pitch (degrees) 1 BlPitch(2) - Blade 2 initial pitch (degrees) 1 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] 0 Azimuth - Initial azimuth angle for blade 1 (degrees) 7.55 RotSpeed - Initial or fixed rotor speed (rpm) 9 NacYaw - Initial or fixed nacelle-yaw angle (degrees) 0 TTDspFA - Initial fore-aft tower-top displacement (meters) 0 TTDspSS - Initial side-to-side tower-top displacement (meters) 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees)

---------------------------------------------------------------TERMINAL-------------------------------------------------------------------------------------------


OpenFAST

Copyright (C) 2023 National Renewable Energy Laboratory Copyright (C) 2023 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:


Running ROSCO-v2.8.0 A wind turbine controller framework for public use in the scientific field
Developed in collaboration: National Renewable Energy Laboratory
Delft University of Technology, The Netherlands

ROSCO Warning: Did not find Echo in input file. Using default value of 0 ROSCO Warning: Did not find AWC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find CC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find StC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find AWC_NumModes in input file. Using default value of 0 ROSCO Warning: Did not find correct size AWC_n in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size AWC_harmonic in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct sizeAWC_freq in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find correct sizeAWC_amp in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find correct sizeAWC_clockangle in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find CC_Group_N in input file. Using default value of 0 ROSCO Warning: Did not find correct size CC_GroupIndex in input file. Using default value of [ 0 ] ROSCO Warning: Did not find CC_ActTau in input file. Using default value of 0.0000000000000000
ROSCO Warning: Did not find StC_Group_N in input file. Using default value of 0 ROSCO Warning: Did not find correct size StC_GroupIndex in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size Ind_CableControl in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size Ind_StructControl in input file. Using default value of [ 0 ] Generator speed: 7.6 RPM, Pitch angle: 1.0 deg, Power: 0.0 kW, Est. wind Speed: 18.0 m/s Warning: SkewedWakeCorrection encountered a large value of chi (95.799 deg), so the yaw correction will be limited. This warning will not be repeated though the condition may persist. See the AD15 chi output channels, and consider turning off the Pitt/Peters skew model (set SkewMod=1) if this condition persists.

FAST_Solution:FAST_AdvanceStates:ED_ABM4:ED_AB4:ED_RK4:ED_CalcContStateDeriv:SetCoordSy:Small angle assumption violated in SUBROUTINE SmllRotTrans() due to a large blade deflection (ElastoDyn SetCoordSy). The solution may be inaccurate. Simulation continuing, but future warnings from SmllRotTrans() will be suppressed. Additional debugging message from SUBROUTINE SmllRotTrans(): 3.75000E-02 s FAST_AdvanceStates:AD_UpdateStates:BEMT_UpdateStates(node 43, blade 1):UA_UpdateStates:UA_UpdateDiscOtherState:ComputeKelvinChain:Mach number exceeds 0.3. Theory is invalid. This warning will not be repeated though the condition may persist. FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption2:AD_CalcOutput:RotCalcOutput:BEMT_CalcOut put(node 3, blade 1):UA_CalcOutput:UA_BlendSteady:Temporarily turning off UA due to high angle of attack or low relative velocity. This warning will not be repeated though the condition may persist.

FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption2:AD_CalcOutput:RotCalcOutput:BEMT_CalcOut put(node 49, blade 3):UA_CalcOutput:Mach number exceeds 1.0. Equations cannot be evaluated.

OpenFAST encountered an error at simulation time 7.50000E-02 of 1000 seconds. Simulation error level: FATAL ERROR

Aborting OpenFAST.


Kindly look into the issue and help. Thanks and Regards

jjonkman commented 1 year ago

Dear @Dwivedi07 ,

Do you have the nacelle-yaw DOF enabled in ElastoDyn (YawDOF = True)? If so, have you set the neutral yaw angle in ServoDyn equal to the initial yaw angle in ElastoDyn, i.e., YawNeut = NacYaw. If not, the nacelle-yaw angle will quickly snap back to 0deg and result in unrealistic loads and deflections. If you want to keep a nonzero yaw angle and keep the nacelle-yaw DOF enabled, then set both YawNeut and NacYaw to the same value.

Best regards,

Dwivedi07 commented 1 year ago

Hi @jjonkman Thanks for your fast response. Yes, I had enabled YawDOF = True and previously the YawNeut was not equal to NacYaw . Now after making YawNeut = NacYaw, for the initial yaw greater than 8 degrees, I am getting sensible values for sway. Does this mean that if I want to implement my algorithm for Yaw Control? I need to update the Yaw neutral value at every call of the controller subroutine? As my final goal is to implement my own controller for Nacelle yaw so that I can reposition the turbine. Correct me if I am getting it wrong. If I am correct, I am not sure how will I update the YawNeut value once it is set in ElastoDyn file. Kindly guide me. Thanks and regards

jjonkman commented 1 year ago

Dear @Dwivedi07,

When active yaw control is enabled (YCMode > 0 in ServoDyn), the nacelle-yaw angle command is defined by the yaw controller, overwriting what is specified via YawNeut at times after TYCon. YawNeut is used for times before TYCon and when active yaw control is not enabled (YCMode = 0). See Figure 24 of the Old FAST v6 User's Guide (still generally applicable to OpenFAST) for more information: https://openfast.readthedocs.io/en/main/_downloads/d8bd014121d6505cb25cf49bee5eaa80/Old_FAST6_UsersGuide.pdf.

Best regards,

Dwivedi07 commented 1 year ago

Thanks for your Reply @jjonkman, So If I am getting it correct you mean to say that if the YCMode>0 in SevoDyn which in my case is 5, then it YawNeut is automatically changed by openfast by using the value stored in YawPosCom. and similarly YawRateNeu by YawRateCom. In the yaw control subroutine I have assigned, at each call of the subroutine, YawRateCom to avrSWAP(48). But the terminal response I am getting is as:


OpenFAST--128-NOTFOUND Compile Info:


Running ROSCO-v2.8.0 A wind turbine controller framework for public use in the scientific field
Developed in collaboration: National Renewable Energy Laboratory
Delft University of Technology, The Netherlands

ROSCO Warning: Did not find Echo in input file. Using default value of 0 ROSCO Warning: Did not find AWC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find CC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find StC_Mode in input file. Using default value of 0 ROSCO Warning: Did not find AWC_NumModes in input file. Using default value of 0 ROSCO Warning: Did not find correct size AWC_n in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size AWC_harmonic in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct sizeAWC_freq in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find correct sizeAWC_amp in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find correct sizeAWC_clockangle in input file. Using default value of [ 0.0000000000000000 ] ROSCO Warning: Did not find CC_Group_N in input file. Using default value of 0 ROSCO Warning: Did not find correct size CC_GroupIndex in input file. Using default value of [ 0 ] ROSCO Warning: Did not find CC_ActTau in input file. Using default value of 0.0000000000000000
ROSCO Warning: Did not find StC_Group_N in input file. Using default value of 0 ROSCO Warning: Did not find correct size StC_GroupIndex in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size Ind_CableControl in input file. Using default value of [ 0 ] ROSCO Warning: Did not find correct size Ind_StructControl in input file. Using default value of [ 0 ] Generator speed: 7.6 RPM, Pitch angle: 1.0 deg, Power: 0.0 kW, Est. wind Speed: 12.0 m/s Sway: -2.25703843E-05 Surge: -3.76833523E-05 Total Yaw: -4.2526378136045241E-003 Sway: 1.19104538E-04 Surge: -1.50621156E-04 Total Yaw: 0.40697543777164075

FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption2:AD_CalcOutput:RotCalcOutput:BEMT_CalcOut put(node 47, blade 2):UA_CalcOutput:Mach number exceeds 0.3. Theory is invalid. This warning will not be repeated though the condition may persist. BEMT_CalcOutput(node 3, blade 3):UA_CalcOutput:UA_BlendSteady:Temporarily turning off UA due to high angle of attack or low relative velocity. This warning will not be repeated though the condition may persist.

Sway: 3.26840091E-04 Surge: -3.45947017E-04 Total Yaw: 1.5054014535076916
Sway: -2.68358184E-04 Surge: -5.02954645E-04 Total Yaw: 2.2615640189830959
Sway: -1.06034556E-03 Surge: -5.95252088E-04 Total Yaw: 2.4093349494887142
Sway: -2.25230237E-03 Surge: -6.30341237E-04 Total Yaw: 2.1796871256117525
Sway: -3.02591501E-03 Surge: -5.06707234E-04 Total Yaw: 2.1553599125721306
Sway: -2.93639419E-03 Surge: -2.78355583E-04 Total Yaw: 2.6906488860076667
Sway: -2.11750576E-03 Surge: 2.41575581E-05 Total Yaw: 3.5655604810718446
Sway: -8.00900394E-04 Surge: 4.54969733E-04 Total Yaw: 4.2813551341055334
Sway: 5.30378486E-04 Surge: 9.99842887E-04 Total Yaw: 4.5085588174559179
Sway: 1.77815999E-03 Surge: 1.58992759E-03 Total Yaw: 4.3883560247786342
Sway: 2.98520364E-03 Surge: 2.19242554E-03 Total Yaw: 4.3640849473567309
Sway: 4.24100365E-03 Surge: 2.74392962E-03 Total Yaw: 4.7569945709085468
Sway: 5.48865274E-03 Surge: 3.19111813E-03 Total Yaw: 5.4940206537142400
Sway: 6.57935999E-03 Surge: 3.56893567E-03 Total Yaw: 6.2104652419416606
Sway: 7.48739811E-03 Surge: 3.89725482E-03 Total Yaw: 6.6033582169072327
Sway: 8.41886643E-03 Surge: 4.16583475E-03 Total Yaw: 6.6917344622159005
Sway: 9.75654088E-03 Surge: 4.38157748E-03 Total Yaw: 6.7650633737683297

FAST_Solution:FAST_AdvanceStates:ED_ABM4:ED_CalcContStateDeriv:SetCoordSy:Small angle assumption violated in SUBROUTINE SmllRotTrans() due to a large blade deflection (ElastoDyn SetCoordSy). The solution may be inaccurate. Simulation continuing, but future warnings from SmllRotTrans() will be suppressed. Additional debugging message from SUBROUTINE SmllRotTrans(): 0.475 s

Sway: 1.18122026E-02 Surge: 4.54392517E-03 Total Yaw: 7.0920633788166940
Sway: 1.46178007E-02 Surge: 4.66398615E-03 Total Yaw: 7.6761687818822262
Sway: 1.79084260E-02 Surge: 4.81489440E-03 Total Yaw: 8.2381294308099147
Sway: 2.09913701E-02 Surge: 5.14211506E-03 Total Yaw: 7.8218362275490163
Sway: 2.42134463E-02 Surge: 5.53738233E-03 Total Yaw: 6.8293982067678867
Sway: 2.93458980E-02 Surge: 5.90720959E-03 Total Yaw: 7.1778834258067610
Sway: 3.28437537E-02 Surge: 6.24309806E-03 Total Yaw: 8.4195025444400304
Sway: 3.65253873E-02 Surge: 6.74035493E-03 Total Yaw: 8.8866815112236139
Sway: 3.81513350E-02 Surge: 7.53147248E-03 Total Yaw: 7.3934552969017622
Sway: 4.17788364E-02 Surge: 7.74738006E-03 Total Yaw: 6.4709725010812287
Sway: 4.52419780E-02 Surge: 8.12679064E-03 Total Yaw: 7.5412119266986846
Sway: 4.85318154E-02 Surge: 8.10847152E-03 Total Yaw: 9.4641108312055469
Sway: 5.18103875E-02 Surge: 8.22166074E-03 Total Yaw: 10.058340709141195
Sway: 5.30648679E-02 Surge: 8.76981020E-03 Total Yaw: 8.0092421058148151
Sway: 5.68869747E-02 Surge: 8.61289911E-03 Total Yaw: 5.9642817433869837
Sway: 6.10544942E-02 Surge: 9.04119480E-03 Total Yaw: 6.2505260093115274
Sway: 6.68844804E-02 Surge: 8.60463735E-03 Total Yaw: 8.8145197082555296
Sway: 7.09287748E-02 Surge: 8.74125026E-03 Total Yaw: 10.392542721843720
Sway: 7.31046274E-02 Surge: 9.70590115E-03 Total Yaw: 8.9217494102677701
Sway: 7.48928115E-02 Surge: 9.92547255E-03 Total Yaw: 5.9775673152092104
Sway: 7.63136148E-02 Surge: 1.09282434E-02 Total Yaw: 4.7842683702698352
Sway: 8.02604929E-02 Surge: 1.15984948E-02 Total Yaw: 7.1799196759703756
Sway: 8.19521844E-02 Surge: 1.18825808E-02 Total Yaw: 10.506769098946453
Sway: 8.32613111E-02 Surge: 1.29459715E-02 Total Yaw: 11.390500816181600
Warning: SkewedWakeCorrection encountered a large value of chi (99.902 deg), so the yaw correction will be limited. This warning will not be repeated though the condition may persist. See the AD15 chi output channels, and consider turning off the Pitt/Peters skew model (set SkewMod=1) if this condition persists.

Sway: 8.10849890E-02 Surge: 1.40747204E-02 Total Yaw: 8.3684793233591321
Sway: 8.07964131E-02 Surge: 1.44000929E-02 Total Yaw: 4.6148818118481341
Sway: 8.19551125E-02 Surge: 1.56229883E-02 Total Yaw: 4.0222040944145618
Sway: 8.68161917E-02 Surge: 1.54987909E-02 Total Yaw: 7.6848132401239875
Sway: 8.95774737E-02 Surge: 1.53443469E-02 Total Yaw: 11.718725559535921
Sway: 9.07608271E-02 Surge: 1.66182127E-02 Total Yaw: 12.057404761277438
Sway: 8.72079507E-02 Surge: 1.76699068E-02 Total Yaw: 7.8379768184685705
Sway: 8.46992880E-02 Surge: 1.83622800E-02 Total Yaw: 4.0195006201407315
Sway: 8.31174031E-02 Surge: 2.06318423E-02 Total Yaw: 4.4907226320604980
Sway: 8.30041990E-02 Surge: 2.10322198E-02 Total Yaw: 8.7767351014459134
Sway: 8.22377950E-02 Surge: 2.19959430E-02 Total Yaw: 12.125699823368787
Sway: 7.89301172E-02 Surge: 2.46544220E-02 Total Yaw: 10.828114987974464
Sway: 7.55772814E-02 Surge: 2.54071858E-02 Total Yaw: 6.6444524772846698
Sway: 7.24780783E-02 Surge: 2.74284519E-02 Total Yaw: 3.9438660928370060
Sway: 7.33039007E-02 Surge: 2.93260310E-02 Total Yaw: 5.7821820683777334
Sway: 7.31630325E-02 Surge: 2.98534408E-02 Total Yaw: 10.086010659477711
Sway: 7.24563897E-02 Surge: 3.15831564E-02 Total Yaw: 12.236429997360409
Sway: 6.73774928E-02 Surge: 3.43899503E-02 Total Yaw: 9.6023444696712499
Sway: 6.22100197E-02 Surge: 3.54566574E-02 Total Yaw: 5.1999378918768464
Sway: 5.72819971E-02 Surge: 3.81744765E-02 Total Yaw: 3.4197126757207514
Sway: 5.59781045E-02 Surge: 3.99549939E-02 Total Yaw: 6.4892295968878271
Sway: 5.36249615E-02 Surge: 4.05240655E-02 Total Yaw: 11.290387317571343
Sway: 5.06621376E-02 Surge: 4.27260697E-02 Total Yaw: 12.776913970034123
Sway: 4.42658328E-02 Surge: 4.51108329E-02 Total Yaw: 9.1835053133755924
Sway: 3.91677022E-02 Surge: 4.60478105E-02 Total Yaw: 4.3501155028380456
Sway: 3.58952209E-02 Surge: 4.88687456E-02 Total Yaw: 2.9390688446477058
Sway: 3.69678698E-02 Surge: 5.00247851E-02 Total Yaw: 6.7860892575332521
Sway: 3.66829038E-02 Surge: 5.01688682E-02 Total Yaw: 11.989218128440083
Sway: 3.48813385E-02 Surge: 5.28033227E-02 Total Yaw: 13.085072471210063
Sway: 2.84828302E-02 Surge: 5.50886877E-02 Total Yaw: 8.7982126314735414
Sway: 2.25844067E-02 Surge: 5.60202226E-02 Total Yaw: 3.5822447123652696
Sway: 1.84455998E-02 Surge: 5.92676699E-02 Total Yaw: 2.3624156049168108
Sway: 1.87412631E-02 Surge: 6.01405017E-02 Total Yaw: 6.8654389808902145

FAST_Solution:CalcOutputs_And_SolveForInputs:SolveOption2:AD_CalcOutput:RotCalcOutput:BEMT_CalcOut put(node 49, blade 1):UA_CalcOutput:Mach number exceeds 1.0. Equations cannot be evaluated.

OpenFAST encountered an error at simulation time 1.875 of 800 seconds. Simulation error level: FATAL ERROR

Aborting OpenFAST.

The total Yaw here is NacVanHeading in degrees which abrupty changes in the last step. Following are the settings in ServoDyn file ---------------------- NACELLE-YAW CONTROL ------------------------------------- 5 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) 0 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) 4.6273E+10 YawSpr - Nacelle-yaw spring constant (N-m/rad) 3.9088E+07 YawDamp - Nacelle-yaw damping constant (N-m/(rad/s)) 9999.9 TYawManS - Time to start override yaw maneuver and end standard yaw control (s) 0.25 YawManRat - Yaw maneuver rate (in absolute value) (deg/s) 0.0 NacYawF - Final yaw angle for override yaw maneuvers (degrees)

Following are the settings in DISCON.IN file: !------- CONTROLLER FLAGS ------------------------------------------------- 2 ! F_LPFType - {1: first-order low-pass filter, 2: second-order low-pass filter}, [rad/s] (currently filters generator speed and pitch control signals 2 ! F_NotchType - Notch on the measured generator speed and/or tower fore-aft motion (for floating) {0: disable, 1: generator speed, 2: tower-top fore-aft motion, 3: generator speed and tower-top fore-aft motion} 0 ! IPC_ControlMode - Turn Individual Pitch Control (IPC) for fatigue load reductions (pitch contribution) {0: off, 1: 1P reductions, 2: 1P+2P reductions} 2 ! VS_ControlMode - Generator torque control mode in above rated conditions {0: constant torque, 1: constant power, 2: TSR tracking PI control with constant torque, 3: TSR tracking PI control with constant power} 1 ! PC_ControlMode - Blade pitch control mode {0: No pitch, fix to fine pitch, 1: active PI blade pitch control} 1 ! Y_ControlMode - Yaw control mode {0: no yaw control, 1: yaw rate control, 2: yaw-by-IPC} 1 ! SS_Mode - Setpoint Smoother mode {0: no setpoint smoothing, 1: introduce setpoint smoothing} 2 ! WE_Mode - Wind speed estimator mode {0: One-second low pass filtered hub height wind speed, 1: Immersion and Invariance Estimator, 2: Extended Kalman Filter} 1 ! PS_Mode - Pitch saturation mode {0: no pitch saturation, 1: implement pitch saturation} 0 ! SD_Mode - Shutdown mode {0: no shutdown procedure, 1: pitch to max pitch at shutdown} 2 ! Fl_Mode - Floating specific feedback mode {0: no nacelle velocity feedback, 1: feed back translational velocity, 2: feed back rotational veloicty} 0 ! TD_Mode - Tower damper mode {0: no tower damper, 1: feed back translational nacelle accelleration to pitch angle} 0 ! Flp_Mode - Flap control mode {0: no flap control, 1: steady state flap angle, 2: Proportional flap control, 2: Cyclic (1P) flap control} 0 ! OL_Mode - Open loop control mode {0: no open loop control, 1: open loop control vs. time} 0 ! PA_Mode - Pitch actuator mode {0 - not used, 1 - first order filter, 2 - second order filter} 0 ! PF_Mode - Pitch fault mode {0 - not used, 1 - constant offset on one or more blades} 0 ! Ext_Mode - External control mode {0 - not used, 1 - call external dynamic library} 0 ! ZMQ_Mode - Fuse ZeroMQ interface {0: unused, 1: Yaw Control}

and this is the ElastoDyn file: ------- ELASTODYN v1.03.* INPUT FILE ------------------------------------------- IEA 15 MW offshore reference model on UMaine VolturnUS-S semi-submersible floating platform ---------------------- SIMULATION CONTROL -------------------------------------- False Echo - Echo input data to ".ech" (flag) 3 Method - Integration method: {1: RK4, 2: AB4, or 3: ABM4} (-) "default" DT Integration time step (s) ---------------------- DEGREES OF FREEDOM -------------------------------------- True FlapDOF1 - First flapwise blade mode DOF (flag) True FlapDOF2 - Second flapwise blade mode DOF (flag) True EdgeDOF - First edgewise blade mode DOF (flag) False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] False DrTrDOF - Drivetrain rotational-flexibility DOF (flag) True GenDOF - Generator DOF (flag) True YawDOF - Yaw DOF (flag) True TwFADOF1 - First fore-aft tower bending-mode DOF (flag) True TwFADOF2 - Second fore-aft tower bending-mode DOF (flag) True TwSSDOF1 - First side-to-side tower bending-mode DOF (flag) True TwSSDOF2 - Second side-to-side tower bending-mode DOF (flag) True PtfmSgDOF - Platform horizontal surge translation DOF (flag) True PtfmSwDOF - Platform horizontal sway translation DOF (flag) True PtfmHvDOF - Platform vertical heave translation DOF (flag) True PtfmRDOF - Platform roll tilt rotation DOF (flag) True PtfmPDOF - Platform pitch tilt rotation DOF (flag) True PtfmYDOF - Platform yaw rotation DOF (flag) ---------------------- INITIAL CONDITIONS -------------------------------------- 0 OoPDefl - Initial out-of-plane blade-tip displacement (meters) 0 IPDefl - Initial in-plane blade-tip deflection (meters) 1 BlPitch(1) - Blade 1 initial pitch (degrees) 1 BlPitch(2) - Blade 2 initial pitch (degrees) 1 BlPitch(3) - Blade 3 initial pitch (degrees) [unused for 2 blades] 0 TeetDefl - Initial or fixed teeter angle (degrees) [unused for 3 blades] 0 Azimuth - Initial azimuth angle for blade 1 (degrees) 7.55 RotSpeed - Initial or fixed rotor speed (rpm) 0 NacYaw - Initial or fixed nacelle-yaw angle (degrees) 0 TTDspFA - Initial fore-aft tower-top displacement (meters) 0 TTDspSS - Initial side-to-side tower-top displacement (meters) 0 PtfmSurge - Initial or fixed horizontal surge translational displacement of platform (meters) 0 PtfmSway - Initial or fixed horizontal sway translational displacement of platform (meters) 0 PtfmHeave - Initial or fixed vertical heave translational displacement of platform (meters) 0 PtfmRoll - Initial or fixed roll tilt rotational displacement of platform (degrees) 0 PtfmPitch - Initial or fixed pitch tilt rotational displacement of platform (degrees) 0 PtfmYaw - Initial or fixed yaw rotational displacement of platform (degrees)


What can be the reason here? Kindly guide. Thanks and regards

jjonkman commented 1 year ago

Dear @Dwivedi07,

I agree with what you are saying regarding YawPosCom and YawRateCom. I would just add that when you specify YawRateCom via avrSWAP(48) with YCMode = 5, that the YawPosCom is found by time-integrating YawRateCom.

I'm not familiar with all of the control options available in ROSCO nor all of the warnings regarding Surge, Sway, and Yaw you are getting, which presumably are coming from ROSCO. I would guess something in your model is not set up correctly, but I'm not sure what. I would suggest to simplifying the model (by systematically disabling features) to better isolate the problem.

Best regards,

Dwivedi07 commented 1 year ago

Thanks for you response @jjonkman, I will simplify and try it out. Warm Regards

dzalkind commented 1 year ago

Hi, was this resolved here? https://github.com/NREL/ROSCO/discussions/249#discussioncomment-6201112

dzalkind commented 1 year ago

We sometimes see instabilities in the blades when there are large yaw angles. If you don't need realistic blade deflection, you can turn off the blade DOFs. Alternatively, you can increase the damping in the blade inputs.

Dwivedi07 commented 1 year ago

Hello @dzalkind , Thanks for your response. Yes, it has been resolved. I had reduced the maximum allowable yaw rate and the system got stabilized. Thanks and Regards

clun1 commented 1 year ago

Dear jjonkman,

I am trying to implement a nacelle yaw controller using measured yaw error(avrSWAP(24)) as indicator,and use Demanded nacelle yaw rate(avrSWAP(48)) to control the angle of yaw. My problem was that the yaw control I had set wasn't stable or even working.Is there a problem with my Settings? What should I do if I want to control the turbine yaw through discon.dll?

image image image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

Can you clarify why you have multiple yaw error signals; is that because you are simulating a three wind turbine farm in FAST.Farm?

Regarding why your yaw controller is not working:

I'm also questioning your yaw control logic because the yaw will constantly toggle between positive and negative motion when the nacelle-yaw error is around 10 degrees. I would think you'd want an integral term and have some deadband around 10 degrees in your yaw controller.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you for the response.I was use three discon.dll to control three turbine,they have distinct OpenFAST primary and distinct ServoDyn input files,but these input files are all the same,I made three copies; I already set YCMode = 5 and TYCOn = 0.0,and I don't kown how to set YawSpr and YawDamp,so i didn't change the number of YawSpr and YawDamp,and Keep it at its original value.Yes, my control logic is faulty, but the error in control is so large that it makes me wonder.

image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

The values of YawSpr and YawDamp you are using are appropriate for the NREL 5-MW baseline wind turbine.

The distinct OpenFAST primary and ServoDyn input files can be identical, except for DLL_FileName in ServoDyn that should point to the specific DLL unique to the turbine, and ServoFile in OpenFAST that should point to the specific ServoDyn input file where the specific DLL_FileName is set. Is that what you've done?

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you for your patient guidance.The following is my setting. I think it is consistent with what you described,am I right?They correspond to their respective numbers.But this is still not enough to stabilize the yaw error around 10° that I want.I really appreciate for your guidance,thank you.

image image image image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

Yes, that looks correct. Can you also share the results of the nacelle-yaw angle (rather than the nacelle-yaw error, which will fluctuate due to wind)? Are the nacelle-yaw angles moving positive and negatively following your yaw-rate commands?

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

These are the results of the nacelle-yaw angle.There is also the yaw rate(YawVzn) of the output of the wind turbine during operation.The yaw rate(YawVzn) of wind turbine is inconsistent with the set yaw rate(avrSWAP(48)).There's also a very strange phenomenon, when the yaw rate(avrSWAP(48)) is positive, the yaw Angle error(avrSWAP(24)) does not change with the yaw rate(avrSWAP(48)) I set, sometimes when I set the yaw rate(avrSWAP(48)) negative, The yaw error(avrSWAP(24)) becomes positive and gets larger over time. I'm curious if the yaw rate(avrSWAP(48)) is set to an absolute value?

Best regards,

image image image image image

image image image

image

image image

image

image image

jjonkman commented 1 year ago

Dear @clun1,

I don't see any absolute value used around the yaw rate commanded from the DLL controller in the source code. I do see the yaw rate command being integrated to find the commanded yaw position.

Both the commanded yaw rate and commanded yaw position (integrated from yaw rate) are passed through a yaw actuator model determined by ServoDyn inputs YawSpr and YawDamp in order to calculate the yaw moment, which actually yaws the nacelle. Given this actuator, I wouldn't expect the actual yaw position and yaw rate to exactly match the commanded value. How well the commanded and actual yaw rates and positions match will depend on the settings of YawSpr and YawDamp.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you for your answer.

  1. If the yaw Angle of the turbine is related to YawSpr and YawDamp, is there a formula to accurately control the yaw Angle, or is there another control method to accurately control the yaw Angle?
  2. In addition, are these parameters avrSWAP(102),avrSWAP(104),avrSWAP(108) available now?

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

Regarding (1), to understand how the nacelle-yaw actuator in OpenFAST works, see the section titled "Nacelle Yaw Control" in the old FAST v6 User's Guide: https://openfast.readthedocs.io/en/main/_downloads/d8bd014121d6505cb25cf49bee5eaa80/Old_FAST6_UsersGuide.pdf.

Regarding (2), I'm not familiar with these avrSWAP parameters and I don't see them used in OpenFAST source code. To reveiw the full set of avrSWAP parameters supported by OpenFAST, I suggest reviewing the BladedDLLInterface.f90 source file: https://github.com/OpenFAST/openfast/blob/main/modules/servodyn/src/BladedInterface.f90.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you for your guidance,it really help me a lot!Thank you again.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

The following is the alarm I encountered when running fast.farm. Is it related to the initial state of the turbine? image image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

You haven't stated what wind speed you are simulating, so, I can't say whether an initial rotor speed (RotSpeed) of 9 rpm is set correctly.

Regardless, I see that you've set NacYaw nonzero in the OpenFAST models of each wind turbine. Is the nacelle-yaw DOF enabled (YawDOF = TRUE)? If so, you must also set YawNeut in ServoDyn equal to NacYaw or else the naccelle will quickly snap back to 0deg and result in unrealistic loads and deflections, as discussed above.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you for your patience,I want to know whether the yaw Angle is relative to the north or the incoming wind direction. If I want to set it to the incoming wind direction, how should I set it?

I want to set the yaw of the turbine to change with the wind direction. Can I cancel the YawNeut so that it does not work?

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

OpenFAST does not make use of compass directions. When the wind direction is zero, the inflow will propagate along the X axis of the global inertia frame. When the nacelle-yaw angle is zero, the rotor axis will also lie along the X axis of the global inertia frame (possibly tilted), and so, be aligned with the zero wind direction. See the following topic on our forum for more details: https://forums.nrel.gov/t/wind-wave-misalignment-in-openfast/2589.

If you are modeling a situation where the wind direction is changing and you want the rotor to actively follow the wind, you must implement active yaw control (with YCMode nonzero in ServoDyn). YawNeut is only used when YCMode = 0 or when YCMode /= 0 up until the time the yaw controller is enabled (time = TYCOn).

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

I have encountered several problems recently, and I do not know how to solve them. I hope you can give me some tips. image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

You haven't provided enough information to isolate the issue, but perhaps the warning about "large blade deflection" is triggering the errors about "outside the grid bounds" (i.e., the blades are deflecting unrealistic large such that the aerodynamic analysis nodes leave the wind domain)? I would guess that your OpenFAST model is numerically unstable. Are you using an OpenFAST / FAST.Farm model provided by NREL or one you made yourself? If you are using a model provided by NREL, what input parameters did you change?

Best regards?

clun1 commented 1 year ago

Dear jjonkman,

Thanks for your reply.I used the fast.farm model provided by NREL.Here is my input.When i use the wind speed.When I use a wind speed of 10m/s, the program works fine, and when I use a wind speed of 16m/s, the above problem occurs. image image image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

When you change the mean wind speed, are you also changing the initial conditions of the rotor speed and blade-pitch angles in each OpenFAST model to their expected (mean) values conditioned on the mean wind speed? Otherwise, the controller may not recover, resulting in an unstable solution. Setting proper initial conditions in OpenFAST has been discussed in many other posts.

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

Thank you, I finally know the reason, but when the simulation runs to 93 seconds, the following problem appears, is it related to the grid setting of the wind farm? image

Best regards,

clun1 commented 1 year ago

Dear jjonkman,

These are graphs of TSR, the complement to the first problem image image

Best regards,

jjonkman commented 1 year ago

Dear @clun1,

I'm not following everything.

The warning you are receiving refers to negative TSR, but the RtTSR values you are plotting do not show such low values. Moreover, you refer to 93 s, but the x-axis of your plots extend to 1000; does the x-axis not have the units of s?

Regarding the "singular" error, ElastoDyn does not consider the inertia of the tower about its centerline. So, if both PtfmYDOF and YawDOF = TRUE, you must have some nonzero PtfmYIner set (e.g., to represent the tower inertia about its centerline), otherwise the yaw inertia about the platform will be zero and ill conditioned, resulting in NaNs or a singularity. This is discussed more in online SubDyn documentation–see: 4.2.5.5. Modeling Considerations — OpenFAST v3.3.0 documentation.

Best regards,