diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling.fst b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling.fst new file mode 100644 index 0000000..5eb1cb5 --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling.fst @@ -0,0 +1,81 @@ +------- OpenFAST EXAMPLE INPUT FILE ------------------------------------------- +NREL 5.0 MW Scaling Baseline Wind Turbine (Onshore) +---------------------- SIMULATION CONTROL -------------------------------------- +True Echo - Echo input data to .ech (flag) +"FATAL" AbortLevel - Error level when simulation should abort (string) {"WARNING", "SEVERE", "FATAL"} + 200 TMax - Total run time (s) + 0.01 DT - Recommended module time step (s) + 3 ModCoupling - Module coupling method (switch) {1=loose; 2=tight with fixed Jacobian updates (DT_UJac); 3=tight with automatic Jacobian updates} + 2 InterpOrder - Interpolation order for input/output time history (-) {1=linear, 2=quadratic} + 0 NumCrctn - Number of correction iterations (-) {0=explicit calculation, i.e., no corrections} + 1.0 RhoInf - Numerical damping parameter for tight coupling generalized-alpha integrator (-) [0.0 to 1.0] + 1e-4 ConvTol - Convergence iteration error tolerance for tight coupling generalized alpha integrator (-) + 6 MaxConvIter - Maximum number of convergence iterations for tight coupling generalized alpha integrator (-) + 99999 DT_UJac - Time between calls to get Jacobians (s) + 1000000 UJacSclFact - Scaling factor used in Jacobians (-) +---------------------- FEATURE SWITCHES AND FLAGS ------------------------------ + 1 NRotors - Number of rotors in turbine (-) + 1 CompElast - Compute structural dynamics (switch) {1=ElastoDyn; 2=ElastoDyn + BeamDyn for blades; 3=Simplified ElastoDyn} + 0 CompInflow - Compute inflow wind velocities (switch) {0=still air; 1=InflowWind; 2=external from ExtInflow} + 2 CompAero - Compute aerodynamic loads (switch) {0=None; 1=AeroDisk; 2=AeroDyn; 3=ExtLoads} + 0 CompServo - Compute control and electrical-drive dynamics (switch) {0=None; 1=ServoDyn} + 0 CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState} + 0 CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn} + 0 CompSub - Compute sub-structural dynamics (switch) {0=None; 1=SubDyn; 2=External Platform MCKF} + 0 CompMooring - Compute mooring system (switch) {0=None; 1=MAP++; 2=FEAMooring; 3=MoorDyn; 4=OrcaFlex} + 0 CompIce - Compute ice loads (switch) {0=None; 1=IceFloe; 2=IceDyn} + 0 CompSoil - Compute soil-structural dynamics (switch) {0=None; 1=SoilDyn} + 0 MHK - MHK turbine type (switch) {0=Not an MHK turbine; 1=Fixed MHK turbine; 2=Floating MHK turbine} + F MirrorRotor - Flag to reverse rotor rotation direction [1 to NRotors] {F=Normal, T=Mirror} +---------------------- ENVIRONMENTAL CONDITIONS -------------------------------- + 9.80665 Gravity - Gravitational acceleration (m/s^2) + 1.225 AirDens - Air density (kg/m^3) + 0 WtrDens - Water density (kg/m^3) + 1.464E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) + 335 SpdSound - Speed of sound in working fluid (m/s) + 103500 Patm - Atmospheric pressure (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) + 0 MSL2SWL - Offset between still-water level and mean sea level (m) [positive upward] +---------------------- INPUT FILES --------------------------------------------- +"NREL5MW_Scaling_ElastoDyn.dat" EDFile - Name of file containing ElastoDyn input parameters (quoted string) +"5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" BDBldFile(1) - Name of file containing BeamDyn input parameters for blade 1 (quoted string) +"5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" BDBldFile(2) - Name of file containing BeamDyn input parameters for blade 2 (quoted string) +"5MW_Baseline/NRELOffshrBsline5MW_AeroDyn_blade.dat" BDBldFile(3) - Name of file containing BeamDyn input parameters for blade 3 (quoted string) +"unused" InflowFile - Name of file containing inflow wind input parameters (quoted string) +"NREL5MW_Scaling_AeroDyn.dat" AeroFile - Name of file containing aerodynamic input parameters (quoted string) +"unused" ServoFile - Name of file containing control and electrical-drive input parameters (quoted string) +"unused" SeaStFile - Name of file containing sea state input parameters (quoted string) +"unused" HydroFile - Name of file containing hydrodynamic input parameters (quoted string) +"unused" SubFile - Name of file containing sub-structural input parameters (quoted string) +"unused" MooringFile - Name of file containing mooring system input parameters (quoted string) +"unused" IceFile - Name of file containing ice input parameters (quoted string) +"unused" SoilFile - Name of the file containing the SoilDyn input parameters (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 5 SttsTime - Amount of time between screen status messages (s) + 99999 ChkptTime - Amount of time between creating checkpoint files for potential restart (s) +"default" DT_Out - Time step for tabular output (s) (or "default") + 0 TStart - Time to begin tabular output (s) + 2 OutFileFmt - Format for tabular (time-marching) output file (switch) {1: text file [.out], 2: binary file [.outb], 3: both 1 and 2, 4: uncompressed binary [.outb, 5: both 1 and 4} +True TabDelim - Use tab delimiters in text tabular output file? (flag) {uses spaces if false} +"G0" OutFmt - Format used for text tabular output, excluding the time channel. Resulting field should be 10 characters. (quoted string) +---------------------- LINEARIZATION ------------------------------------------- +False Linearize - Linearization analysis (flag) +False CalcSteady - Calculate a steady-state periodic operating point before linearization? [unused if Linearize=False] (flag) + 3 TrimCase - Controller parameter to be trimmed {1:yaw; 2:torque; 3:pitch} [used only if CalcSteady=True] (-) + 0.001 TrimTol - Tolerance for the rotational speed convergence [used only if CalcSteady=True] (-) + 0.01 TrimGain - Proportional gain for the rotational speed error (>0) [used only if CalcSteady=True] (rad/(rad/s) for yaw or pitch; Nm/(rad/s) for torque) + 0 Twr_Kdmp - Damping factor for the tower [used only if CalcSteady=True] (N/(m/s)) + 0 Bld_Kdmp - Damping factor for the blades [used only if CalcSteady=True] (N/(m/s)) + 2 NLinTimes - Number of times to linearize (-) [>=1] [unused if Linearize=False] + 30, 60 LinTimes - List of times at which to linearize (s) [1 to NLinTimes] [used only when Linearize=True and CalcSteady=False] + 1 LinInputs - Inputs included in linearization (switch) {0=none; 1=standard; 2=all module inputs (debug)} [unused if Linearize=False] + 1 LinOutputs - Outputs included in linearization (switch) {0=none; 1=from OutList(s); 2=all module outputs (debug)} [unused if Linearize=False] +False LinOutJac - Include full Jacobians in linearization output (for debug) (flag) [unused if Linearize=False; used only if LinInputs=LinOutputs=2] +False LinOutMod - Write module-level linearization output files in addition to output for full system? (flag) [unused if Linearize=False] +---------------------- VISUALIZATION ------------------------------------------ + 0 WrVTK - VTK visualization data output: (switch) {0=none; 1=initialization data only; 2=animation; 3=mode shapes} + 1 VTK_type - Type of VTK visualization data: (switch) {1=surfaces; 2=basic meshes (lines/points); 3=all meshes (debug)} [unused if WrVTK=0] +true VTK_fields - Write mesh fields to VTK data files? (flag) {true/false} [unused if WrVTK=0] + 15 VTK_fps - Frame rate for VTK output (frames per second){will use closest integer multiple of DT} [used only if WrVTK=2 or WrVTK=3] diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn.dat b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn.dat new file mode 100644 index 0000000..54299ec --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn.dat @@ -0,0 +1,117 @@ +------- AERODYN INPUT FILE -------------------------------------------------------------------------- +NREL 5.0 MW scaling baseline aerodynamic input properties. +====== General Options ============================================================================ +False Echo - Echo the input to ".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} +0 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 CavitCheck - Perform cavitation check? (flag) [UA_Mod must be 0 when CavitCheck=true] +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 =================================================================== +"default" AirDens - Air density (kg/m^3) +"default" KinVisc - Kinematic viscosity of working fluid (m^2/s) +"default" SpdSound - Speed of sound in working fluid (m/s) +"default" Patm - Atmospheric pressure (Pa) [used only when CavitCheck=True] +"default" 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] +False AIDrag - Include the drag term in the axial-induction calculation? (flag) [unused when Wake_Mod=0 or 3] +False 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] +100 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 +0 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} (-) +4 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 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 (-) +8 NumAFfiles - Number of airfoil files used (-) +"../5MW_Baseline/Airfoils/Cylinder1.dat" AFNames - Airfoil file names (NumAFfiles lines) (quoted strings) +"../5MW_Baseline/Airfoils/Cylinder2.dat" +"../5MW_Baseline/Airfoils/DU40_A17.dat" +"../5MW_Baseline/Airfoils/DU35_A17.dat" +"../5MW_Baseline/Airfoils/DU30_A17.dat" +"../5MW_Baseline/Airfoils/DU25_A17.dat" +"../5MW_Baseline/Airfoils/DU21_A17.dat" +"../5MW_Baseline/Airfoils/NACA64_A17.dat" +====== Rotor/Blade Properties ===================================================================== +True UseBlCm - Include aerodynamic pitching moment in calculations? (flag) +"NREL5MW_Scaling_AeroDyn_blade.dat" ADBlFile(1) - Name of file containing distributed aerodynamic properties for Blade #1 (-) +"NREL5MW_Scaling_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] +"NREL5MW_Scaling_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] +====== Hub Properties ============================================================================== [used only when MHK=1 or 2] +0 VolHub - Hub volume (m^3) +0 HubCenBx - Hub center of buoyancy x direction offset (m) +====== Nacelle Properties ========================================================================== [used only when MHK=1 or 2 or when 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 MHK=1 or 2] +12 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or MHK=1 or 2] +TwrElev TwrDiam TwrCd TwrTI TwrCb TwrCp TwrCa !TwrTI used only with TwrShadow=2, TwrCb/TwrCp/TwrCa used only with MHK=1 or 2 +(m) (m) (-) (-) (-) (-) (-) +0.0000000E+00 6.0000000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +8.5261000E+00 5.7870000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +1.7053000E+01 5.5740000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +2.5579000E+01 5.3610000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +3.4105000E+01 5.1480000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +4.2633000E+01 4.9350000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +5.1158000E+01 4.7220000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +5.9685000E+01 4.5090000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +6.8211000E+01 4.2960000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +7.6738000E+01 4.0830000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +8.5268000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +8.7600000E+01 3.8700000E+00 1.0000000E+00 1.0000000E-01 0.0000000E+00 0.0000000E+00 0.0000000E+00 +====== Outputs ==================================================================================== +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) +0 NBlOuts - Number of blade node outputs [0 - 9] (-) +1, 9, 19 BlOutNd - Blade nodes whose values will be output (-) +0 NTwOuts - Number of tower node outputs [0 - 9] (-) +1, 2, 6 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, (-) + +END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) +---------------------- 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 (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +==================================================================================================== diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn_blade.dat b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn_blade.dat new file mode 100644 index 0000000..a6a8d15 --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_AeroDyn_blade.dat @@ -0,0 +1,28 @@ +------- AERODYN v15.00.* BLADE DEFINITION INPUT FILE ------------------------------------- +NREL 5.0 MW Scaling baseline aerodynamic blade input properties; note that we need to add the aerodynamic center to this file +====== Blade Properties ================================================================= + 19 NumBlNds - Number of blade nodes used in the analysis (-) + BlSpn BlCrvAC BlSwpAC BlCrvAng BlTwist BlChord BlAFID t_c BlCb BlCenBn BlCenBt BlCpn BlCpt BlCan BlCat BlCam + (m) (m) (m) (deg) (deg) (m) (-) (-) (-) (m) (m) (-) (-) (-) (-) (-) +0.0000000E+00 0.0000000E+00 0.0000000E+00 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +1.3667000E+00 -8.1531745E-04 -3.4468858E-03 0.0000000E+00 1.3308000E+01 3.5420000E+00 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +4.1000000E+00 -2.4839790E-02 -1.0501421E-01 0.0000000E+00 1.3308000E+01 3.8540000E+00 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +6.8333000E+00 -5.9469375E-02 -2.5141635E-01 0.0000000E+00 1.3308000E+01 4.1670000E+00 2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +1.0250000E+01 -1.0909141E-01 -4.6120149E-01 0.0000000E+00 1.3308000E+01 4.5570000E+00 3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +1.4350000E+01 -1.1573354E-01 -5.6986665E-01 0.0000000E+00 1.1480000E+01 4.6520000E+00 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +1.8450000E+01 -9.8316709E-02 -5.4850833E-01 0.0000000E+00 1.0162000E+01 4.4580000E+00 4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +2.2550000E+01 -8.3186967E-02 -5.2457001E-01 0.0000000E+00 9.0110000E+00 4.2490000E+00 5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +2.6650000E+01 -6.7933232E-02 -4.9624675E-01 0.0000000E+00 7.7950000E+00 4.0070000E+00 6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +3.0750000E+01 -5.3393159E-02 -4.6544755E-01 0.0000000E+00 6.5440000E+00 3.7480000E+00 6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +3.4850000E+01 -4.0899260E-02 -4.3583519E-01 0.0000000E+00 5.3610000E+00 3.5020000E+00 7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +3.8950000E+01 -2.9722933E-02 -4.0591323E-01 0.0000000E+00 4.1880000E+00 3.2560000E+00 7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +4.3050000E+01 -2.0511081E-02 -3.7569051E-01 0.0000000E+00 3.1250000E+00 3.0100000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +4.7150000E+01 -1.3980013E-02 -3.4521705E-01 0.0000000E+00 2.3190000E+00 2.7640000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +5.1250000E+01 -8.3819737E-03 -3.1463837E-01 0.0000000E+00 1.5260000E+00 2.5180000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +5.4666700E+01 -4.3546914E-03 -2.8909220E-01 0.0000000E+00 8.6300000E-01 2.3130000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +5.7400000E+01 -1.6838383E-03 -2.6074456E-01 0.0000000E+00 3.7000000E-01 2.0860000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +6.0133300E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 +6.1499900E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + +!bjj: because of precision in the BD-AD coupling, 61.5m didn't work, so I changed it to 61.4999m +6.1500000E+01 -3.2815226E-04 -1.7737470E-01 0.0000000E+00 1.0600000E-01 1.4190000E+00 8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn.dat b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn.dat new file mode 100644 index 0000000..3d57ec7 --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn.dat @@ -0,0 +1,185 @@ +------- ELASTODYN for OpenFAST INPUT FILE ------------------------------------------- +NREL 5.0 MW scaling Baseline Wind Turbine for scaling +---------------------- 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 PitchDOF - Blade pitch DOF (flag) +False TeetDOF - Rotor-teeter DOF (flag) [unused for 3 blades] +True DrTrDOF - Drivetrain rotational-flexibility DOF (flag) +False GenDOF - Generator DOF (flag) +False 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) +False PtfmSgDOF - Platform horizontal surge translation DOF (flag) +False PtfmSwDOF - Platform horizontal sway translation DOF (flag) +False PtfmHvDOF - Platform vertical heave translation DOF (flag) +False PtfmRDOF - Platform roll tilt rotation DOF (flag) +False PtfmPDOF - Platform pitch tilt rotation DOF (flag) +False 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) + 0 BlPitch(1) - Blade 1 initial pitch (degrees) + 0 BlPitch(2) - Blade 2 initial pitch (degrees) + 0 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) + 12.1 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) +---------------------- TURBINE CONFIGURATION ----------------------------------- + 3 NumBl - Number of blades (-) + 63 TipRad - The distance from the rotor apex to the blade tip (meters) + 1.5 HubRad - The distance from the rotor apex to the blade root (meters) + -2.5 PreCone(1) - Blade 1 cone angle (degrees) + -2.5 PreCone(2) - Blade 2 cone angle (degrees) + -2.5 PreCone(3) - Blade 3 cone angle (degrees) [unused for 2 blades] + 0 HubCM - Distance from rotor apex to hub mass [positive downwind] (meters) + 0 UndSling - Undersling length [distance from teeter pin to the rotor apex] (meters) [unused for 3 blades] + 0 Delta3 - Delta-3 angle for teetering rotors (degrees) [unused for 3 blades] + 0 AzimB1Up - Azimuth value to use for I/O when blade 1 points up (degrees) + -5.0191 OverHang - Distance from yaw axis to rotor apex [3 blades] or teeter pin [2 blades] (meters) + 1.912 ShftGagL - Distance from rotor apex [3 blades] or teeter pin [2 blades] to shaft strain gages [positive for upwind rotors] (meters) + -5 ShftTilt - Rotor shaft tilt angle (degrees) + 1.9 NacCMxn - Downwind distance from the tower-top to the nacelle CM (meters) + 0 NacCMyn - Lateral distance from the tower-top to the nacelle CM (meters) + 1.75 NacCMzn - Vertical distance from the tower-top to the nacelle CM (meters) + -3.09528 NcIMUxn - Downwind distance from the tower-top to the nacelle IMU (meters) + 0 NcIMUyn - Lateral distance from the tower-top to the nacelle IMU (meters) + 2.23336 NcIMUzn - Vertical distance from the tower-top to the nacelle IMU (meters) + 1.96256 Twr2Shft - Vertical distance from the tower-top to the rotor shaft (meters) + 87.6 TowerHt - Height of tower relative to ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] (meters) + 0 TowerBsHt - Height of tower base relative to ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] (meters) + 0 PtfmCMxt - Downwind distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + 0 PtfmCMyt - Lateral distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + 0 PtfmCMzt - Vertical distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM (meters) + 0 PtfmRefxt - Downwind distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform reference point (meters) + 0 PtfmRefyt - Lateral distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform reference point (meters) + 0 PtfmRefzt - Vertical distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform reference point (meters) +---------------------- MASS AND INERTIA ---------------------------------------- + 0 TipMass(1) - Tip-brake mass, blade 1 (kg) + 0 TipMass(2) - Tip-brake mass, blade 2 (kg) + 0 TipMass(3) - Tip-brake mass, blade 3 (kg) [unused for 2 blades] + 0 PBrIner(1) - Pitch bearing inertia, blade 1 (kg m^2) + 0 PBrIner(2) - Pitch bearing inertia, blade 2 (kg m^2) + 0 PBrIner(3) - Pitch bearing inertia, blade 3 (kg m^2) [unused for 2 blades] + 0 BlPIner(1) - Blade pitch inertia, blade 1 (kg m^2) + 0 BlPIner(2) - Blade pitch inertia, blade 2 (kg m^2) + 0 BlPIner(3) - Blade pitch inertia, blade 3 (kg m^2) [unused for 2 blades] + 56780 HubMass - Hub mass (kg) + 115926 HubIner - Hub inertia about rotor axis (2 or 3-blades) (kg m^2) + 0 HubIner_Teeter - Hub inertia about teeter axis (2-blades) (kg m^2) + 534.116 GenIner - Generator inertia about HSS (kg m^2) + 240000 NacMass - Nacelle mass (kg) + 2607890 NacYIner - Nacelle inertia about yaw axis (kg m^2) + 0 YawBrMass - Yaw bearing mass (kg) + 0 PtfmMass - Platform mass (kg) + 0 PtfmRIner - Platform inertia for roll tilt rotation about the platform CM (kg m^2) + 0 PtfmPIner - Platform inertia for pitch tilt rotation about the platform CM (kg m^2) + 0 PtfmYIner - Platform inertia for yaw rotation about the platform CM (kg m^2) + 0 PtfmXYIner - Platform xy moment of inertia about the platform CM (=-int(xydm)) (kg m^2) + 0 PtfmYZIner - Platform yz moment of inertia about the platform CM (=-int(yzdm)) (kg m^2) + 0 PtfmXZIner - Platform xz moment of inertia about the platform CM (=-int(xzdm)) (kg m^2) +---------------------- BLADE --------------------------------------------------- + 17 BldNodes - Number of blade nodes (per blade) used for analysis (-) +"NREL5MW_Scaling_ElastoDyn_Blade.dat" BldFile(1) - Name of file containing properties for blade 1 (quoted string) +"NREL5MW_Scaling_ElastoDyn_Blade.dat" BldFile(2) - Name of file containing properties for blade 2 (quoted string) +"NREL5MW_Scaling_ElastoDyn_Blade.dat" BldFile(3) - Name of file containing properties for blade 3 (quoted string) [unused for 2 blades] +---------------------- ROTOR-TEETER -------------------------------------------- + 0 TeetMod - Rotor-teeter spring/damper model {0: none, 1: standard, 2: user-defined from routine UserTeet} (switch) [unused for 3 blades] + 0 TeetDmpP - Rotor-teeter damper position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetDmp - Rotor-teeter damping constant (N-m/(rad/s)) [used only for 2 blades and when TeetMod=1] + 0 TeetCDmp - Rotor-teeter rate-independent Coulomb-damping moment (N-m) [used only for 2 blades and when TeetMod=1] + 0 TeetSStP - Rotor-teeter soft-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetHStP - Rotor-teeter hard-stop position (degrees) [used only for 2 blades and when TeetMod=1] + 0 TeetSSSp - Rotor-teeter soft-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] + 0 TeetHSSp - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +---------------------- YAW-FRICTION -------------------------------------------- + 0 YawFrctMod - Yaw-friction model {0: none, 1: friction independent of yaw-bearing force and bending moment, 2: friction with Coulomb terms depending on yaw-bearing force and bending moment, 3: user defined model} (switch) + 300 M_CSmax - Maximum static Coulomb friction torque (N-m) [M_CSmax when YawFrctMod=1; |Fz|*M_CSmax when YawFrctMod=2 and Fz<0] + 0 M_FCSmax - Maximum static Coulomb friction torque proportional to yaw bearing shear force (N-m) [sqrt(Fx^2+Fy^2)*M_FCSmax; only used when YawFrctMod=2] + 0 M_MCSmax - Maximum static Coulomb friction torque proportional to yaw bearing bending moment (N-m) [sqrt(Mx^2+My^2)*M_MCSmax; only used when YawFrctMod=2] + 40 M_CD - Dynamic Coulomb friction moment (N-m) [M_CD when YawFrctMod=1; |Fz|*M_CD when YawFrctMod=2 and Fz<0] + 0 M_FCD - Dynamic Coulomb friction moment proportional to yaw bearing shear force (N-m) [sqrt(Fx^2+Fy^2)*M_FCD; only used when YawFrctMod=2] + 0 M_MCD - Dynamic Coulomb friction moment proportional to yaw bearing bending moment (N-m) [sqrt(Mx^2+My^2)*M_MCD; only used when YawFrctMod=2] + 0 sig_v - Linear viscous friction coefficient (N-m/(rad/s)) + 0 sig_v2 - Quadratic viscous friction coefficient (N-m/(rad/s)^2) + 0 OmgCut - Yaw angular velocity cutoff below which viscous friction is linearized (rad/s) +---------------------- DRIVETRAIN ---------------------------------------------- + 100 GBoxEff - Gearbox efficiency (%) + 97 GBRatio - Gearbox ratio (-) + 867637000 DTTorSpr - Drivetrain torsional spring (N-m/rad) + 6215000 DTTorDmp - Drivetrain torsional damper (N-m/(rad/s)) +---------------------- FURLING ------------------------------------------------- +False Furling - Read in additional model properties for furling turbine (flag) [must currently be FALSE) +"unused" FurlFile - Name of file containing furling properties (quoted string) [unused when Furling=False] +---------------------- TOWER --------------------------------------------------- + 20 TwrNodes - Number of tower nodes used for analysis (-) +"NREL5MW_Scaling_ElastoDyn_Tower.dat" TwrFile - Name of file containing tower properties (quoted string) +---------------------- OUTPUT -------------------------------------------------- +True SumPrint - Print summary data to ".sum" (flag) + 1 OutFile - Switch to determine where output will be placed: {1: in module output file only; 2: in glue code output file only; 3: both} (currently unused) +True TabDelim - Use tab delimiters in text tabular output file? (flag) (currently unused) +"G0" OutFmt - Format used for text tabular output (except time). Resulting field should be 10 characters. (quoted string) (currently unused) + 0 TStart - Time to begin tabular output (s) (currently unused) + 1 DecFact - Decimation factor for tabular output {1: output every time step} (-) (currently unused) + 0 NTwGages - Number of tower nodes that have strain gages for output [0 to 9] (-) + 10, 19, 28 TwrGagNd - List of tower nodes that have strain gages [1 to TwrNodes] (-) [unused if NTwGages=0] + 3 NBlGages - Number of blade nodes that have strain gages for output [0 to 9] (-) + 5, 9, 13 BldGagNd - List of blade nodes that have strain gages [1 to BldNodes] (-) [unused if NBlGages=0] + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"OoPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"IPDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"TwstDefl1" - Blade 1 out-of-plane and in-plane deflections and tip twist +"BldPitch1" - Blade 1 pitch angle +"Azimuth" - Blade 1 azimuth angle +"RotSpeed" - Low-speed shaft and high-speed shaft speeds +"GenSpeed" - Low-speed shaft and high-speed shaft speeds +"TTDspFA" - Tower fore-aft and side-to-side displacements and top twist +"TTDspSS" - Tower fore-aft and side-to-side displacements and top twist +"TTDspTwst" - Tower fore-aft and side-to-side displacements and top twist +"Spn2MLxb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"Spn2MLyb1" - Blade 1 local edgewise and flapwise bending moments at span station 2 (approx. 50% span) +"RootFxb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFyb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootFzb1" - Out-of-plane shear, in-plane shear, and axial forces at the root of blade 1 +"RootMxb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMyb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RootMzb1" - In-plane bending, out-of-plane bending, and pitching moments at the root of blade 1 +"RotTorq" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMya" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"LSSGagMza" - Rotor torque and low-speed shaft 0- and 90-bending moments at the main bearing +"YawBrFxp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFyp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrFzp" - Fore-aft shear, side-to-side shear, and vertical forces at the top of the tower (not rotating with nacelle yaw) +"YawBrMxp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMyp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"YawBrMzp" - Side-to-side bending, fore-aft bending, and yaw moments at the top of the tower (not rotating with nacelle yaw) +"TwrBsFxt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFyt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsFzt" - Fore-aft shear, side-to-side shear, and vertical forces at the base of the tower (mudline) +"TwrBsMxt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMyt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +"TwrBsMzt" - Side-to-side bending, fore-aft bending, and yaw moments at the base of the tower (mudline) +END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) +====== Outputs for all blade stations (same ending as above for Spn1.... =========================== [optional section] + 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) +"All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +END (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +---------------------------------------------------------------- + diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Blade.dat b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Blade.dat new file mode 100644 index 0000000..5c5ec88 --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Blade.dat @@ -0,0 +1,83 @@ +------- ELASTODYN V1.00.* INDIVIDUAL BLADE INPUT FILE -------------------------- +NREL 5.0 MW offshore baseline blade input properties. +---------------------- BLADE PARAMETERS ---------------------------------------- + 49 NBlInpSt - Number of blade input stations (-) + 0.477465 BldFlDmp(1) - Blade flap mode #1 structural damping in percent of critical (%) + 0.477465 BldFlDmp(2) - Blade flap mode #2 structural damping in percent of critical (%) + 0.477465 BldEdDmp(1) - Blade edge mode #1 structural damping in percent of critical (%) +---------------------- BLADE ADJUSTMENT FACTORS -------------------------------- + 1 FlStTunr(1) - Blade flapwise modal stiffness tuner, 1st mode (-) + 1 FlStTunr(2) - Blade flapwise modal stiffness tuner, 2nd mode (-) + 1.04536 AdjBlMs - Factor to adjust blade mass density (-) !bjj: value for AD14=1.04536; value for AeroDyn=1.057344 (it would be nice to enter the requested blade mass instead of a factor here) + 1 AdjFlSt - Factor to adjust blade flap stiffness (-) + 1 AdjEdSt - Factor to adjust blade edge stiffness (-) +---------------------- DISTRIBUTED BLADE PROPERTIES ---------------------------- + BlFract StrcTwst BMassDen FlpStff EdgStff + (-) (deg) (kg/m) (Nm^2) (Nm^2) + 0.000000000000000E+00 1.330800000000000E+01 6.789349999999999E+02 1.811000000000000E+10 1.811360000000000E+10 + 3.250000000000000E-03 1.330800000000000E+01 6.789349999999999E+02 1.811000000000000E+10 1.811360000000000E+10 + 1.951000000000000E-02 1.330800000000000E+01 7.733630000000001E+02 1.942490000000000E+10 1.955860000000000E+10 + 3.577000000000000E-02 1.330800000000000E+01 7.405500000000000E+02 1.745590000000000E+10 1.949780000000000E+10 + 5.203000000000000E-02 1.330800000000000E+01 7.400420000000000E+02 1.528740000000000E+10 1.978880000000000E+10 + 6.829000000000000E-02 1.330800000000000E+01 5.924960000000000E+02 1.078240000000000E+10 1.485850000000000E+10 + 8.455000000000000E-02 1.330800000000000E+01 4.502750000000000E+02 7.229720000000000E+09 1.022060000000000E+10 + 1.008100000000000E-01 1.330800000000000E+01 4.240540000000000E+02 6.309540000000000E+09 9.144700000000000E+09 + 1.170700000000000E-01 1.330800000000000E+01 4.006380000000000E+02 5.528360000000000E+09 8.063160000000000E+09 + 1.333500000000000E-01 1.330800000000000E+01 3.820620000000000E+02 4.980060000000000E+09 6.884440000000000E+09 + 1.495900000000000E-01 1.330800000000000E+01 3.996550000000000E+02 4.936840000000000E+09 7.009180000000000E+09 + 1.658500000000000E-01 1.330800000000000E+01 4.263210000000000E+02 4.691660000000000E+09 7.167680000000000E+09 + 1.821100000000000E-01 1.318100000000000E+01 4.168200000000000E+02 3.949460000000000E+09 7.271660000000000E+09 + 1.983700000000000E-01 1.284800000000000E+01 4.061860000000000E+02 3.386520000000000E+09 7.081700000000000E+09 + 2.146500000000000E-01 1.219200000000000E+01 3.814200000000000E+02 2.933740000000000E+09 6.244530000000000E+09 + 2.308900000000000E-01 1.156100000000000E+01 3.528220000000000E+02 2.568960000000000E+09 5.048960000000000E+09 + 2.471500000000000E-01 1.107200000000000E+01 3.494770000000000E+02 2.388650000000000E+09 4.948490000000000E+09 + 2.634100000000000E-01 1.079200000000000E+01 3.465380000000000E+02 2.271990000000000E+09 4.808020000000000E+09 + 2.959500000000000E-01 1.023200000000000E+01 3.393330000000000E+02 2.050050000000000E+09 4.501400000000000E+09 + 3.284600000000000E-01 9.672000000000001E+00 3.300040000000000E+02 1.828250000000000E+09 4.244070000000000E+09 + 3.609800000000000E-01 9.109999999999999E+00 3.219900000000000E+02 1.588710000000000E+09 3.995280000000000E+09 + 3.935000000000000E-01 8.534000000000001E+00 3.138200000000000E+02 1.361930000000000E+09 3.750760000000000E+09 + 4.260200000000000E-01 7.932000000000000E+00 2.947340000000000E+02 1.102380000000000E+09 3.447140000000000E+09 + 4.585500000000000E-01 7.321000000000000E+00 2.871200000000000E+02 8.758000000000000E+08 3.139070000000000E+09 + 4.910600000000000E-01 6.711000000000000E+00 2.633430000000000E+02 6.813000000000000E+08 2.734240000000000E+09 + 5.235800000000000E-01 6.122000000000000E+00 2.532070000000000E+02 5.347200000000000E+08 2.554870000000000E+09 + 5.561000000000000E-01 5.546000000000000E+00 2.416660000000000E+02 4.089000000000000E+08 2.334030000000000E+09 + 5.886200000000000E-01 4.971000000000000E+00 2.206380000000000E+02 3.145400000000000E+08 1.828730000000000E+09 + 6.211500000000000E-01 4.401000000000000E+00 2.002930000000000E+02 2.386300000000000E+08 1.584100000000000E+09 + 6.536600000000000E-01 3.834000000000000E+00 1.794040000000000E+02 1.758800000000000E+08 1.323360000000000E+09 + 6.861800000000000E-01 3.332000000000000E+00 1.650940000000000E+02 1.260100000000000E+08 1.183680000000000E+09 + 7.187000000000000E-01 2.890000000000000E+00 1.544110000000000E+02 1.072600000000000E+08 1.020160000000000E+09 + 7.512200000000000E-01 2.503000000000000E+00 1.389350000000000E+02 9.088000000000000E+07 7.978100000000000E+08 + 7.837600000000000E-01 2.116000000000000E+00 1.295550000000000E+02 7.631000000000000E+07 7.096100000000000E+08 + 8.162600000000000E-01 1.730000000000000E+00 1.072640000000000E+02 6.105000000000000E+07 5.181900000000000E+08 + 8.487800000000000E-01 1.342000000000000E+00 9.877600000000000E+01 4.948000000000000E+07 4.548700000000000E+08 + 8.813000000000000E-01 9.540000000000000E-01 9.024800000000000E+01 3.936000000000000E+07 3.951200000000000E+08 + 8.975600000000000E-01 7.600000000000000E-01 8.300100000000000E+01 3.467000000000000E+07 3.537200000000000E+08 + 9.138200000000000E-01 5.740000000000000E-01 7.290600000000001E+01 3.041000000000000E+07 3.047300000000000E+08 + 9.300800000000000E-01 4.040000000000000E-01 6.877200000000001E+01 2.652000000000000E+07 2.814200000000000E+08 + 9.382100000000000E-01 3.190000000000000E-01 6.626400000000000E+01 2.384000000000000E+07 2.617100000000000E+08 + 9.463600000000000E-01 2.530000000000000E-01 5.934000000000000E+01 1.963000000000000E+07 1.588100000000000E+08 + 9.544700000000000E-01 2.160000000000000E-01 5.591400000000000E+01 1.600000000000000E+07 1.378800000000000E+08 + 9.626000000000000E-01 1.780000000000000E-01 5.248400000000000E+01 1.283000000000000E+07 1.187900000000000E+08 + 9.707300000000000E-01 1.400000000000000E-01 4.911400000000000E+01 1.008000000000000E+07 1.016300000000000E+08 + 9.788600000000000E-01 1.010000000000000E-01 4.581800000000000E+01 7.550000000000000E+06 8.507000000000000E+07 + 9.869900000000000E-01 6.200000000000000E-02 4.166900000000000E+01 4.600000000000000E+06 6.426000000000000E+07 + 9.951200000000000E-01 2.300000000000000E-02 1.145300000000000E+01 2.500000000000000E+05 6.610000000000000E+06 + 1.000000000000000E+00 0.000000000000000E+00 1.031900000000000E+01 1.700000000000000E+05 5.010000000000000E+06 +---------------------- BLADE MODE SHAPES --------------------------------------- + 0.0622 BldFl1Sh(2) - Flap mode 1, coeff of x^2 + 1.7254 BldFl1Sh(3) - , coeff of x^3 + -3.2452 BldFl1Sh(4) - , coeff of x^4 + 4.7131 BldFl1Sh(5) - , coeff of x^5 + -2.2555 BldFl1Sh(6) - , coeff of x^6 + -0.5809 BldFl2Sh(2) - Flap mode 2, coeff of x^2 + 1.2067 BldFl2Sh(3) - , coeff of x^3 + -15.5349 BldFl2Sh(4) - , coeff of x^4 + 29.7347 BldFl2Sh(5) - , coeff of x^5 + -13.8255 BldFl2Sh(6) - , coeff of x^6 + 0.3627 BldEdgSh(2) - Edge mode 1, coeff of x^2 + 2.5337 BldEdgSh(3) - , coeff of x^3 + -3.5772 BldEdgSh(4) - , coeff of x^4 + 2.376 BldEdgSh(5) - , coeff of x^5 + -0.6952 BldEdgSh(6) - , coeff of x^6 + + diff --git a/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Tower.dat b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Tower.dat new file mode 100644 index 0000000..a183bc5 --- /dev/null +++ b/openfast_toolbox/scaling_model/5MW_Scaling/NREL5MW_Scaling_ElastoDyn_Tower.dat @@ -0,0 +1,54 @@ +------- ELASTODYN V1.00.* TOWER INPUT FILE ------------------------------------- +NREL 5.0 MW Scaling baseline tower input properties. +---------------------- TOWER PARAMETERS ---------------------------------------- + 11 NTwInpSt - Number of input stations to specify tower geometry + 1 TwrFADmp(1) - Tower 1st fore-aft mode structural damping ratio (%) + 1 TwrFADmp(2) - Tower 2nd fore-aft mode structural damping ratio (%) + 1 TwrSSDmp(1) - Tower 1st side-to-side mode structural damping ratio (%) + 1 TwrSSDmp(2) - Tower 2nd side-to-side mode structural damping ratio (%) +---------------------- TOWER ADJUSTMUNT FACTORS -------------------------------- + 1 FAStTunr(1) - Tower fore-aft modal stiffness tuner, 1st mode (-) + 1 FAStTunr(2) - Tower fore-aft modal stiffness tuner, 2nd mode (-) + 1 SSStTunr(1) - Tower side-to-side stiffness tuner, 1st mode (-) + 1 SSStTunr(2) - Tower side-to-side stiffness tuner, 2nd mode (-) + 1 AdjTwMa - Factor to adjust tower mass density (-) + 1 AdjFASt - Factor to adjust tower fore-aft stiffness (-) + 1 AdjSSSt - Factor to adjust tower side-to-side stiffness (-) +---------------------- DISTRIBUTED TOWER PROPERTIES ---------------------------- + HtFract TMassDen TwFAStif TwSSStif + (-) (kg/m) (Nm^2) (Nm^2) +0.0000000E+00 5.5908700E+03 6.1434300E+11 6.1434300E+11 +1.0000000E-01 5.2324300E+03 5.3482100E+11 5.3482100E+11 +2.0000000E-01 4.8857600E+03 4.6326700E+11 4.6326700E+11 +3.0000000E-01 4.5508700E+03 3.9913100E+11 3.9913100E+11 +4.0000000E-01 4.2277500E+03 3.4188300E+11 3.4188300E+11 +5.0000000E-01 3.9164100E+03 2.9101100E+11 2.9101100E+11 +6.0000000E-01 3.6168300E+03 2.4602700E+11 2.4602700E+11 +7.0000000E-01 3.3290300E+03 2.0645700E+11 2.0645700E+11 +8.0000000E-01 3.0530100E+03 1.7185100E+11 1.7185100E+11 +9.0000000E-01 2.7887500E+03 1.4177600E+11 1.4177600E+11 +1.0000000E+00 2.5362700E+03 1.1582000E+11 1.1582000E+11 +---------------------- TOWER FORE-AFT MODE SHAPES ------------------------------ + 0.7004 TwFAM1Sh(2) - Mode 1, coefficient of x^2 term + 2.1963 TwFAM1Sh(3) - , coefficient of x^3 term + -5.6202 TwFAM1Sh(4) - , coefficient of x^4 term + 6.2275 TwFAM1Sh(5) - , coefficient of x^5 term + -2.504 TwFAM1Sh(6) - , coefficient of x^6 term + -70.5319 TwFAM2Sh(2) - Mode 2, coefficient of x^2 term + -63.7623 TwFAM2Sh(3) - , coefficient of x^3 term + 289.737 TwFAM2Sh(4) - , coefficient of x^4 term + -176.513 TwFAM2Sh(5) - , coefficient of x^5 term + 22.0706 TwFAM2Sh(6) - , coefficient of x^6 term +---------------------- TOWER SIDE-TO-SIDE MODE SHAPES -------------------------- + 1.385 TwSSM1Sh(2) - Mode 1, coefficient of x^2 term + -1.7684 TwSSM1Sh(3) - , coefficient of x^3 term + 3.0871 TwSSM1Sh(4) - , coefficient of x^4 term + -2.2395 TwSSM1Sh(5) - , coefficient of x^5 term + 0.5357 TwSSM1Sh(6) - , coefficient of x^6 term + -121.21 TwSSM2Sh(2) - Mode 2, coefficient of x^2 term + 184.415 TwSSM2Sh(3) - , coefficient of x^3 term + -224.904 TwSSM2Sh(4) - , coefficient of x^4 term + 298.536 TwSSM2Sh(5) - , coefficient of x^5 term + -135.838 TwSSM2Sh(6) - , coefficient of x^6 term + + diff --git a/openfast_toolbox/scaling_model/scaling_model.py b/openfast_toolbox/scaling_model/scaling_model.py new file mode 100644 index 0000000..90f2dec --- /dev/null +++ b/openfast_toolbox/scaling_model/scaling_model.py @@ -0,0 +1,252 @@ +""" +Scale selected OpenFAST input variables using openfast_toolbox. + +Workflow: +1) Copy the complete source case folder to a target folder. +2) Read the .fst file from the target folder. +3) Follow linked files via FASTInputDeck where possible. +4) Modify selected variables. +5) Write the modified files back in-place, preserving the copied folder structure. + +Tested against the uploaded 5MW_Scaling case layout. + +Two inputs : +1. LAMBDA: target to baseline rotor diameter ratio +2. TargetTowerHt: the target tower height in the scaled case. This is used to compute + +Scaling rules: +- Mass ~ LAMBDA^3 +- Mass per unit length ~ LAMBDA^2 +- Inertia ~ LAMBDA^5 +- Bending stiffness ~ LAMBDA^4 +- Axial stiffness ~ LAMBDA^2 +- Torsional stiffness ~ LAMBDA^4 + +""" + +from __future__ import annotations + +import shutil +import sys +from pathlib import Path +from typing import Iterable + +# ------------------------------------------------------------------------- +# USER SETTINGS +# ------------------------------------------------------------------------- +# If openfast_toolbox is not installed with pip, point this to the local clone. +OPENFAST_TOOLBOX_DIR = Path(r"../../repo/openfast_toolbox") + +SOURCE_DIR = Path(r"./5MW_Scaling") +TARGET_DIR = Path(r"./Target_scaled") +FST_NAME = "NREL5MW_Scaling.fst" + +# Main similarity factor example. Generally rotor diameter ratio. but you can replace/extend this with your own scaling rules. +LAMBDA = 0.60 +TargetTowerHt = 80.0 # Target tower height (m). + +# ------------------------------------------------------------------------- +# IMPORT OPENFAST TOOLBOX +# ------------------------------------------------------------------------- +if OPENFAST_TOOLBOX_DIR.exists(): + sys.path.insert(0, str(OPENFAST_TOOLBOX_DIR.resolve())) + +from openfast_toolbox.io import FASTInputDeck, FASTInputFile # noqa: E402 + + +def copy_case_folder(src: Path, dst: Path, overwrite: bool = True) -> None: + """Copy the whole OpenFAST case folder to a new working folder.""" + src = src.resolve() + dst = dst.resolve() + + if not src.is_dir(): + raise FileNotFoundError(f"Source folder does not exist: {src}") + + if dst.exists(): + if not overwrite: + raise FileExistsError(f"Target folder already exists: {dst}") + shutil.rmtree(dst) + + shutil.copytree(src, dst) + + +def find_case_insensitive_file(parent: Path, linked_name: str) -> Path | None: + """ + Resolve linked OpenFAST filenames even when letter case differs. + + This is useful because Windows is case-insensitive, but Linux/Python path + resolution is case-sensitive. Example from your case: + NREL5MW_scaling_ElastoDyn.dat vs NREL5MW_Scaling_ElastoDyn.dat + """ + linked_name = linked_name.strip().strip('"').replace("\\", "/") + candidate = parent / linked_name + if candidate.exists(): + return candidate + + parts = Path(linked_name).parts + current = parent + for part in parts: + if not current.is_dir(): + return None + matches = [p for p in current.iterdir() if p.name.lower() == part.lower()] + if not matches: + return None + current = matches[0] + return current + + +def repair_fst_file_links(fst_path: Path, keys: Iterable[str] = ("EDFile", "AeroFile", "InflowFile", "ServoFile")) -> None: + """ + Repair simple top-level .fst linked filenames when only letter case differs. + This keeps FASTInputDeck usable on case-sensitive systems. + """ + fst = FASTInputFile(str(fst_path)) + case_dir = fst_path.parent + changed = False + + for key in keys: + if key not in fst.keys(): + continue + value = fst[key] + if not isinstance(value, str): + continue + + value_clean = value.strip().strip('"') + if value_clean.lower() in {"unused", "none", "na", "nan"}: + continue + + resolved = find_case_insensitive_file(case_dir, value_clean) + if resolved is not None: + rel = resolved.relative_to(case_dir).as_posix() + if rel != value_clean: + fst[key] = f'"{rel}"' + changed = True + print(f"Repaired {key}: {value_clean} -> {rel}") + + if changed: + fst.write(str(fst_path)) + + +def write_file_if_present(obj, path: Path | None) -> None: + """Write an OpenFAST Toolbox file object if it was read successfully.""" + if obj is not None and path is not None: + obj.write(str(path)) + + +def main() -> None: + # 1) Work only in Target_scaled after this point + copy_case_folder(SOURCE_DIR, TARGET_DIR, overwrite=True) + + target_fst = TARGET_DIR / FST_NAME + if not target_fst.exists(): + raise FileNotFoundError(f"Cannot find target .fst file: {target_fst}") + + # 2) Repair case-only filename mismatches before reading the full deck + repair_fst_file_links(target_fst) + + # 3) Read linked OpenFAST files using openfast_toolbox + # Keep readlist limited to the files you want to access/update. + deck = FASTInputDeck( + str(target_fst), + readlist=["ED", "EDbld", "EDtwr", "AD", "ADbld", "AF"], + verbose=False, + ) + + print("Files read by FASTInputDeck:") + for short_key, path in deck.inputFilesRead.items(): + print(f" {short_key:6s}: {path}") + + # ------------------------------------------------------------------ + # 4) EXAMPLE SCALING MODIFICATIONS + # Replace/extend this block with your own scaling rules. + # ------------------------------------------------------------------ + ED = deck.fst_vt["ElastoDyn"] + EDbld = deck.fst_vt["ElastoDynBlade"] + EDtwr = deck.fst_vt["ElastoDynTower"] + AD = deck.fst_vt["AeroDyn15"] + ADbld_list = deck.fst_vt["AeroDynBlade"] + + # Example A: scalar values in ElastoDyn + if ED is not None: + ED["TipRad"] = ED["TipRad"] * LAMBDA + ED["HubRad"] = ED["HubRad"] * LAMBDA + ED["HubCM"] = ED["HubCM"] * LAMBDA + ED["UndSling"] = ED["UndSling"] * LAMBDA + ED["OverHang"] = ED["OverHang"] * LAMBDA + ED["ShftGagL"] = ED["ShftGagL"] * LAMBDA + ED["NacCMxn"] = ED["NacCMxn"] * LAMBDA + ED["NacCMyn"] = ED["NacCMyn"] * LAMBDA + ED["NacCMzn"] = ED["NacCMzn"] * LAMBDA + ED["NcIMUxn"] = ED["NcIMUxn"] * LAMBDA + ED["NcIMUyn"] = ED["NcIMUyn"] * LAMBDA + ED["NcIMUzn"] = ED["NcIMUzn"] * LAMBDA + ED["Twr2Shft"] = ED["Twr2Shft"] * LAMBDA + ED["TowerHt"] = TargetTowerHt-ED["Twr2Shft"] + ED["TowerBsHt"] = ED["TowerBsHt"] * LAMBDA + + ED["HubMass"] = ED["HubMass"] * LAMBDA**3 + ED["HubIner"] = ED["HubIner"] * LAMBDA**5 + ED["GenIner"] = ED["GenIner"] * LAMBDA**5 + ED["NacMass"] = ED["NacMass"] * LAMBDA**3 + ED["NacYIner"] = ED["NacYIner"] * LAMBDA**5 + + # Other variables can be edded here for example: + # ED["GBRatio"] = 50 + + + # Example B: distributed structural blade properties in ElastoDyn blade file + # BldProp columns in this file are: + # 0 BlFract, 1 StrcTwst, 2 BMassDen, 3 FlpStff, 4 EdgStff + if EDbld is not None: + EDbld["BldProp"][:, 2] *= LAMBDA**2 # blade mass per length + EDbld["BldProp"][:, 3] *= LAMBDA**4 # flapwise EI + EDbld["BldProp"][:, 4] *= LAMBDA**4 # edgewise EI + + # Example C: tower distributed properties in ElastoDyn tower file + # TowProp columns are: + # 0 HtFract, 1 TMassDen, 2 TwFAStif, 3 TwSSStif + if EDtwr is not None: + EDtwr["TowProp"][:, 1] *= LAMBDA**2 # tower mass per length + EDtwr["TowProp"][:, 2] *= LAMBDA**4 # tower fore-aft EI + EDtwr["TowProp"][:, 3] *= LAMBDA**4 # tower side-side EI + + # Example D: aerodynamic blade geometry in AeroDyn blade file + # BldAeroNodes columns include: + # 0 BlSpn, 4 BlTwist, 5 BlChord, ... + for ADbld in ADbld_list or []: + ADbld["BldAeroNodes"][:, 0] *= LAMBDA # spanwise node locations + ADbld["BldAeroNodes"][:, 5] *= LAMBDA # chord + + # Example E: AeroDyn scalar update, if desired + if AD is not None: + # TowProp columns: + # 0 TwrElev 1 TwrDiam 2 TwrCd 3 TwrTI 4 TwrCb 5 TwrCp 6 TwrCa + OrgTowerHt=AD["TowProp"][-1, 0] + AD["TowProp"][:, 0] *= ED["TowerHt"]/OrgTowerHt # scale TwrDiam + AD["TowProp"][:, 1] *= LAMBDA # scale TwrDiam + + # ------------------------------------------------------------------ + # 5) Write modified files back IN PLACE. + # This preserves original file names and relative folder structure. + # ------------------------------------------------------------------ + files = deck.inputFilesRead + + write_file_if_present(deck.fst_vt["Fst"], Path(files.get("Fst")) if files.get("Fst") else None) + write_file_if_present(ED, Path(files.get("ED")) if files.get("ED") else None) + write_file_if_present(EDbld, Path(files.get("EDbld")) if files.get("EDbld") else None) + write_file_if_present(EDtwr, Path(files.get("EDtwr")) if files.get("EDtwr") else None) + write_file_if_present(AD, Path(files.get("AD")) if files.get("AD") else None) + + # FASTInputDeck stores AeroDyn blade files as a list. In this NREL 5MW case, + # all three blade entries point to the same physical file, so write unique paths only. + ad_bld_paths = [] + if "ADbld" in files: + ad_bld_paths = [Path(files["ADbld"])] + for ADbld, path in zip(ADbld_list or [], ad_bld_paths): + write_file_if_present(ADbld, path) + + print(f"\nDone. Scaled case written under: {TARGET_DIR.resolve()}") + + +if __name__ == "__main__": + main()