Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug report - AeroDyn HWindSpeed wrong for multiple cases #2608

Closed
BenClaytonARUP opened this issue Jan 16, 2025 · 4 comments
Closed

Bug report - AeroDyn HWindSpeed wrong for multiple cases #2608

BenClaytonARUP opened this issue Jan 16, 2025 · 4 comments

Comments

@BenClaytonARUP
Copy link

Bug description
When running AeroDyn using driver.dvr with AnalysisType=3 with multiple analyses, the first HWindSpeed value in the Combined-Case Analysis table is used for every case.

Image

To Reproduce
Below is the driver.dvr and AeroDyn.dat file used. Too many Airfoil files to provide, but it won't matter what Airfoils and AeroDyn_blade.dat is used.

driver.dvr

----- AeroDyn Driver Input File ---------------------------------------------------------
Time-series   input         - to test extreme event + shutdown
----- Input Configuration ---------------------------------------------------------------
False         Echo          - Echo input parameters to "<rootname>.ech"?
0             MHK           - MHK turbine type (switch) {0: not an MHK turbine, 1: fixed MHK turbine, 2: floating MHK turbine}
3             AnalysisType  - {1: multiple turbines, one simulation, 2: one turbine, one time-dependent simulation, 3: one turbine, combined cases}
180           TMax          - Total run time [used only when AnalysisType=/3] (s)
0.02          DT            - Simulation time step [used only when AnalysisType=/3] (s)
"AeroDyn.dat" AeroFile      - Name of the primary AeroDyn input file
----- Environmental Conditions ----------------------------------------------------------
1.225         FldDens       - Density of working fluid (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 (Pa) [used only for an MHK turbine cavitation check]
1700          Pvap          - Vapour pressure of working fluid (Pa) [used only for an MHK turbine cavitation check]
0             WtrDpth       - Water depth (m)
----- Inflow Data -----------------------------------------------------------------------
0             CompInflow    - Compute inflow wind velocities (switch) {0=Steady Wind; 1=InflowWind}
"unused"      InflowFile    - Name of the InflowWind input file [used only when CompInflow=1]
1.0           HWindSpeed    - Horizontal wind speed [used only when CompInflow=0 and AnalysisType=1] (m/s)
78.99996112558114 RefHt         - Reference height for horizontal wind speed [used only when CompInflow=0] (m)
0.6           PLExp         - Power law exponent [used only when CompInflow=0 and AnalysisType=1] (-)
----- Turbine Data ----------------------------------------------------------------------
1             NumTurbines   - Number of turbines
----- Turbine(1) Geometry----------------------------------------------------------------
True          BasicHAWTFormat(1) - Flag to switch between basic or generic input format {True: next 7 lines are basic inputs, False: Base/Twr/Nac/Hub/Bld geometry and motion must follow}
0, 0, 0       BaseOriginInit(1) - Coordinate of tower base in base coordinates (m)
3             NumBlades(1)  - Number of blades (-)
2.0           HubRad(1)     - Hub radius (m)
78.99996112558114 HubHt(1)      - Hub height (m)
-9.5          Overhang(1)   - Overhang (m)
-3.5          ShftTilt(1)   - Shaft tilt (deg)
-3.0          Precone(1)    - Blade precone (deg)
2.37          Twr2Shft(1)   - Vertical distance from the tower-top to the rotor shaft (m)
----- Turbine(1) Motion [used only when AnalysisType=1] ---------------------------------
0             BaseMotionType(1) - Type of motion prescribed for this base {0: fixed, 1: Sinusoidal motion, 2: arbitrary motion} (flag)
0             DegreeOfFreedom(1) - {1:xt, 2:yt, 3:zt, 4:theta_xt, 5:theta_yt, 6:theta_zt} [used only when BaseMotionType=1] (flag)
0.0           Amplitude(1)  - Amplitude of sinusoidal motion [used only when BaseMotionType=1] (m or rad)
0.0           Frequency(1)  - Frequency of sinusoidal motion [used only when BaseMotionType=1] (Hz)
""            BaseMotionFileName(1) - Filename containing arbitrary base motion (19 columns: Time, x, y, z, theta_x, ..., alpha_z) [used only when BaseMotionType=2]
0.0           NacYaw(1)     - Yaw angle (about z_t) of the nacelle (deg)
0.0           RotSpeed(1)   - Rotational speed of rotor in rotor coordinates (rpm)
0.0           BldPitch(1)   - Blade 1 pitch (deg)
----- Time-dependent Analysis [used only when AnalysisType=2, numTurbines=1] ------------
"ad_TimeseriesInput.csv" TimeAnalysisFileName - Filename containing time series (6 column: Time, HWndSpeed, PLExp, RotSpd, Pitch, Yaw).
----- Combined-Case Analysis [used only when AnalysisType=3, numTurbines=1] -------------
4             NumCases      - Number of cases to run
HWindSpeed       PLExp           RotSpd          Pitch           Yaw             dT              Tmax            DOF             Amplitude       Frequency      
(m/s)           (-)             (rpm)           (deg)           (deg)           (s)             (s)             (-)             (m or rad)      (Hz)           
             8	 1.10000000e-01	 1.2000000e+01	              0	              0	 0.1	         3.5	              0	              0	              0
 1.65000000e+01	 1.40000000e-01	             13	              0	              0	 0.1	         2.5	              0	              0	              0
 1.90000000e+01	 1.50000000e-01	             13	              0	              0	 0.1	         4.5	              0	              0	              0
 2.65000000e+01	 1.60000000e-01	             13	              0	              0	 0.1	         5.5	              0	              0	              0
----- Output Settings -------------------------------------------------------------------
"ES15.8E2"    OutFmt        - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string)
1             OutFileFmt    - Format for tabular (time-marching) output file (switch) {1: text file [<RootName>.out], 2: binary file [<RootName>.outb], 3: both}
0             WrVTK         - VTK visualization data output: (switch) {0=none; 1=init; 2=animation}
1             WrVTK_Type    - VTK visualization data type: (switch) {1=surfaces; 2=lines; 3=both}
2             VTKHubRad     - HubRadius for VTK visualization (m)
-1, -1, -1, 2, 2, 2 VTKNacDim     - Nacelle Dimension for VTK visualization x0,y0,z0,Lx,Ly,Lz (m)

