From eb71d3d76ee175509fbb5fa51d8cda20c0e7ed21 Mon Sep 17 00:00:00 2001 From: pibo Date: Tue, 26 Jan 2021 20:25:11 -0700 Subject: [PATCH] update scripts to support new aerodyn api --- .../BAR_00/OpenFAST_BAR_00_AeroDyn15.dat | 72 +++++++++--------- .../IEA-15-240-RWT_AeroDyn15.dat | 76 +++++++++---------- .../IEA-15-240-RWT_AeroDyn15.dat | 76 +++++++++---------- .../IEA-3.4-130-RWT_AeroDyn15.dat | 76 +++++++++---------- examples/01_aeroelasticse/run_DLC.py | 2 +- examples/01_aeroelasticse/run_PC_sweep.py | 2 +- examples/01_aeroelasticse/run_mass_sweep.py | 2 +- weis/aeroelasticse/FAST_reader.py | 4 +- weis/aeroelasticse/FAST_writer.py | 48 ++++++------ weis/aeroelasticse/openmdao_openfast.py | 1 + weis/inputs/modeling_schema.yaml | 13 +++- 11 files changed, 191 insertions(+), 181 deletions(-) diff --git a/examples/01_aeroelasticse/OpenFAST_models/BAR_00/OpenFAST_BAR_00_AeroDyn15.dat b/examples/01_aeroelasticse/OpenFAST_models/BAR_00/OpenFAST_BAR_00_AeroDyn15.dat index a82ee684c..2c121e2d8 100644 --- a/examples/01_aeroelasticse/OpenFAST_models/BAR_00/OpenFAST_BAR_00_AeroDyn15.dat +++ b/examples/01_aeroelasticse/OpenFAST_models/BAR_00/OpenFAST_BAR_00_AeroDyn15.dat @@ -1,17 +1,17 @@ ------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ Generated with AeroElasticSE FAST driver ====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) -1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} -2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [must be 1 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} -True TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) TRUE will turn off unsteady aerodynamics -False CompAA Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] -"AeroAcousticsInput.dat" AA_InputFile - Aeroacoustics input file +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) +1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] +2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 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} +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"AeroAcousticsInput.dat" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] ====== Environmental Conditions =================================================================== 1.225000000000000e+00 AirDens - Air density (kg/m^3) 1.477551020408163e-05 KinVisc - Kinematic air viscosity (m^2/s) @@ -20,23 +20,23 @@ False CompAA Flag to compute AeroAcoustics calculation [on 1.700000000000000e+03 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] 5.000000000000000e-01 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] ====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] -2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -True TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -True AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] -100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] +100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] ====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] 1 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] 20 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] ====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] "unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] ====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] -3 UAMod Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -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 AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +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 AFAeroMod=2] ====== 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 (-) @@ -80,20 +80,20 @@ True UseBlCm - Include aerodynamic pitching moment in calc "OpenFAST_BAR_00_AeroDyn15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) "OpenFAST_BAR_00_AeroDyn15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] "OpenFAST_BAR_00_AeroDyn15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -9 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) - 2.740000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 - 4.110000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 - 5.480000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 - 6.850000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 - 8.220000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 - 9.590000000000001e+01 6.000000000000000e+00 1.000000000000000e+00 - 1.096000000000000e+02 6.000000000000000e+00 1.000000000000000e+00 - 1.233000000000000e+02 5.890792130000000e+00 1.000000000000000e+00 - 1.370000000000000e+02 5.530325920000000e+00 1.000000000000000e+00 -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +9 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) +(m) (m) (-) (-) + 2.740000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 4.110000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 5.480000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 6.850000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 8.220000000000000e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 9.590000000000001e+01 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 1.096000000000000e+02 6.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 1.233000000000000e+02 5.890792130000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 1.370000000000000e+02 5.530325920000000e+00 1.000000000000000e+00 1.000000000000000e-01 +====== Outputs ==================================================================================== True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) 9 NBlOuts - Number of blade node outputs [0 - 9] (-) 4, 7, 10, 13, 16, 18, 21, 24, 27 BlOutNd - Blade nodes whose values will be output (-) diff --git a/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-OLAF/IEA-15-240-RWT_AeroDyn15.dat b/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-OLAF/IEA-15-240-RWT_AeroDyn15.dat index b6d69ca18..f2974025a 100644 --- a/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-OLAF/IEA-15-240-RWT_AeroDyn15.dat +++ b/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT-OLAF/IEA-15-240-RWT_AeroDyn15.dat @@ -1,17 +1,17 @@ ------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ IEA 15 MW Offshore Reference Turbine ====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) -3 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} -1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [must be 1 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} -False TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) TRUE will turn off unsteady aerodynamics -False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] -"AeroAcousticsInput.dat" AA_InputFile - Aeroacoustics input file +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) +3 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] +1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 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} +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"AeroAcousticsInput.dat" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] ====== Environmental Conditions =================================================================== 1.225000000000000e+00 AirDens - Air density (kg/m^3) 1.479232653061225e-05 KinVisc - Kinematic air viscosity (m^2/s) @@ -20,23 +20,23 @@ False CompAA - Flag to compute AeroAcoustics calculation [ 1.700000000000000e+03 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] 5.000000000000000e-01 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] ====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] -2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -True TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -True AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] -500 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] +500 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] ====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] 2 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] ====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] ../IEA-15-240-RWT-OLAF/IEA-15-240-RWT_OLAF.dat OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] ====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] -3 UAMod Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -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 AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +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 AFAeroMod=2] ====== 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 (-) @@ -100,22 +100,22 @@ True UseBlCm - Include aerodynamic pitching moment in calc "../IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) "../IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] "../IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) - 15. 10. 1. - 28. 10. 1. - 41. 9.926 1. - 54. 9.443 1. - 67. 8.833 1. - 80. 8.151 1. - 93. 7.39 1. - 106. 6.909 1. - 119. 6.748 1. - 132. 6.572 1. - 144.495 6.5 1. -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) +(m) (m) (-) (-) + 15. 10. 1. 0.1 + 28. 10. 1. 0.1 + 41. 9.926 1. 0.1 + 54. 9.443 1. 0.1 + 67. 8.833 1. 0.1 + 80. 8.151 1. 0.1 + 93. 7.39 1. 0.1 + 106. 6.909 1. 0.1 + 119. 6.748 1. 0.1 + 132. 6.572 1. 0.1 + 144.495 6.5 1. 0.1 +====== Outputs ==================================================================================== True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) 9 NBlOuts - Number of blade node outputs [0 - 9] (-) 1, 6, 11, 20, 30, 38, 43, 47, 50 BlOutNd - Blade nodes whose values will be output (-) diff --git a/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15.dat b/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15.dat index 487bf6a45..649217267 100644 --- a/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15.dat +++ b/examples/01_aeroelasticse/OpenFAST_models/IEA-15-240-RWT/IEA-15-240-RWT/IEA-15-240-RWT_AeroDyn15.dat @@ -1,17 +1,17 @@ ------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ IEA 15 MW Offshore Reference Turbine ====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) -1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} -2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [must be 1 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} -False TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) TRUE will turn off unsteady aerodynamics -False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] -"AeroAcousticsInput.dat" AA_InputFile - Aeroacoustics input file +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) +1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] +2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 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} +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"AeroAcousticsInput.dat" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] ====== Environmental Conditions =================================================================== 1.225000000000000e+00 AirDens - Air density (kg/m^3) 1.479232653061225e-05 KinVisc - Kinematic air viscosity (m^2/s) @@ -20,23 +20,23 @@ False CompAA - Flag to compute AeroAcoustics calculation [ 1.700000000000000e+03 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] 5.000000000000000e-01 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] ====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] -2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -True TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -True AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] -500 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +True AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +True TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] +500 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] ====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] 2 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] ====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] "unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] ====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] -3 UAMod Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -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 AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +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 AFAeroMod=2] ====== 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 (-) @@ -100,22 +100,22 @@ True UseBlCm - Include aerodynamic pitching moment in calc "IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) "IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] "IEA-15-240-RWT_AeroDyn15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) - 15. 10. 1. - 28. 10. 1. - 41. 9.926 1. - 54. 9.443 1. - 67. 8.833 1. - 80. 8.151 1. - 93. 7.39 1. - 106. 6.909 1. - 119. 6.748 1. - 132. 6.572 1. - 144.495 6.5 1. -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) +(m) (m) (-) (-) + 15. 10. 1. 0.1 + 28. 10. 1. 0.1 + 41. 9.926 1. 0.1 + 54. 9.443 1. 0.1 + 67. 8.833 1. 0.1 + 80. 8.151 1. 0.1 + 93. 7.39 1. 0.1 + 106. 6.909 1. 0.1 + 119. 6.748 1. 0.1 + 132. 6.572 1. 0.1 + 144.495 6.5 1. 0.1 +====== Outputs ==================================================================================== True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) 9 NBlOuts - Number of blade node outputs [0 - 9] (-) 1, 6, 11, 20, 30, 38, 43, 47, 50 BlOutNd - Blade nodes whose values will be output (-) diff --git a/examples/01_aeroelasticse/OpenFAST_models/IEA-3.4-130-RWT/IEA-3.4-130-RWT_AeroDyn15.dat b/examples/01_aeroelasticse/OpenFAST_models/IEA-3.4-130-RWT/IEA-3.4-130-RWT_AeroDyn15.dat index 13ecd850e..5acd3b699 100644 --- a/examples/01_aeroelasticse/OpenFAST_models/IEA-3.4-130-RWT/IEA-3.4-130-RWT_AeroDyn15.dat +++ b/examples/01_aeroelasticse/OpenFAST_models/IEA-3.4-130-RWT/IEA-3.4-130-RWT_AeroDyn15.dat @@ -1,17 +1,17 @@ ------- AERODYN v15.03.* INPUT FILE ------------------------------------------------ Generated with AeroElasticSE FAST driver ====== General Options ============================================================================ -False Echo - Echo the input to ".AD.ech"? (flag) -"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) -1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT} -2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [must be 1 when linearizing] -0 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} -True TwrShadow - Calculate tower influence on wind based on downstream tower shadow? (flag) -True TwrAero - Calculate tower aerodynamic loads? (flag) -False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] -False CavitCheck - Perform cavitation check? (flag) TRUE will turn off unsteady aerodynamics -False CompAA - Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2] -"AeroAcousticsInput.dat" AA_InputFile - Aeroacoustics input file +False Echo - Echo the input to ".AD.ech"? (flag) +"default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) +1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] +2 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] +0 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} +True TwrAero - Calculate tower aerodynamic loads? (flag) +False FrozenWake - Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing] +False CavitCheck - Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true] +False CompAA - Flag to compute AeroAcoustics calculation [used only when WakeMod = 1 or 2] +"AeroAcousticsInput.dat" AA_InputFile - AeroAcoustics input file [used only when CompAA=true] ====== Environmental Conditions =================================================================== 1.225000000000000e+00 AirDens - Air density (kg/m^3) 1.477551020408163e-05 KinVisc - Kinematic air viscosity (m^2/s) @@ -20,23 +20,23 @@ False CompAA - Flag to compute AeroAcoustics calculation [ 1.700000000000000e+03 Pvap - Vapour pressure of fluid (Pa) [used only when CavitCheck=True] 5.000000000000000e-01 FluidDepth - Water depth above mid-hub height (m) [used only when CavitCheck=True] ====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] -2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1] -"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0] -True TipLoss - Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1] -True HubLoss - Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1] -True TanInd - Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1] -False AIDrag - Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1] -False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE] -"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1] -100 MaxIter - Maximum number of iteration steps (-) [used only when WakeMod=1] +2 SkewMod - Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3] +"default" SkewModFactor - Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3] +True TipLoss - Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3] +True HubLoss - Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3] +True TanInd - Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3] +False TIDrag - Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE] +"Default" IndToler - Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3] +100 MaxIter - Maximum number of iteration steps (-) [unused when WakeMod=0] ====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1] 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2] 2 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1] ====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] "unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] ====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] -3 UAMod Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] -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 AFAeroMod=2] +3 UAMod - Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2] +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 AFAeroMod=2] ====== 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 (-) @@ -80,22 +80,22 @@ True UseBlCm - Include aerodynamic pitching moment in calc "IEA-3.4-130-RWT_AeroDyn15_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) "IEA-3.4-130-RWT_AeroDyn15_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] "IEA-3.4-130-RWT_AeroDyn15_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] -TwrElev TwrDiam TwrCd -(m) (m) (-) - 0.000000000000000e+00 5.990000000000000e+00 1.000000000000000e+00 - 1.080000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 - 2.161000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 - 3.241000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 - 4.322000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 - 5.402000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 - 6.481999999999999e+01 5.850000000000000e+00 1.000000000000000e+00 - 7.563000000000000e+01 5.120000000000000e+00 1.000000000000000e+00 - 8.643000000000001e+01 4.360000000000000e+00 1.000000000000000e+00 - 9.723000000000000e+01 3.610000000000000e+00 1.000000000000000e+00 - 1.080000000000000e+02 3.000000000000000e+00 1.000000000000000e+00 -====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True] +====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +11 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True] +TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) +(m) (m) (-) (-) + 0.000000000000000e+00 5.990000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 1.080000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 2.161000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 3.241000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 4.322000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 5.402000000000000e+01 5.930000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 6.481999999999999e+01 5.850000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 7.563000000000000e+01 5.120000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 8.643000000000001e+01 4.360000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 9.723000000000000e+01 3.610000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 + 1.080000000000000e+02 3.000000000000000e+00 1.000000000000000e+00 1.000000000000000e-01 +====== Outputs ==================================================================================== True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) 9 NBlOuts - Number of blade node outputs [0 - 9] (-) 1, 4, 7, 13, 18, 23, 26, 28, 30 BlOutNd - Blade nodes whose values will be output (-) diff --git a/examples/01_aeroelasticse/run_DLC.py b/examples/01_aeroelasticse/run_DLC.py index e2aa1b89d..ad0f8007f 100644 --- a/examples/01_aeroelasticse/run_DLC.py +++ b/examples/01_aeroelasticse/run_DLC.py @@ -152,7 +152,7 @@ case_inputs[("ServoDyn","DLL_FileName")] = {'vals':[path2dll], 'group':0} case_inputs[("AeroDyn15","TwrAero")] = {'vals':["True"], 'group':0} case_inputs[("AeroDyn15","TwrPotent")] = {'vals':[1], 'group':0} -case_inputs[("AeroDyn15","TwrShadow")] = {'vals':["True"], 'group':0} +case_inputs[("AeroDyn15","TwrShadow")] = {'vals':[1], 'group':0} case_inputs[("HydroDyn","WaveMod")] = {'vals':[2], 'group':0} case_inputs[("HydroDyn","WvDiffQTF")] = {'vals':["False"], 'group':0} channels = {} diff --git a/examples/01_aeroelasticse/run_PC_sweep.py b/examples/01_aeroelasticse/run_PC_sweep.py index 92afef56f..701b3fa46 100644 --- a/examples/01_aeroelasticse/run_PC_sweep.py +++ b/examples/01_aeroelasticse/run_PC_sweep.py @@ -127,7 +127,7 @@ def run_PC_sweep(omega,zeta=1.0): case_inputs[("ServoDyn","DLL_FileName")] = {'vals':[path2dll], 'group':0} case_inputs[("AeroDyn15","TwrAero")] = {'vals':["True"], 'group':0} case_inputs[("AeroDyn15","TwrPotent")] = {'vals':[1], 'group':0} - case_inputs[("AeroDyn15","TwrShadow")] = {'vals':["True"], 'group':0} + case_inputs[("AeroDyn15","TwrShadow")] = {'vals':[1], 'group':0} case_inputs[("HydroDyn","WaveMod")] = {'vals':[2], 'group':0} case_inputs[("HydroDyn","WvDiffQTF")] = {'vals':["False"], 'group':0} channels = {} diff --git a/examples/01_aeroelasticse/run_mass_sweep.py b/examples/01_aeroelasticse/run_mass_sweep.py index 7dcaa9f15..96ed7a7fe 100644 --- a/examples/01_aeroelasticse/run_mass_sweep.py +++ b/examples/01_aeroelasticse/run_mass_sweep.py @@ -163,7 +163,7 @@ def run_mass_sweep(): case_inputs[("ServoDyn","DLL_FileName")] = {'vals':[path2dll], 'group':0} case_inputs[("AeroDyn15","TwrAero")] = {'vals':["True"], 'group':0} case_inputs[("AeroDyn15","TwrPotent")] = {'vals':[1], 'group':0} - case_inputs[("AeroDyn15","TwrShadow")] = {'vals':["True"], 'group':0} + case_inputs[("AeroDyn15","TwrShadow")] = {'vals':[1], 'group':0} case_inputs[("HydroDyn","WaveMod")] = {'vals':[2], 'group':0} case_inputs[("HydroDyn","WvDiffQTF")] = {'vals':["False"], 'group':0} channels = {} diff --git a/weis/aeroelasticse/FAST_reader.py b/weis/aeroelasticse/FAST_reader.py index d59dbc996..f10174b82 100644 --- a/weis/aeroelasticse/FAST_reader.py +++ b/weis/aeroelasticse/FAST_reader.py @@ -1021,7 +1021,7 @@ def read_AeroDyn15(self): self.fst_vt['AeroDyn15']['WakeMod'] = int(f.readline().split()[0]) self.fst_vt['AeroDyn15']['AFAeroMod'] = int(f.readline().split()[0]) self.fst_vt['AeroDyn15']['TwrPotent'] = int(f.readline().split()[0]) - self.fst_vt['AeroDyn15']['TwrShadow'] = bool_read(f.readline().split()[0]) + self.fst_vt['AeroDyn15']['TwrShadow'] = int(f.readline().split()[0]) self.fst_vt['AeroDyn15']['TwrAero'] = bool_read(f.readline().split()[0]) self.fst_vt['AeroDyn15']['FrozenWake'] = bool_read(f.readline().split()[0]) if self.FAST_ver.lower() != 'fast8': @@ -1095,11 +1095,13 @@ def read_AeroDyn15(self): self.fst_vt['AeroDyn15']['TwrElev'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] self.fst_vt['AeroDyn15']['TwrDiam'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] self.fst_vt['AeroDyn15']['TwrCd'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] + self.fst_vt['AeroDyn15']['TwrTI'] = [None]*self.fst_vt['AeroDyn15']['NumTwrNds'] for i in range(self.fst_vt['AeroDyn15']['NumTwrNds']): data = [float(val) for val in f.readline().split()] self.fst_vt['AeroDyn15']['TwrElev'][i] = data[0] self.fst_vt['AeroDyn15']['TwrDiam'][i] = data[1] self.fst_vt['AeroDyn15']['TwrCd'][i] = data[2] + self.fst_vt['AeroDyn15']['TwrTI'][i] = data[3] # Outputs f.readline() diff --git a/weis/aeroelasticse/FAST_writer.py b/weis/aeroelasticse/FAST_writer.py index 40870b381..1f759f1c5 100644 --- a/weis/aeroelasticse/FAST_writer.py +++ b/weis/aeroelasticse/FAST_writer.py @@ -890,16 +890,16 @@ def write_AeroDyn15(self): f.write('====== General Options ============================================================================\n') f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Echo'], 'Echo', '- Echo the input to ".AD.ech"? (flag)\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['DTAero'], 'DTAero', '- Time interval for aerodynamic calculations {or "default"} (s)\n')) - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['WakeMod'], 'WakeMod', '- Type of wake/induction model (switch) {0=none, 1=BEMT}\n')) - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AFAeroMod'], 'AFAeroMod', '- Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [must be 1 when linearizing]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['WakeMod'], 'WakeMod', '- Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AFAeroMod'], 'AFAeroMod', '- Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing]\n')) f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrPotent'], '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}\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrShadow'], 'TwrShadow', '- Calculate tower influence on wind based on downstream tower shadow? (flag)\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrShadow'], 'TwrShadow', '- Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model}\n')) f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TwrAero'], 'TwrAero', '- Calculate tower aerodynamic loads? (flag)\n')) f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FrozenWake'], 'FrozenWake', '- Assume frozen wake during linearization? (flag) [used only when WakeMod=1 and when linearizing]\n')) if self.FAST_ver.lower() != 'fast8': - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CavitCheck'], 'CavitCheck', '- Perform cavitation check? (flag) TRUE will turn off unsteady aerodynamics\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CompAA'], 'CompAA', 'Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AA_InputFile'], 'AA_InputFile', '- Aeroacoustics input file\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CavitCheck'], 'CavitCheck', '- Perform cavitation check? (flag) [AFAeroMod must be 1 when CavitCheck=true]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['CompAA'], 'CompAA', '- Flag to compute AeroAcoustics calculation [only used when WakeMod=1 or 2]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AA_InputFile'], 'AA_InputFile', '- AeroAcoustics input file [used only when CompAA=true]\n')) f.write('====== Environmental Conditions ===================================================================\n') f.write('{: 2.15e} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AirDens'], 'AirDens', '- Air density (kg/m^3)\n')) @@ -910,15 +910,15 @@ def write_AeroDyn15(self): f.write('{: 2.15e} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['Pvap'], 'Pvap', '- Vapour pressure of fluid (Pa) [used only when CavitCheck=True]\n')) f.write('{: 2.15e} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FluidDepth'], 'FluidDepth', '- Water depth above mid-hub height (m) [used only when CavitCheck=True]\n')) f.write('====== Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1]\n') - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewMod'], 'SkewMod', '- Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [used only when WakeMod=1]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewModFactor'], 'SkewModFactor', '- Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TipLoss'], 'TipLoss', '- Use the Prandtl tip-loss model? (flag) [used only when WakeMod=1]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['HubLoss'], 'HubLoss', '- Use the Prandtl hub-loss model? (flag) [used only when WakeMod=1]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TanInd'], 'TanInd', '- Include tangential induction in BEMT calculations? (flag) [used only when WakeMod=1]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AIDrag'], 'AIDrag', '- Include the drag term in the axial-induction calculation? (flag) [used only when WakeMod=1]\n')) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TIDrag'], 'TIDrag', '- Include the drag term in the tangential-induction calculation? (flag) [used only when WakeMod=1 and TanInd=TRUE]\n')) - f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['IndToler'], 'IndToler', '- Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [used only when WakeMod=1]\n')) - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['MaxIter'], 'MaxIter', '- Maximum number of iteration steps (-) [used only when WakeMod=1]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewMod'], 'SkewMod', '- Type of skewed-wake correction model (switch) {1=uncoupled, 2=Pitt/Peters, 3=coupled} [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SkewModFactor'], 'SkewModFactor', '- Constant used in Pitt/Peters skewed wake model {or "default" is 15/32*pi} (-) [used only when SkewMod=2; unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TipLoss'], 'TipLoss', '- Use the Prandtl tip-loss model? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['HubLoss'], 'HubLoss', '- Use the Prandtl hub-loss model? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TanInd'], 'TanInd', '- Include tangential induction in BEMT calculations? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AIDrag'], 'AIDrag', '- Include the drag term in the axial-induction calculation? (flag) [unused when WakeMod=0 or 3]\n')) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['TIDrag'], 'TIDrag', '- Include the drag term in the tangential-induction calculation? (flag) [unused when WakeMod=0,3 or TanInd=FALSE]\n')) + f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['IndToler'], 'IndToler', '- Convergence tolerance for BEMT nonlinear solve residual equation {or "default"} (-) [unused when WakeMod=0 or 3]\n')) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['MaxIter'], 'MaxIter', '- Maximum number of iteration steps (-) [unused when WakeMod=0]\n')) f.write('====== Dynamic Blade-Element/Momentum Theory Options ====================================================== [used only when WakeMod=1]\n') f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['DBEMT_Mod'], 'DBEMT_Mod', '- Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1} (-) [used only when WakeMod=2]\n')) f.write('{:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['tau1_const'], 'tau1_const', '- Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1]\n')) @@ -926,8 +926,8 @@ def write_AeroDyn15(self): olaf_file = self.FAST_namingOut + '_OLAF.dat' f.write('{!s:<22} {:<11} {:}'.format(olaf_file, 'OLAFInputFileName', '- Input file for OLAF [used only when WakeMod=3]\n')) f.write('====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2]\n') - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['UAMod'], 'UAMod', "Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minemma/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2]\n")) - f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FLookup'], '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 AFAeroMod=2]\n")) + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['UAMod'], 'UAMod', "- Unsteady Aero Model Switch (switch) {1=Baseline model (Original), 2=Gonzalez's variant (changes in Cn,Cc,Cm), 3=Minnema/Pierce variant (changes in Cc and Cm)} [used only when AFAeroMod=2]\n")) + f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['FLookup'], '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 AFAeroMod=2]\n")) f.write('====== Airfoil Information =========================================================================\n') f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['AFTabMod'], '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} (-)\n')) f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['InCol_Alfa'], 'InCol_Alfa', '- The column in the airfoil tables that contains the angle of attack (-)\n')) @@ -946,13 +946,13 @@ def write_AeroDyn15(self): f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile1']+'"', 'ADBlFile(1)', '- Name of file containing distributed aerodynamic properties for Blade #1 (-)\n')) f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile2']+'"', 'ADBlFile(2)', '- Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2]\n')) f.write('{:<22} {:<11} {:}'.format('"'+self.fst_vt['AeroDyn15']['ADBlFile3']+'"', 'ADBlFile(3)', '- Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3]\n')) - f.write('====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]\n') - f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NumTwrNds'], 'NumTwrNds', '- Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]\n')) - f.write('TwrElev TwrDiam TwrCd\n') - f.write('(m) (m) (-)\n') - for TwrElev, TwrDiam, TwrCd in zip(self.fst_vt['AeroDyn15']['TwrElev'], self.fst_vt['AeroDyn15']['TwrDiam'], self.fst_vt['AeroDyn15']['TwrCd']): - f.write('{: 2.15e} {: 2.15e} {: 2.15e} \n'.format(TwrElev, TwrDiam, TwrCd)) - f.write('====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow=True, or TwrAero=True]\n') + f.write('====== Tower Influence and Aerodynamics ============================================================= [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True]\n') + f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NumTwrNds'], 'NumTwrNds', '- Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, or TwrAero=True]\n')) + f.write('TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2)\n') + f.write('(m) (m) (-) (-)\n') + for TwrElev, TwrDiam, TwrCd, TwrTI in zip(self.fst_vt['AeroDyn15']['TwrElev'], self.fst_vt['AeroDyn15']['TwrDiam'], self.fst_vt['AeroDyn15']['TwrCd'], self.fst_vt['AeroDyn15']['TwrTI']): + f.write('{: 2.15e} {: 2.15e} {: 2.15e} {: 2.15e} \n'.format(TwrElev, TwrDiam, TwrCd, TwrTI)) + f.write('====== Outputs ====================================================================================\n') f.write('{!s:<22} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['SumPrint'], 'SumPrint', '- Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag)\n')) f.write('{:<22d} {:<11} {:}'.format(self.fst_vt['AeroDyn15']['NBlOuts'], 'NBlOuts', '- Number of blade node outputs [0 - 9] (-)\n')) f.write('{:<22} {:<11} {:}'.format(', '.join(self.fst_vt['AeroDyn15']['BlOutNd']), 'BlOutNd', '- Blade nodes whose values will be output (-)\n')) diff --git a/weis/aeroelasticse/openmdao_openfast.py b/weis/aeroelasticse/openmdao_openfast.py index 7a67aad70..cbbb644a4 100644 --- a/weis/aeroelasticse/openmdao_openfast.py +++ b/weis/aeroelasticse/openmdao_openfast.py @@ -527,6 +527,7 @@ def update_FAST_model(self, fst_vt, inputs, discrete_inputs): fst_vt['AeroDyn15']['TwrElev'] = twr_elev[twr_index:] fst_vt['AeroDyn15']['TwrDiam'] = inputs['tower_outer_diameter'][twr_index:] fst_vt['AeroDyn15']['TwrCd'] = inputs['tower_cd'][cd_index:] + fst_vt['AeroDyn15']['TwrTI'] = np.ones(len(twr_elev[twr_index:])) * fst_vt['AeroDyn15']['TwrTI'] # Update ElastoDyn Blade Input File fst_vt['ElastoDynBlade']['NBlInpSt'] = len(inputs['r']) diff --git a/weis/inputs/modeling_schema.yaml b/weis/inputs/modeling_schema.yaml index 6e61d0c11..1ad537472 100644 --- a/weis/inputs/modeling_schema.yaml +++ b/weis/inputs/modeling_schema.yaml @@ -576,9 +576,10 @@ properties: default: 1 description: 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} TwrShadow: - type: boolean - default: True - description: Calculate tower influence on wind based on downstream tower shadow? (flag) + type: integer + enum: [0, 1, 2] + default: 1 + description: Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} TwrAero: type: boolean default: True @@ -705,6 +706,12 @@ properties: minimum: 0. default: 5.000000000000000e-01 description: Water depth above mid-hub height (m) [used only when CavitCheck=True] + TwrTI: + type: number + default: 0.1 + minimum: 0. + maximum: 10. + description: Turbulence intensity used in the Eames tower shadow model. Values of TwrTI between 0.05 and 0.4 are recommended. SumPrint: type: boolean default: False