AeroDyn.dat

------- AERODYN INPUT FILE --------------------------------------------------------------------------
NREL          MW            - offshore baseline aerodynamic input properties, with OC3 Monopile tower
======  General Options  ============================================================================
False         Echo          - Echo the input to "<rootname>.AD.ech"? (flag)
"default"     DTAero        - Time interval for aerodynamic calculations {or "default"} (s)
1             Wake_Mod      - Wake/induction model (switch) {0=none, 1=BEMT, 3=OLAF} [Wake_Mod cannot be 2 or 3 when linearizing]
1             TwrPotent     - Type tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction}
1             TwrShadow     - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model}
False         TwrAero       - Calculate tower aerodynamic loads? (flag)
False         CavitCheck    - Perform cavitation check? (flag) [UA_Mod must be 0 when CavitCheck=true]
False         Buoyancy      - Include buoyancy effects? (flag)
False         NacelleDrag   - Include Nacelle Drag effects? (flag)
False         CompAA        - Flag to compute AeroAcoustics calculation [used only when Wake_Mod = 1 or 2]
"unused"      AA_InputFile  - AeroAcoustics input file [used only when CompAA=true]
======  Environmental Conditions  ===================================================================
1.225         AirDens       - Air density (kg/m^3)
1.47755e-05   KinVisc       - Kinematic viscosity of working fluid (m^2/s)
340.0         SpdSound      - Speed of sound in working fluid (m/s)
103500.0      Patm          - Atmospheric pressure (Pa) [used only when CavitCheck=True]
1700.0        Pvap          - Vapour pressure of working fluid (Pa) [used only when CavitCheck=True]
======  Blade-Element/Momentum Theory Options  ====================================================== [unused when Wake_Mod=0 or 3, except for BEM_Mod]
1             BEM_Mod       - BEM model {1=legacy NoSweepPitchTwist, 2=polar} (switch) [used for all Wake_Mod to determine output coordinate system]
--- Skew correction
1             Skew_Mod      - Skew model {0=No skew model, -1=Remove non-normal component for linearization, 1=skew model active}
False         SkewMomCorr   - Turn the skew momentum correction on or off [used only when Skew_Mod=1]
default       SkewRedistr_Mod - Type of skewed-wake correction model (switch) {0=no redistribution, 1=Glauert/Pitt/Peters, default=1} [used only when Skew_Mod=1]
"default"     SkewRedistrFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when Skew_Mod=1 and SkewRedistr_Mod=1]
--- BEM algorithm 
True          TipLoss       - Use the Prandtl tip-loss model? (flag) [unused when Wake_Mod=0 or 3]
True          HubLoss       - Use the Prandtl hub-loss model? (flag) [unused when Wake_Mod=0 or 3]
True          TanInd        - Include tangential induction in BEMT calculations? (flag) [unused when Wake_Mod=0 or 3]
True          AIDrag        - Include the drag term in the axial-induction calculation? (flag) [unused when Wake_Mod=0 or 3]
True          TIDrag        - Include the drag term in the tangential-induction calculation? (flag) [unused when Wake_Mod=0,3 or TanInd=FALSE]
Default       IndToler      - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when Wake_Mod=0 or 3]
500           MaxIter       - Maximum number of iteration steps (-) [unused when Wake_Mod=0]
--- Shear correction
False         SectAvg       - Use sector averaging (flag)
1             SectAvgWeighting - Weighting function for sector average {1=Uniform, default=1} within a sector centered on the blade (switch) [used only when SectAvg=True]
default       SectAvgNPoints - Number of points per sectors (-) {default=5} [used only when SectAvg=True]
default       SectAvgPsiBwd - Backward azimuth relative to blade where the sector starts (<=0) {default=-60} (deg) [used only when SectAvg=True]
default       SectAvgPsiFwd - Forward azimuth relative to blade where the sector ends (>=0) {default=60} (deg) [used only when SectAvg=True]
--- Dynamic wake/inflow
2             DBEMT_Mod     - Type of dynamic BEMT (DBEMT) model {0=No Dynamic Wake, -1=Frozen Wake for linearization, 1:constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-)
15.578        tau1_const    - Time constant for DBEMT (s) [used only when DBEMT_Mod=1 or 3]
======  OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options  ================== [used only when Wake_Mod=3]
"unused"      OLAFInputFileName - Input file for OLAF [used only when Wake_Mod=3]
======  Unsteady Airfoil Aerodynamics Options  ====================================================
True          AoA34         - Sample the angle of attack (AoA) at the 3/4 chord or the AC point {default=True} [always used]
3             UA_Mod        - Unsteady Aero Model Switch (switch) {0=Quasi-steady (no UA), 2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L HGM+vortex 5 states, 6=Oye, 7=Boeing-Vertol}
True          FLookup       - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when UA_Mod>0]
3             IntegrationMethod - Switch to indicate which integration method UA uses (1=RK4, 2=AB4, 3=ABM4, 4=BDF2)
0.15          UAStartRad    - Starting radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when UA_Mod>0; if line is missing UAStartRad=0]
1             UAEndRad      - Ending radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when UA_Mod>0; if line is missing UAEndRad=1]
======  Airfoil Information =========================================================================
1             AFTabMod      - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-)
1             InCol_Alfa    - The column in the airfoil tables that contains the angle of attack (-)
2             InCol_Cl      - The column in the airfoil tables that contains the lift coefficient (-)
3             InCol_Cd      - The column in the airfoil tables that contains the drag coefficient (-)
4             InCol_Cm      - The column in the airfoil tables that contains the pitching-moment coefficient; use zero if there is no Cm column (-)
0             InCol_Cpmin   - The column in the airfoil tables that contains the Cpmin coefficient; use zero if there is no Cpmin column (-)
30            NumAFfiles    - Number of airfoil files used (-)
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_00.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings)
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_01.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_02.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_03.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_04.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_05.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_06.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_07.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_08.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_09.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_10.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_11.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_12.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_13.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_14.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_15.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_16.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_17.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_18.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_19.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_20.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_21.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_22.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_23.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_24.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_25.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_26.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_27.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_28.dat"
"Airfoils/IEA-3.4-130-RWT_AeroDyn15_Polar_29.dat"
======  Rotor/Blade Properties  =====================================================================
True          UseBlCm       - Include aerodynamic pitching moment in calculations? (flag)
"AeroDyn_blade.dat" ADBlFile(1)   - Name of file containing distributed aerodynamic properties for Blade #1 (-)
"AeroDyn_blade.dat" ADBlFile(2)   - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]
"AeroDyn_blade.dat" ADBlFile(3)   - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]
======  Hub Properties ============================================================================== [used only when Buoyancy=True]
0             VolHub        - Hub volume (m^3)
0             HubCenBx      - Hub center of buoyancy x direction offset (m)
======  Nacelle Properties ========================================================================== [used only when Buoyancy=True or NacelleDrag=True]
0             VolNac        - Nacelle volume (m^3)
0.0, 0.0, 0.0 NacCenB       - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m)
0, 0, 0       NacArea       - Projected area of the nacelle in X, Y, Z in the nacelle coordinate system (m^2)
0, 0, 0       NacCd         - Drag coefficient for the nacelle areas defined above (-)
0, 0, 0       NacDragAC     - Position of aerodynamic center of nacelle drag in nacelle coordinates (m)
======  Tail Fin Aerodynamics =======================================================================
False         TFinAero      - Calculate tail fin aerodynamics model (flag)
"unused"      TFinFile      - Input file for tail fin aerodynamics [used only when TFinAero=True]
======  Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]
25            NumTwrNds     - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True]
TwrElev         TwrDiam         TwrCd           TwrTI           TwrCb          
(m)             (m)             (-)             (-)             (-)            
             10	              5	 7.00000000e-01	 1.00000000e-01	              0
 1.30750000e+01	              5	 7.00000000e-01	 1.00000000e-01	              0
 1.49800000e+01	 5.02300000e+00	 7.00000000e-01	 1.00000000e-01	              0
 1.78850000e+01	 5.00800000e+00	 7.00000000e-01	 1.00000000e-01	              0
 2.08550000e+01	 5.00300000e+00	 7.00000000e-01	 1.00000000e-01	              0
 2.26900000e+01	              5	 7.00000000e-01	 1.00000000e-01	              0
 2.55950000e+01	              5	 7.00000000e-01	 1.00000000e-01	              0
 2.85650000e+01	 5.00900000e+00	 7.00000000e-01	 1.00000000e-01	              0
 3.15350000e+01	 5.00600000e+00	 7.00000000e-01	 1.00000000e-01	              0
 3.45050000e+01	 5.00400000e+00	 7.00000000e-01	 1.00000000e-01	              0
 3.74750000e+01	 5.00200000e+00	 7.00000000e-01	 1.00000000e-01	              0
 4.01850000e+01	              5	 7.00000000e-01	 1.00000000e-01	              0
 4.28250000e+01	              5	 7.00000000e-01	 1.00000000e-01	              0
 4.54750000e+01	 4.84900000e+00	 7.00000000e-01	 1.00000000e-01	              0
 4.81350000e+01	 4.70400000e+00	 7.00000000e-01	 1.00000000e-01	              0
 5.08050000e+01	 4.55800000e+00	 7.00000000e-01	 1.00000000e-01	              0
 5.34850000e+01	 4.41100000e+00	 7.00000000e-01	 1.00000000e-01	              0
 5.61750000e+01	 4.26400000e+00	 7.00000000e-01	 1.00000000e-01	              0
 5.88750000e+01	 4.11600000e+00	 7.00000000e-01	 1.00000000e-01	              0
 6.15850000e+01	 3.96800000e+00	 7.00000000e-01	 1.00000000e-01	              0
 6.43050000e+01	 3.82000000e+00	 7.00000000e-01	 1.00000000e-01	              0
 6.70350000e+01	 3.67000000e+00	 7.00000000e-01	 1.00000000e-01	              0
 6.97750000e+01	 3.52000000e+00	 7.00000000e-01	 1.00000000e-01	              0
 7.25250000e+01	 3.37000000e+00	 7.00000000e-01	 1.00000000e-01	              0
 7.60500000e+01	 3.22600000e+00	 7.00000000e-01	 1.00000000e-01	              0
======  Outputs  ====================================================================================
False          SumPrint      - Generate a summary file listing input options and interpolated properties to "<rootname>.AD.sum"? (flag)
0             NBlOuts       - Number of blade node outputs [0 - 9] (-)
2, 9, 16, 4, 5, 7, 11, 13, 14 BlOutNd       - Blade nodes whose values will be output (-)
0             NTwOuts       - Number of tower node outputs [0 - 9] (-)
1, 2, 3, 4, 5 TwOutNd       - Tower nodes whose values will be output (-)
 OutList The next line(s) contains a list of output parameters.  See OutListParameters.xlsx for a listing of available output channels, (-)
"RtAeroCp, RtAeroCq, RtAeroCt"
END
---------------------- NODE OUTPUTS --------------------------------------------
1             BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-)
ALL           BldNd_BlOutNd - Specify a portion of the nodes to output. {"ALL", "Tip", "Root", or a list of node numbers} (-)
 OutList_Nodal The next line(s) contains a list of output parameters.  See OutListParameters.xlsx for a listing of available output channels, (-)

END
---------------------------------------------------------------------------------------

Steps to reproduce the behavior:

Run the above files with AeroDyn_Driver_x64.exe from the OpenFAST 4.0.0 build.
Look at the HWindSpeedX output, which is the same for all 4 cases and matches the wind speed of the first case.

Screenshots, if applicable

I am not familiar with fortran or the OpenFAST src code, but maybe it is due to the CurLine not being iterated on in the below snip?

Image

OpenFAST Version
OpenFAST 4.0.0 release

**************************************************************************************************
AeroDyn_driver

Copyright (C) 2025 National Renewable Energy Laboratory
Copyright (C) 2025 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.
**************************************************************************************************

AeroDyn_driver-v4.0.0
Compile Info:
 - Compiler: Intel(R) Fortran Compiler 2021
 - Architecture: 64 bit
 - Precision: single
 - OpenMP: No
 - Date: Jan 03 2025
 - Time: 18:16:06
Execution Info:
 - Date: 01/16/2025
 - Time: 12:02:51-0000
@andrew-platt andrew-platt added this to the v4.0.1 milestone Jan 16, 2025
@andrew-platt andrew-platt self-assigned this Jan 16, 2025
@andrew-platt
Copy link
Collaborator

Thanks @BenClaytonARUP for your very detailed report! I will take a look at this. With your documentation, this should be relatively easy to find.

I suspect the issue is someplace where the dvr%Cases(iCase)%HWindSpeed is used. Most likely the wind is not getting reinitialized correctly for each run.

Thanks!

@andrew-platt
Copy link
Collaborator

@BenClaytonARUP, this is a fantastic bug report!

I can reproduce this issue using your test case.

@andrew-platt
Copy link
Collaborator

This should be fixed in #2609, and will be included in the upcoming 4.0.1 release

@BenClaytonARUP
Copy link
Author

Amazing, thanks @andrew-platt for sorting so quickly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants